Общие баночки в apache-tomcat 6.0.20 - PullRequest
7 голосов
/ 20 января 2010

Я довольно новичок в JWS.

У меня есть веб-приложение (несколько веб-служб), которое я хочу развернуть с помощью tomcat 6.0.20 в системе Linux.

Все в порядкеесли я создаю файл .war со всеми используемыми библиотеками внутри и помещаю его в каталог webapps, но я хочу, чтобы эти файлы jar были общими, а сам файл .war слишком велик.

Сначала я попробовалинтуитивно понятный способ - я создал ссылку (WEB-INF / lib) на каталог, содержащий файлы jar, но странно, что он не может быть развернут (он запускается, если каталог не является ссылкой):

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 кажутся правильными.

Ответы [ 3 ]

6 голосов
/ 20 января 2010

Вы пытались поместить общие файлы JAR в $ CATALINA_HOME / lib ? Он говорит, что ". Обычно, классы приложений НЕ должны быть размещены здесь", но звучит так, как вы бы хотели, чтобы в вашем случае.

$ CATALINA_HOME / shared / lib, похоже, пропал в 6.0 (он был там в 5.5).

4 голосов
/ 07 марта 2010

Чтобы добавить немного больше подробностей об этом.

  • В проекте metro используется загрузчик общих классов, позволяющий предоставлять библиотеки всем развертываемым веб-приложениям.
  • В проекте metro используется механизм поддержки библиотек Tomcat для обновления стандартного Java-дистрибутива

Загрузчик общего класса

Общие ресурсы используются совместно.во всех веб-приложениях и не используются внутренними классами 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
1 голос
/ 20 января 2010

В Tomcat 6 содержимое $CATALINA_HOME/lib будет доступно для загрузчика классов " Common " (см. http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html). Каталог shared/lib, который Tomcat 5.5 раньше не имел давно существует.

Тем не менее, я хотел бы знать, какие банки вы пытаетесь поставить именно там, поскольку случай JAX-WS (или Metro) «особенный». Кроме того, какой 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.xml ant-скрипт, предоставляемый в дистрибутиве metro (и я бы порекомендовал имитировать его).

...