1

We've been using Fuse's Apache ServiceMix version 4.2.0-fuse-02-00 for a while now for standard OSGi applications and have been fairly successful. We've also been leveraging CXF for making web services available.

Now we'd like to deploy our webapps to servicemix4 and leverage the OSGi layer for dependencies and services. However it seems that the packed in PAX Web does not support taglibs, which we've used heavily: Richfaces, facelets, etc. It seems that the springDM solution which allows for working taglibs outlined here: http://static.springsource.org/osgi/docs/current/reference/html/web.html should work, however I've had a hard time starting up the webserver, i currently get this error.

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

I've created 2 Fragments as the Spring documentation suggests. but they will not resolve, they remain as Installed

1) the webserver config fragment has the following fragment host defined:

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

and has a file META-INF/spring/extender/tomcat-deployer.xml containing

<?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) and a Catalina Config fragment with the following host:

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

and a conf/server.xml defined which is mostly a copy of a generic windows install of tomcat 6 server.xml file.

I've also been messing with the dependencies for a few days now, it has been difficult. but here are the features I've been messing with to get this far. I've also been installing the fuse-servicemix default "jpa-hibernate" feature.

<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>

I've considered switching to SpringDM but it seems like the project has been moved to Virgo which is only in incubator right now. Plus we've been mostly happy with Sericemix, including it's maven install feature.

Any insight or resources would be appreciated, thanks, Jeremy

4

1 に答える 1

2

それで、これから休憩した後、私は戻ってきて、私のチームの他のメンバーとこれに取り組みました. つまり、SpringDM を使用して ServiceMix で Tomcat を取得することに成功しました。この設定をしようとしたときに犯した間違いのいくつかをリストします。

1) ServiceMix の更新機能は POM を再分析するため、フラグメントはホストを更新した後にのみ解決されます。そのため、私のものはまだインストールされていました

2) 実際には 2 つのフラグメントのどちらも必要ありませんでした。両方のフラグメントには、Tomcat での起動に適したデフォルトがあります。

3) tomcat サービスを osgi レイヤー、より具体的には Spring DM の Web エクステンダーに提供するために必要な catalalina.start.osgi バンドルがありませんでした。しかし、私は 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 Repos があります (念のため 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/

そのため、servicemix の coyote に加えて、これら 2 つのフラグメントを catalina バンドルに追加しました。

<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 には jasper バンドルが必要です。

4) バンドルを追加し、適切なバンドルを更新して再起動した後、Tomcat は正常に起動して実行されました。localhost:8080 にアクセスすると、空白のページが表示されます。ここでSpring-DMのダウンロードに含まれるsimple-web-appを試してデプロイすることにしました:

http://www.springsource.org/osgi

いくつかの依存関係の問題を解決した後、この Web アプリをクリーンアップしてビルドし、デプロイすることができました。私たちの Ubuntu 環境では、Web アプリを提供する /tmp/ ディレクトリに戦争を展開することがわかりました。残念ながら、 Tomcat のデバッグ後にhttp://localhost:8080/simple-web-app/にアクセスしようとすると 404 が返されました。そのため、しばらくの間、Web アプリの web.xml にデフォルトのサーブレットを含める必要がありました。

    <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 クラスパスを使用してリソースをロードしたり、Web アプリから OSGi サービスを使用したりする必要はまだありますが、少なくとも最初の手順は完了しています。

このリンクは、Wicket を使用していなくても、私が行ったことを確認するのに非常に役立ちました。

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

リンクについて申し訳ありませんが、stackoverflow では複数のリンクを使用できません。

于 2010-11-09T15:17:34.023 に答える