WebLogicでS2JSFを動かしてみる

 前回書いた、WebLogicS2JSFを動かす件、はぶさんのセミナーの時にひがさんに聞いたら将来的には動く様にするということだったので、もう少しまじめに動作検証してみることにしました。

0.テスト環境

1.seasar2, s2jsf, s2jsf-exampleをeclipseのプロジェクトとしてインポートする。

 seasar2s2jsfのプロジェクトは、リモートデバッグ用にインポートしておきます。ここでは、seasar 2.1.11を使います。

2.WebLogicを起動し、s2jsf-exampleフォルダをデプロイする。

 WebLogicのコンソールからフォルダを指定してデプロイすると、起動したときのコマンドプロンプトに以下の様なエラーが出ます。

2005-02-19 17:36:45,899 [ExecuteThread: '4' for queue: 'weblogic.kernel.System'] INFO  net.sourceforge.myfaces.config.FacesConfigurator - Reading standard config net/sourceforge/myfaces/resource/standard-faces-config.xml
2005-02-19 17:36:46,019 [ExecuteThread: '4' for queue: 'weblogic.kernel.System'] INFO  net.sourceforge.myfaces.config.FacesConfigurator - Reading config jar:file:/C:/temp/myfaces9481.jar!/META-INF/faces-config.xml
2005-02-19 17:36:46,900 [ExecuteThread: '4' for queue: 'weblogic.kernel.System'] INFO  net.sourceforge.myfaces.config.FacesConfigurator - Reading config jar:file:/C:/temp/myfaces9482.jar!/META-INF/faces-config.xml
2005-02-19 17:36:47,321 [ExecuteThread: '4' for queue: 'weblogic.kernel.System'] INFO  net.sourceforge.myfaces.config.FacesConfigurator - Reading config /WEB-INF/faces-config.xml
2005-02-19 17:36:47,341 [ExecuteThread: '4' for queue: 'weblogic.kernel.System'] INFO  net.sourceforge.myfaces.config.FacesConfigurator - Reading config /WEB-INF/faces-config.xml
2005-02-19 17:36:49,183 [ExecuteThread: '4' for queue: 'weblogic.kernel.System'] WARN  net.sourceforge.myfaces.webapp.webxml.WebXmlParser - Ignored element 'init-param' as child of 'servlet'.
2005-02-19 17:36:49,193 [ExecuteThread: '4' for queue: 'weblogic.kernel.System'] INFO  net.sourceforge.myfaces.webapp.StartupServletContextListener - ServletContext 'D:\eclipse3.0\workspace\s2jsf-example' initialized.
<2005/02/19 17時36分50秒 JST> <Error> <HTTP> <BEA-101216> <サーブレット "s2servlet" は、Web アプリケーション "s2jsf-example" で、起動時のプリロードに失敗しました。
javax.servlet.ServletException: [ESSR0043]org.seasar.jsf.runtime.TaglibManagerImplが呼び出した対象が不正です。理由はorg.seasar.framework.exception.IORuntimeException: [ESSR0040]IO例外が発生しました。理由はjava.util.zip.ZipException: 指定されたファイルが見つかりません。
        at weblogic.servlet.internal.ServletStubImpl.createServlet(ServletStubImpl.java:909)
        at weblogic.servlet.internal.ServletStubImpl.createInstances(ServletStubImpl.java:873)
        at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:812)
        at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:3281)
        at weblogic.servlet.internal.WebAppServletContext.preloadServlets(WebAppServletContext.java:3238)
        at weblogic.servlet.internal.WebAppServletContext.preloadServlets(WebAppServletContext.java:3224)
        at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:3207)
        at weblogic.servlet.internal.WebAppServletContext.setStarted(WebAppServletContext.java:5737)
        at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:874)
        at weblogic.j2ee.J2EEApplicationContainer.start(J2EEApplicationContainer.java:2106)
        at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:2147)
        at weblogic.management.deploy.slave.SlaveDeployer$ComponentActivateTask.activateContainer(SlaveDeployer.java:2434)
        at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.doCommit(SlaveDeployer.java:2352)
        at weblogic.management.deploy.slave.SlaveDeployer$Task.commit(SlaveDeployer.java:2136)
        at weblogic.management.deploy.slave.SlaveDeployer$Task.checkAutoCommit(SlaveDeployer.java:2235)
        at weblogic.management.deploy.slave.SlaveDeployer$Task.prepare(SlaveDeployer.java:2130)
        at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.prepare(SlaveDeployer.java:2315)
        at weblogic.management.deploy.slave.SlaveDeployer.processPrepareTask(SlaveDeployer.java:866)
        at weblogic.management.deploy.slave.SlaveDeployer.prepareDelta(SlaveDeployer.java:594)
        at weblogic.management.deploy.slave.SlaveDeployer.prepareUpdate(SlaveDeployer.java:508)
        at weblogic.drs.internal.SlaveCallbackHandler$1.execute(SlaveCallbackHandler.java:25)
        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
