2013-04-04 75 views
2

尝试在Fuse Servicemix(版本4.3.1)中与bean文件部署一场战争。我正在使用maven来打造我的战争。我似乎无法得到这个工作。任何人都可以提供一个网站,可以告诉我如何做到这一点?全部工作:War,OSGI,Spring Beans,Maven

本网站告诉我应该在web.xml文件中放入什么,但没有解释其余部分。

http://fusesource.com/docs/esbent/7.0/esb_deploy_osgi/BuildWar-Spring.html

我在19天的时间里尝试了几种解决方案和方法。每个人似乎都对这只猫有不同的看法,但它们都不适合我。

脂肪战争(解决)

见回答以下


瘦战争

在OSGi的似乎是不可能的。需要手动导入太多的包。 这个链接似乎可以解决它,但似乎有很多令人讨厌的副作用。

http://davidvaleri.wordpress.com/2011/08/17/deploying-spring-mvc-based-web-applications-to-osgi-using-apache-servicemix/

回答

0

发战争解决

这是为我工作的最低可行的解决方案。我一直在尝试去除东西,并且一旦我发现它就会中断,而且通常甚至不会发布错误消息。


目录结构:

src/main/java/test/Test.java 
src/main/webapp/WEB-INF/web.xml 
src/main/webapp/WEB-INF/applicationContext.xml 

的pom.xml

... 
    <groupId>test</groupId> 
    <artifactId>war-bean-test</artifactId> 
    <packaging>war</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>3.0.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.osgi</groupId> 
      <artifactId>spring-osgi-web</artifactId> 
      <version>1.2.0</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <version>2.3.7</version> 
       <executions> 
        <execution> 
        <id>bundle-manifest</id> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>manifest</goal> 
        </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <supportedProjectTypes> 
        <supportedProjectType>jar</supportedProjectType> 
        <supportedProjectType>bundle</supportedProjectType> 
        <supportedProjectType>war</supportedProjectType> 
        </supportedProjectTypes> 
        <instructions> 
        <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName> 
        <Bundle-Version>${project.version}</Bundle-Version> 

        <!-- IMPORTANT resolution:=optional fixes bug where bundle fails to load unnecessary packages such as bsh. You also need javax.servlet. In Servicemix 4.3.1 it is provided by geronimo servlet. --> 
        <Import-Package> 
         javax.servlet 
         *; resolution:=optional 
        </Import-Package> 
        <Export-Package></Export-Package> 

        <!-- IMPORTANT explicitly adding the jars fixes the numerous CassNotFoundExceptions --> 
        <Bundle-ClassPath> 
         .,WEB-INF/classes,{maven-dependencies} 
        </Bundle-ClassPath> 
        <Web-ContextPath>warbeantest</Web-ContextPath> 
        <Webapp-Context>warbeantest</Webapp-Context> 

        <!-- adding inline=true to Embed-Dependency causes {maven-dependencies} to not work and you will have to add every jar by hand --> 
        <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency> 
        <Embed-Transitive>true</Embed-Transitive> 
        <Embed-Directory>WEB-INF/lib</Embed-Directory> 
        </instructions> 
       </configuration> 
       </plugin> 

       <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.3</version> 
       <configuration> 
        <archive> 
        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> 
        </archive> 
       </configuration> 
       </plugin> 
     </plugins> 
    </build> 
</project> 

web.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"> 
    <display-name>war-bean-test</display-name> 
    <description>war-bean-test</description> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </context-param> 

    <!-- If you remove this then the spring beans will still work, but you wont be able to fetch services and resources from other osgi bundles --> 
    <context-param> 
     <param-name>contextClass</param-name> 
     <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
</web-app> 

的applicationContext.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-3.0.xsd"> 

    <bean id="test" class="test.Test"> 
     <property name="value" value="1" /> 
    </bean> 
</beans> 

Test.java

package test; 
public class Test { 
    private int value = 0; 
    public TestImpl() { } 

    public void setValue(int value) { 
     // Should print to console when you load into Fuse Servicemix 
     System.out.println("testing..."); 
     this.value = value; 
    } 

    public int getValue() { return value; } 
} 
0

您需要到春节的OSGi的ContextLoaderListener添加到web.xml否则它不能正常工作。你还需要依赖Spring-DM 1.2.1。 看看Pax Web Spring sample,尤其是web.xml。这是一个关于如何在Karaf/Fuse-ServiceMix中使用Spring的工作示例...

我想我指出了你错误的示例。您不需要使用以下内容。

contextClass
org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext

+0

阿希姆。我上面提供的链接告诉我要包含ContextLoaderListener,所以我很好。我拿你的榜样试了一下。我删除了所有jsp的东西,只是使用了一个简单的网页。xml与ContextLoaderListener和一个欢迎的index.html页面。捆绑加载罚款没有错误。但是我的bean中的print语句从不会触发。将代码添加到原始帖子。 – Thirlan 2013-04-05 18:06:58

+0

Achim它肯定会跳过我的beans文件。我远程调试并在我的println上添加了一个换行符。它永远不会执行。 – Thirlan 2013-04-05 19:56:54

+1

我纠正了上下文类,抱歉是错误的示例。 – 2013-04-06 06:47:51