Кто-нибудь успешно запустил Tomcat через Spring OSGi Web в ServiceMix4? - PullRequest
1 голос
/ 24 сентября 2010

Мы уже некоторое время используем Apache ServiceMix Fuse версии 4.2.0-fuse-02-00 для стандартных приложений OSGi и довольно успешно.Мы также использовали CXF для обеспечения доступности веб-сервисов.

Теперь мы хотели бы развернуть наши веб-приложения на servicemix4 и использовать уровень OSGi для зависимостей и сервисов.Однако, похоже, что упакованный в PAX Web не поддерживает тэги, которые мы интенсивно использовали: Richfaces, facelets и т. Д. Похоже, что решение springDM, которое позволяет работать с тэгами, описанными здесь: http://static.springsource.org/osgi/docs/current/reference/html/web.html должно работать,однако мне было тяжело запустить веб-сервер, и в настоящее время я получаю эту ошибку.

Exception in thread "WebExtender-Init" java.lang.NoClassDefFoundError: org/apache/catalina/Loader
 at org.springframework.osgi.web.extender.internal.activator.WarListenerConfiguration.createDefaultWarDeployer(WarListenerConfiguration.java:194)
 at org.springframework.osgi.web.extender.internal.activator.WarListenerConfiguration.<init>(WarListenerConfiguration.java:105)
 at org.springframework.osgi.web.extender.internal.activator.WarLoaderListener$1.run(WarLoaderListener.java:366)
 at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: org.apache.catalina.Loader
 at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
 at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
 at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
 at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
 ... 4 more

Я создал 2 фрагмента, как предполагает документация Spring.но они не будут разрешены, они останутся установленными

1) для фрагмента конфигурации веб-сервера определен следующий узел фрагмента:

<Fragment-Host>org.springframework.osgi.web.extender</Fragment-Host>

и файл META-INF / spring / extender /tomcat-deployer.xml, содержащий

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans.xsd">
 <bean id="warDeployer"
        class="org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer" />

</beans>

2) и фрагмент конфигурации Catalina со следующим хостом:

<Fragment-Host>org.springframework.osgi.catalina.start.osgi</Fragment-Host>

и определенным файлом conf / server.xml, который в основном является копиейобщая установка Windows файла tomcat 6 server.xml.

Я также несколько дней возился с зависимостями, это было сложно.но вот особенности, с которыми я связывался, чтобы получить это далеко.Я также устанавливал функцию jpa-hibernate по умолчанию для fuse-servicemix.

<feature name="spring-dependencies" version="1.0.0">
    <bundle>mvn:org.osgi/org.osgi.compendium/4.1.0</bundle>
    <bundle>mvn:javax.el/com.springsource.javax.el/1.0.0</bundle>
    <bundle>mvn:javax.xml.ws/com.springsource.javax.xml.ws/2.1.1</bundle>
    <bundle>mvn:javax.xml.stream/com.springsource.javax.xml.stream/1.0.1</bundle>
    <bundle>mvn:javax.xml.rpc/com.springsource.javax.xml.rpc/1.1.0</bundle>
    <bundle>mvn:javax.xml.soap/com.springsource.javax.xml.soap/1.3.0</bundle>
    <bundle>mvn:javax.persistence/com.springsource.javax.persistence/1.99.0</bundle>
    <bundle>mvn:org.aspectj/com.springsource.org.aspectj.tools/1.6.8.RELEASE</bundle>
    <bundle>mvn:org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1</bundle>
    <bundle>mvn:org.apache.commons/com.springsource.org.apache.commons.lang/2.4.0</bundle>
    <bundle>mvn:org.apache.xmlcommons/com.springsource.org.apache.xmlcommons/1.3.4</bundle>
    <bundle>mvn:org.jboss.el/com.springsource.org.jboss.el/2.0.0.GA</bundle>
    <bundle>mvn:org.jboss.javassist/com.springsource.javassist/3.9.0.GA</bundle>
    <bundle>mvn:org.aopalliance/com.springsource.org.aopalliance/1.0.0</bundle>
