Mittwoch, Januar 22, 2020

Geteilt jar-Dateien in apache-tomcat-6.0.20

Ich bin ziemlich neu bei Zeugen Jehovas.

Ich habe eine web-Anwendung ( mehrere web-services), die Bereitstellung der Verwendung von tomcat-6.0.20 auf einem linux-system.

Alles ok ist, wenn ich generieren .Krieg-Datei mit allen verwendeten Bibliotheken innerhalb und steckte es in das webapps-Verzeichnis, aber ich möchte diese Gläser geteilt, und die .war-Datei selbst ist viel zu groß.

Zuerst habe ich versucht die intuitive Art und Weise – ich habe einen link ( WEB-INF/lib ) in das Verzeichnis mit den jars, aber seltsamerweise ist es nicht implementiert ( es beginnt, wenn das Verzeichnis nicht auf einen link ):

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)

Danach habe ich die $CATALINA_HOME/shared/lib-Verzeichnis, und zog die Gläser gibt es ( habe ich gelöscht WEB-INF/lib ) und es zeigt immer noch den gleichen Fehler – es scheint, dass tomcat nicht auf der Suche für die Gläser woanders als im WEB-INF/lib-Verzeichnis. Aber auf der anderen Seite – warum sollte erstellen Sie einen symbolischen link einen Unterschied machen?

Meine CATALINA_HOME und JRE_HOME vars scheint zu Stimmen.

InformationsquelleAutor zbigh | 2010-01-20

3 Kommentare

  1. 6

    Haben Sie versucht, setzen die gemeinsam genutzte jar-Dateien in $CATALINA_HOME/lib? Es sagt, dass „. Normalerweise, Anwendung Klassen sollten NICHT hier gestellt werden“, aber klingt wie Sie es eigentlich wollen, in Ihrem Fall.

    Die $CATALINA_HOME/shared/lib scheint Weg zu sein in 6.0 (er war dort in 5.5).

    • Gut, das scheint zu funktionieren – ich habe nicht einmal versucht, vor, wie es war, als veraltet markiert in einem anderen tutorial.
    • Es ist ersetzt worden durch shared.loader Eigenschaft in /conf/catalina.properties. Sie können eine beliebige lokale Festplatte die Datei-system-Pfad(s) dort.
  2. 4

    Hinzufügen ein bisschen mehr detail auf diesem.

    • Das metro-Projekt nutzt die shared class loader, um es möglich zu setzen Bibliotheken auf alle webapps, die Sie bereitstellen.
    • Das metro-Projekt verwendet gebilligt-library-Mechanismus von Tomcat zu aktualisieren Sie Ihre standard-java-distribution

    Shared Class loader

    Freigegebenen Ressourcen in allen web-Anwendungen und nicht von Tomcat-interne Klassen.Wenn Tomcat 6 erfordert eine gemeinsame Bibliothek. Passen Sie $CATALINA_HOME/conf/catalina.Eigenschaften und setzen Sie ein Gemeinschaftsbad.loader=${catalina.home}/shared/lib/*.jar

    Gebilligt Bibliotheken

    Update der java-Plattform und die Einführung einer neuen version einer bestimmten Bibliothek, die in der standard-distribution, man kann fügen Sie die Bibliothek /lib/endorsed oder legen Sie die systemweite Eigenschaft java.gebilligt.dirs Wenn Tomcat 6 erfordert eine gutgeheißene Bibliothek. Mehrere Strategien können eingesetzt werden, integrieren die erforderlichen gebilligt Bibliothek

    • fügen Sie die library um java-home/lib/endorsed
    • setzen der Tomcat-command-line-parameter -Djava.gebilligt.dirs
    • verwenden Sie das Standard-Verzeichnis $CATALINA_HOME/gebilligt; siehe /bin/setclasspath.sh oder /bin/setclasspath.bat
    • legen Sie systemweite parameter JAVA_ENDORSED_DIRS
    • Wenn CATALINA_HOME unterscheidet sich von CATALINA_BASE, dann wird die Datei zu Bearbeiten ist $CATALINA_BASE/conf/catalina.Eigenschaften. Um Verhalten wie Tomcat 5.5, Satz geteilt.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar.
  3. 1

    In Tomcat 6, der Inhalt $CATALINA_HOME/lib zur Verfügung gestellt werden, um die „Gemeinsamen“ class loader (siehe http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html). Die shared/lib Verzeichnis Tomcat 5.5 verwendet zu haben, nicht lange existieren.

    Allerdings würde ich gerne wissen, welche Gläser Sie versuchen, es genau wie der Fall des JAX-WS (oder Metro), die „Besondere“. Auch, was das JDK benutzt du?

    Update: Wie gesagt, der Fall der U-Bahn ist etwas besonderes. Um es zu installieren, kopieren webservices-rt.jar, webservices-tools.jar, webservices-extra.jar, webservices-extra-api.jar in $CATALINA_HOME/lib. Aber webservices-api.jar und jsr173_api.jar sollte gehen $CATALINA_HOME/endorsed. Tatsächlich, dies ist, was die metro-on-tomcat.xml ant-Skript zur Verfügung gestellt, die in der U-Verteilung hat (und ich würde empfehlen, ihn zu imitieren).

    • Wir verwenden U, Hibernate, MySQL, JNI für linux-native-Funktionen und ein paar von unseren internen Gläsern, und das JDK 1.6.17.

Kostenlose Online-Tests