2010-01-20 12 views
7

Soy bastante nuevo en JWS.Frascos compartidos en apache-tomcat 6.0.20

Tengo una aplicación web (varios servicios web) que deseo implementar utilizando tomcat 6.0.20 en un sistema Linux.

Todo está bien si genero un archivo .war con todas las bibliotecas usadas dentro y lo coloco en el directorio webapps, pero quiero tener estos archivos compartidos, y el archivo .war en sí es demasiado grande.

Primero trató de la manera intuitiva - He creado un enlace (WEB-INF/lib) al directorio que contiene los frascos, pero curiosamente no se infla (se inicia si el directorio no es un enlace):

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) 

Después de eso, creé el directorio $ CATALINA_HOME/shared/lib, moví los archivos allí (eliminé WEB-INF/lib) y aún muestra el mismo error - parece que tomcat no está buscando los tarros en cualquier lugar que no sea el directorio WEB-INF/lib. Pero, por otro lado, ¿por qué la creación de un enlace simbólico haría alguna diferencia?

Mi CATALINA_HOME y JRE_HOME vars parece tener razón.

Respuesta

6

¿Intentó poner los archivos jar compartidos en $CATALINA_HOME/lib? Dice que ". Normalmente, las clases de aplicación NO deberían colocarse aquí", pero suena como si realmente quisieras en tu caso.

El $ CATALINA_HOME/shared/lib parece haber desaparecido en 6.0 (estaba allí en 5.5).

+0

bien que parece funcionar - Ni siquiera he intentado antes, ya que se ha marcado como obsoleto en algunos tutorial. – zbigh

+4

Ha sido reemplazado por la propiedad 'shared.loader' en'/conf/catalina.properties'. Puede especificar cualquier ruta del sistema de archivos de disco local allí. – BalusC

1

En Tomcat 6, será puesto a disposición del "Common " cargador de clases del contenido de $CATALINA_HOME/lib (ver http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html). El directorio shared/lib que Tomcat 5.5 solía no existir por mucho tiempo.

Sin embargo, me gustaría saber qué jarras está tratando de poner allí exactamente como el caso de JAX-WS (o Metro) es "especial". Además, ¿qué JDK estás usando?

Actualización: Como dije, el caso de Metro es un poco especial. Para instalarlo, copie webservices-rt.jar, webservices-tools.jar, webservices-extra.jar, webservices-extra-api.jar en $CATALINA_HOME/lib. Pero webservices-api.jar y jsr173_api.jar deben ir en $CATALINA_HOME/endorsed. En realidad, esto es lo que hace el script ant metro-on-tomcat.xml proporcionado en la distribución del metro (y recomendaría imitarlo).

+0

Usamos Metro, Hibernate, MySQL, JNI para funciones nativas de Linux y algunas de nuestras jarras internas, y el JDK es 1.6.17. – zbigh

4

Para agregar un poco más de detalle sobre esto.

  • El proyecto metro usa el cargador de clases compartido para que sea posible exponer bibliotecas a todas las aplicaciones web que implemente.
  • El proyecto de metro utiliza el mecanismo de la biblioteca refrendado de Tomcat para actualizar la distribución de Java estándar

clase compartida cargador

recursos compartidos se comparten a través de todas las aplicaciones web y no utilizados por las clases internas Tomcat. Si Tomcat 6 requiere una biblioteca compartida. Ajuste $ CATALINA_HOME/conf/catalina.properties y establezca shared.loader = $ {catalina.home}/shared/lib/*.jar

bibliotecas Endorsed

Para actualizar la plataforma Java e incorporar una nueva versión de una biblioteca determinada, incluidos en la distribución estándar, se puede añadir la biblioteca a/lib/aprobado o establecer la amplia propiedad del sistema java.endorsed.dirs Si Tomcat 6 requiere una biblioteca endosada. Varias estrategias se pueden utilizar para incorporar la biblioteca respaldado requerido

  • añadir la biblioteca dada a java-hogar/lib/respaldaron
  • poner el parámetro de línea de comandos Tomcat -Djava.endorsed.dirs
  • utilice el valor predeterminado directorio $ CATALINA_HOME/endosado; ver /bin/setclasspath.sh o /bin/setclasspath.bat
  • sistema conjunto de parámetros de ancho JAVA_ENDORSED_DIRS
+0

Si CATALINA_HOME es diferente de CATALINA_BASE, entonces el archivo para editar es $ CATALINA_BASE/conf/catalina.properties. Para obtener un comportamiento como Tomcat 5.5, establezca shared.loader = $ {catalina.base}/shared/classes, $ {catalina.base}/shared/lib/*. Jar. – GargantuChet

Cuestiones relacionadas