</feature>
<feature name="spring" version="1.0.0">
    <!--feature version="1.0.0">spring-dependencies</feature-->
    <!--bundle>mvn:org.springframework.osgi/org.springframework.osgi.core/1.2.1</bundle--> <!-- there is 1.2.1, but servicemix plays the 1.2.0 game -->
    <!--bundle>mvn:org.springframework.osgi/org.springframework.osgi.io/1.2.1</bundle--> <!-- there is 1.2.1, but servicemix plays the 1.2.0 game -->
    <!--bundle>mvn:org.springframework.osgi/org.springframework.osgi.extender/1.2.1</bundle--> <!-- there is 1.2.1, but servicemix plays the 1.2.0 game -->
    <!--bundle>mvn:org.springframework.osgi/org.springframework.osgi.extensions.annotation/1.2.1</bundle--> <!-- there is 1.2.1, but servicemix plays the 1.2.0 game -->
    <!-- commenting the 3.0.4 release to see if i can get by with the prepacked version in servicmeix bundle>mvn:org.springframework/org.springframework.aop/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.asm/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.aspects/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.beans/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.context/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.context.support/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.core/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.expression/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.jms/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.jdbc/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.transaction/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.orm/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework.security/org.springframework.security.core/3.0.3.RELEASE</bundle-->
    <bundle>mvn:org.springframework.osgi/org.springframework.osgi.web/1.2.0</bundle> <!-- there is 1.2.1, but servicemix plays the 1.2.0 game -->
    <bundle>mvn:org.springframework.osgi/org.springframework.osgi.web.extender/1.2.0</bundle>  <!-- there is 1.2.1, but servicemix plays the 1.2.0 game -->
</feature>
<feature name="tomcat" version="1.0.0">
    <!--feature version="1.0.0">spring</feature-->
    <bundle>mvn:javax.ejb/com.springsource.javax.ejb/3.0.0</bundle>
    <bundle>mvn:javax.activation/com.springsource.javax.activation/1.1.1</bundle>
    <bundle>mvn:javax.mail/com.springsource.javax.mail/1.4.1</bundle>
    <bundle>mvn:org.apache.coyote/com.springsource.org.apache.coyote/6.0.18</bundle>
    <bundle>mvn:org.apache.juli/com.springsource.org.apache.juli.extras/6.0.18</bundle>
    <bundle>mvn:org.apache.catalina/com.springsource.org.apache.catalina/6.0.18</bundle>
    <bundle>mvn:org.springframework/org.springframework.instrument.tomcat/3.0.4.RELEASE</bundle>
</feature>
<feature name="web-dependencies" version="1.0.0">
    <!--feature version="1.0.0">spring-dependencies</feature-->
    <!--feature version="1.0.0">tomcat-dependencies</feature-->
    <bundle>mvn:javax.servlet/com.springsource.javax.servlet/2.5.0</bundle>
    <!--bundle>mvn:javax.servlet/com.springsource.javax.servlet.jsp/2.1.0</bundle--> <!--we want this but PAX Web -JSP Support claims tooffer the same thing -->
    <!--bundle>mvn:javax.servlet/com.springsource.javax.servlet.jsp.jstl/1.2.0</bundle--> <!--bundle is causing conflict issues on javax.servlet.jsp 2.1.0 in fuse, omitting for now -->

    <!-- I have been having problems getting the following to work because of conflicts with the javax.servlet.jsp package 1.2.0 presented by Pax Web seems to not be able to be found -->
    <bundle>mvn:javax.faces/com.springsource.javax.faces/1.2.0.09</bundle>
    <bundle>mvn:javax.portlet/com.springsource.javax.portlet/2.0.0</bundle>>
    <bundle>mvn:org.springframework/org.springframework.web/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.web.servlet/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework/org.springframework.web.portlet/3.0.4.RELEASE</bundle>
    <bundle>mvn:org.springframework.webflow/org.springframework.binding/2.0.9.RELEASE</bundle>
    <bundle>mvn:org.springframework.webflow/org.springframework.js/2.0.9.RELEASE</bundle>
    <bundle>mvn:org.springframework.webflow/org.springframework.webflow/2.0.9.RELEASE</bundle>
    <bundle>mvn:org.springframework.webflow/org.springframework.faces/2.0.9.RELEASE</bundle>  <!--2.1.0 and up rely on Java Server Faces API 2.0 Pre-Release right now, so we must stop at 2.0.9 -->
    <bundle>mvn:com.sun.facelets/com.springsource.com.sun.facelets/1.1.14</bundle>
</feature>

Я рассмотрел переход на SpringDM, но похоже, что проект был перенесен в Virgo, который находится только в инкубаторе.прямо сейчас.Кроме того, мы в основном довольны Sericemix, включая его функцию установки maven.

Любая информация или ресурсы будут оценены, спасибо, Джереми

1 Ответ

2 голосов
/ 09 ноября 2010

Так что после перерыва я вернулся и занялся этим с еще несколькими членами моей команды. Короче говоря, мы успешно получили Tomcat в ServiceMix с использованием SpringDM. Я перечислю некоторые ошибки, которые я сделал, пытаясь настроить это.

1) Функция обновления ServiceMix повторно анализирует POM, поэтому фрагменты будут разрешены только после обновления их хоста. Вот почему мои все еще были установлены

2) Мне фактически не нужен ни один из двух фрагментов, для обоих фрагментов есть значения по умолчанию, подходящие для запуска в tomcat.