>

 リモートデバッグなどを使ってステップ実行してみると、存在しないjarファイル(%WL_HOME%\server\lib\weblogic_sp.jar)を読み込もうとして失敗している様でした。そこで、%WL_HOME%\common\bin\commEnv.cmdからweblogic_sp.jarに関連する部分を削除して再度WebLogicを起動しました。

 今度は、s2jsf-exampleの初期化がうまくいった様に見えるのでhttp://localhost:7001/s2jsf-example/をブラウザで開きます。すると、以下のエラーが表示されます。

org.seasar.jsf.exception.UriNotFoundRuntimeException: [EJSF0005]http://java.sun.com/jsf/core
	at org.seasar.jsf.runtime.TaglibManagerImpl.getTaglibConfig(TaglibManagerImpl.java:52)
	at org.seasar.jsf.runtime.JsfConfigImpl.getTagConfig(JsfConfigImpl.java:57)
	at org.seasar.jsf.runtime.JsfConfigImpl.getTagConfig(JsfConfigImpl.java:68)
	at org.seasar.jsf.processor.TagProcessorImpl.processInject(TagProcessorImpl.java:133)
	at org.seasar.jsf.processor.ViewProcessor.(ViewProcessor.java:23)
	at org.seasar.jsf.runtime.TagProcessorHandler.startElement(TagProcessorHandler.java:49)
	at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
	at org.cyberneko.html.filters.DefaultFilter.startElement(DefaultFilter.java:179)
	at org.cyberneko.html.filters.NamespaceBinder.startElement(NamespaceBinder.java:280)
	at org.cyberneko.html.HTMLTagBalancer.callStartElement(HTMLTagBalancer.java:1014)
	at org.cyberneko.html.HTMLTagBalancer.startElement(HTMLTagBalancer.java:645)
	at org.cyberneko.html.HTMLScanner$ContentScanner.scanStartElement(HTMLScanner.java:2364)
	at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:1841)
	at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:758)
	at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:478)
	at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:431)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at org.seasar.jsf.runtime.TagProcessorTreeFactoryImpl.createTagProcessorTree(TagProcessorTreeFactoryImpl.java:38)
	at org.seasar.jsf.runtime.ViewTemplateFactoryImpl.getViewTemplate(ViewTemplateFactoryImpl.java:43)
	at org.seasar.jsf.runtime.ViewRendererImpl.renderView(ViewRendererImpl.java:54)
	at org.seasar.jsf.application.S2ViewHandler.renderView(S2ViewHandler.java:81)
	at org.seasar.jsf.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:110)
	at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
	at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
	at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
	at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:47)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
	at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:45)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6458)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
	at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
	at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
	at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
	at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)

 で、Tomcat 5上でもステップ実行して比較してみたのですが、WEB-INF/lib配下のjarファイルがTaglibManagerImplのinitが実行された時に取得できていない様に見えました。Tomcat 5の場合は、Thread.currentThread().getContextClassLoader()の結果にWEB-INF/lib/*.jarを含むものが入っているのですが、WebLogicの場合は、起動時に指定されたクラスパスの分と、もう一つ(%JAVA_HOME%\jre\lib\ext\*.jarかな?)が入っているだけです。

 WebLogicに触り初めて間もないので、この先の調査が出来てません。何か必要な情報があれば追試してみます。

 それから、存在しないjarファイルの読み込みは、エラーではなく無視にした方が良いのではないでしょうか? エラーの意味が分かるまでに随分時間が掛かってしまいました(^^;