2010-01-20 40 views
7

我是JWS的新手。apache-tomcat中的共享jar 6.0.20

我有一個Web應用程序(幾個Web服務),我想在Linux系統上使用tomcat 6.0.20進行部署。

如果我生成一個包含所有使用過的庫的.war文件並將其放入webapps目錄,但我希望共享這些jar文件,並且.war文件本身太大,那麼一切正常。

首先,我嘗試了直觀的方式 - 我創建了一個鏈接(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並不尋找除了WEB-INF/lib目錄以外的任何其他地方的jar。但另一方面,爲什麼創建符號鏈接會有所作爲?

我的CATALINA_HOME和JRE_HOME變量似乎是正確的。

回答

6

您是否嘗試將共享的jar文件放入$CATALINA_HOME/lib?它說「通常情況下,應用程序類不應該放在這裏」,但聽起來像你真的想要在你的情況。

$ CATALINA_HOME/shared/lib似乎在6.0中消失了(它在5.5中)。

+0

好,似乎工作 - 我還沒有嘗試過,因爲它被標記爲一些過時教程。 – zbigh 2010-01-20 08:33:16

+4

它已被'/ conf/catalina.properties'中的'shared.loader'屬性取代。您可以在其中指定任何本地磁盤文件系統路徑。 – BalusC 2010-01-20 12:35:42

1

在Tomcat 6中,$CATALINA_HOME/lib的內容將提供給「Common」類加載器(請參閱http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html)。 Tomcat 5.5曾經存在的shared/lib目錄不存在。

但是,我想知道JAX-WS(或Metro)的情況與「特殊」的情況完全相同。另外,你使用的是什麼JDK?

更新:正如我所說的,地鐵的情況有點特別。要安裝它,請複製$CATALINA_HOME/lib中的webservices-rt.jar,webservices-tools.jar,webservices-extra.jar,webservices-extra-api.jar。但webservices-api.jar和jsr173_api.jar應該在$CATALINA_HOME/endorsed。實際上,這就是metro發行版中提供的螞蟻腳本(我會推薦模仿它)。

+0

我們使用Metro,Hibernate,MySQL,JNI用於linux本地函數和一些我們的內部jar,JDK是1.6.17。 – zbigh 2010-01-20 08:33:53

4

在此添加更多細節。

  • metro項目使用共享類加載器,以便將庫展示給您部署的所有webapps。
  • 地鐵項目使用Tomcat的認可庫機制來更新你的標準Java發行

共享類裝載器

共享資源在所有Web應用程序共享,而不是使用Tomcat的內部類。如果Tomcat 6需要共享庫。調整$ CATALINA_HOME/conf/catalina.properties並設置shared.loader = $ {catalina.home}/shared/lib/*。罐子

贊同庫

要更新Java平臺,並結合給定庫的新版本,包含在標準的分佈,可以將庫添加到/ lib目錄/覈准或設置系統範圍內的屬性java.endorsed.dirs如果Tomcat 6需要一個認可的庫。有幾個策略可以用於集成所需的認可庫

  • 添加特定的圖書館,以java主/ lib目錄/批准
  • 設置Tomcat的命令行參數-Djava.endorsed.dirs
  • 使用默認目錄$ CATALINA_HOME/endorsed;看到/bin/setclasspath.sh或/bin/setclasspath.bat
  • 設定全系統的參數JAVA_ENDORSED_DIRS
+0

如果CATALINA_HOME與CATALINA_BASE不同,那麼要編輯的文件是$ CATALINA_BASE/conf/catalina.properties。要獲得像Tomcat 5.5這樣的行爲,請設置shared.loader = $ {catalina.base}/shared/classes,$ {catalina.base}/shared/lib/*。jar。 – GargantuChet 2014-07-12 19:33:03