3) Мне не хватало пакета catalalina.start.osgi, который требовался для предоставления услуг tomcat слою osgi и, в частности, веб-расширителю Spring DM. Однако я пропустил это, потому что я пропустил 3 ключевых репозитория. Вот наша информация о Nexus на этих репозиториях:

Repository ID: springframework.osgi
Repository Name: Springframework OSGI
Repository Type: proxy
Repository Policy: Release
Repository Format: maven2
Contained in groups: 
   Public Repositories
Remote URL: http://maven.springframework.org/osgi/

Repository ID: com.springsource.repository.bundles.release
Repository Name: SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases
Repository Type: proxy
Repository Policy: Release
Repository Format: maven2
Contained in groups: 
   Public Repositories
Remote URL: http://repository.springsource.com/maven/bundles/release/

Repository ID: com.springsource.repository.bundles.milestones
Repository Name: SpringSource Enterprise Bundle Repository - SpringSource Bundle Milestones
Repository Type: proxy
Repository Policy: Release
Repository Format: maven2
Contained in groups: 
   Public Repositories
Remote URL: http://repository.springsource.com/maven/bundles/milestone/

у нас также есть 4 других репозитория SpringSource Enterprise (на всякий случай0

Repository ID: com.springsource.repository.bundles.external
Repository Name: SpringSource Enterprise Bundle Repository - External Bundle Releases
Repository Type: proxy
Repository Policy: Release
Repository Format: maven2
Contained in groups: 
   Public Repositories
Remote URL: http://repository.springsource.com/maven/bundles/external/

Repository ID: com.springsource.repository.libraries.external
Repository Name: SpringSource Enterprise Bundle Repository - External Library Releases
Repository Type: proxy
Repository Policy: Release
Repository Format: maven2
Contained in groups: 
   Public Repositories
Remote URL: http://repository.springsource.com/maven/libraries/external/

Repository ID: com.springsource.snapshot
Repository Name: SpringSource Enterprise Bundle Repository - SpringSource Bundle Snapshots
Repository Type: proxy
Repository Policy: Snapshot
Repository Format: maven2
Contained in groups: 
   Public Repositories
Remote URL: http://repository.springsource.com/maven/bundles/snapshot/

Repository ID: com.springsource.repository.libraries.release
Repository Name: SpringSource Enterprise Bundle Repository - SpringSource Library Releases
Repository Type: proxy
Repository Policy: Release
Repository Format: maven2
Contained in groups: 
   Public Repositories
Remote URL: http://repository.springsource.com/maven/libraries/release/

Итак, мы добавили эти два фрагмента в комплект каталины в дополнение к койоту на сервисном миксе:

<bundle>mvn:org.springframework.osgi/catalina.start.osgi/1.0.0</bundle>
<bundle>mvn:org.apache.jasper/com.springsource.org.apache.jasper/6.0.24</bundle>

для jsp требуется комплект яшмы

4) После добавления пакетов, обновления и перезапуска соответствующих пакетов Tomcat встал и работает нормально. мы могли бы нажать localhost: 8080 и пустую страницу. Мы решили попробовать и развернуть простое веб-приложение, которое входит в комплект поставки Spring-DM, здесь:

http://www.springsource.org/osgi

После решения некоторых проблем с зависимостями мы смогли очистить и собрать это веб-приложение и развернуть его. В нашей среде Ubuntu вы можете увидеть, как она взрывает войну в каталог / tmp /, из которого она будет обслуживать веб-приложение. К сожалению, после некоторой отладки Tomcat мы получили 404 секунды, пытаясь набрать http://localhost:8080/simple-web-app/, и мы поняли, что эта установка tomcat почему-то не отображает обычную информацию сервлета web.xml по умолчанию. Итак, пока что нам нужно было включить сервлет по умолчанию в web-приложение нашего веб-приложения:

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

    <!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- The mapping for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>

Дальнейшее изучение того, почему нашему образцу приложения не удалось найти сервлеты по умолчанию, приведено здесь:

http://forum.springsource.org/showthread.php?p=328657#post328657

Таким образом, в этот раз мы, кажется, уже собрали все и работали с работающими тегами-библиотеками, как требуется, учитывая этот весенний пример. Хотя нам все еще приходится пытаться использовать путь к классам OSGi для загрузки ресурсов или использовать службы OSGi из веб-приложения, у нас по крайней мере есть первый шаг вниз.

Обратите внимание, что эта ссылка была очень полезна для проверки того, что я сделал, даже если мы не используем Wicket.

http://kevinwebber.ca/blog/2009/11/11/wicket-osgi-and-spring-dm.html#references

извините за ссылки, stackoverflow не даст мне больше 1 ..

...