7

私はJWSにかなり慣れていません。

Linux システムで tomcat 6.0.20 を使用してデプロイしたい Web アプリケーション (いくつかの Web サービス) があります。

使用するすべてのライブラリを含む .war ファイルを生成して webapps ディレクトリに配置すれば問題ありませんが、これらの jar ファイルを共有したいのですが、.war ファイル自体が大きすぎます。

最初に直感的な方法を試しました - jar を含むディレクトリへのリンク ( WEB-INF/lib ) を作成しましたが、奇妙なことにデプロイに失敗しました (ディレクトリがリンクでない場合は開始されます)。

SEVERE: Error configuring application listener of class com.sun.xml.ws.transport.http.servlet.WSServletContextListener
java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3877)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
        at org.apache.catalina.core.StandardService.start(StandardService.java:516)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

その後、 $CATALINA_HOME/shared/lib ディレクトリを作成し、そこに jar を移動しました ( WEB-INF/lib を削除しました)。それでも同じエラーが表示されます。Tomcat は他の場所で jar を探していないようです。 WEB-INF/lib ディレクトリより。しかし一方で、シンボリックリンクを作成することで違いが生じるのはなぜでしょうか?

私のCATALINA_HOMEとJRE_HOME変数は正しいようです。

4

3 に答える 3

6

共有 jar ファイルを$CATALINA_HOME/libに配置しようとしましたか? 「。通常、アプリケーションクラスはここに配置しないでください」と書かれていますが、あなたのケースでは実際に配置したいように聞こえます。

$CATALINA_HOME/shared/lib は 6.0 ではなくなったようです (5.5 にはありました)。

于 2010-01-20T07:56:20.257 に答える
4

これについてもう少し詳細を追加します。

  • メトロ プロジェクトは、共有クラス ローダーを使用して、デプロイするすべての Web アプリケーションにライブラリを公開できるようにします。
  • メトロ プロジェクトは、Tomcat の承認済みライブラリ メカニズムを使用して、標準の Java ディストリビューションを更新します。

共有クラスローダー

共有リソースはすべての Web アプリケーションで共有され、Tomcat の内部クラスでは使用されません。Tomcat 6 で共有ライブラリが必要な場合。$CATALINA_HOME/conf/catalina.properties を調整し、shared.loader=${catalina.home}/shared/lib/*.jar を設定します

承認されたライブラリ

Java プラットフォームを更新し、標準配布に含まれる特定のライブラリの新しいバージョンを組み込むには、ライブラリを /lib/endorsed に追加するか、システム全体のプロパティ java.endorsed.dirs を設定することができます (Tomcat 6 が承認されたライブラリを必要とする場合)。いくつかの戦略を使用して、必要な承認済みライブラリを組み込むことができます

  • 指定されたライブラリを java-home/lib/endorsed に追加します
  • Tomcat コマンド ライン パラメータ -Djava.endorsed.dirs を設定します。
  • デフォルトのディレクトリ $CATALINA_HOME/endorsed を使用します。/bin/setclasspath.sh または /bin/setclasspath.bat を参照してください
  • システム全体のパラメーター JAVA_ENDORSED_DIRS を設定します
于 2010-03-07T13:17:00.793 に答える
1

Tomcat 6 では、のコンテンツが「共通」クラス ローダー$CATALINA_HOME/libで利用できるようになります( http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.htmlを参照)。Tomcat 5.5 で使用されていたディレクトリは存在しません。shared/lib

ただし、JAX-WS(またはMetro)の場合は「特別」であるため、そこに配置しようとしているjarを正確に知りたいです。また、どのJDKを使用していますか?

更新:前述したように、Metro のケースは少し特殊です。インストールするには、webservices-rt.jar、webservices-tools.jar、webservices-extra.jar、webservices-extra-api.jar を にコピーし$CATALINA_HOME/libます。ただし、webservices-api.jar と jsr173_api.jar は$CATALINA_HOME/endorsed. 実際、これはmetro-on-tomcat.xmlMetro ディストリビューションで提供されている ant スクリプトが行うことです (これを模倣することをお勧めします)。

于 2010-01-20T08:08:19.273 に答える