2013-04-04 3 views
2

Попытка развернуть войну с файлом bean-файла в Fuse Servicemix (версия 4.3.1). Я использую maven для создания моей войны. Кажется, я не могу заставить это работать. Может ли кто-нибудь предоставить веб-сайт, который может рассказать мне, как это сделать?Получение всего этого для работы: Война, 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

решение Fat войны

Это минимальное жизнеспособное решение, которое работает для меня. Я играл вокруг, пытаясь удалить вещи, и он сломался, как только я это сделал, часто даже не отправляя сообщение об ошибке. Структура


каталог:

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

Вы должны добавить Spring OSGi ContextLoaderListener ваш web.xml в противном случае он не работает. Вам также понадобятся зависимости от Spring-DM 1.2.1. Посмотрите на Pax Web Spring sample и особенно на web.xml. Это рабочий пример о том, как использовать Spring в Karaf/Fuse-ServiceMix ...

Думаю, я указал на неправильный образец. Вам нужно использовать следующее.

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

+0

Ахим. Ссылка, приведенная выше, говорит мне включить ContextLoaderListener, чтобы я был там хорош. Я взял ваш пример и попробовал. Я удалил все вещи jsp и просто использовал простой веб-сайт.xml с помощью ContextLoaderListener и страницы приветствия index.html. Пакет загружается отлично без ошибок. Но заявление печати в моих бобах никогда не срабатывает. Добавление кода в исходное сообщение. – Thirlan

+0

Achim это, безусловно, пропуская мой beans-файл. Я удалил отладку и добавил разрыв строки на моем println. Он никогда не исполняется. – Thirlan

+1

Я исправил класс контекста, извините, был неправильный образец. –