THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
This simple demo contains an empty web application and a bundle jar with 2 actions that use FreeMarker, Velocity and Spring. To use it install the war file struts2-osgi-demo-1.0-SNAPSHOT.war in your server and navigate to: http://localhost/struts2-osgi-demo-1.0-SNAPSHOT/.
The Struts 2 OSGi plugin
Excerpt |
---|
leverages OSGi to allow Struts 2 applications to be divided into multiple jars (bundles) and managed at runtime |
The demo is available here
...
- Place your Spring xml files under
/META-INF/spring
in the bundle jar file - Copy all the bundle jar files into
/WEB-INF/classes/bundles
in your application - Make sure that the following properties are set in struts.xml or struts.properties in your application:
Code Block XML XML <constant name="struts.objectFactory" value="osgi" /> <constant name="struts.objectFactory.delegate" value="springOsgi" /> <constant name="struts.freemarker.manager.classname" value="org.apache.struts2.osgi.BundleFreemarkerManager" />
- Install the Struts 2 Spring plugin in your application, like in normal Struts 2 applications.
- Configure your web.xml like:
Code Block XML XML <listener> <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Struts Blank</display-name> <filter> <filter-name>struts2-execute</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class> </filter> <filter> <filter-name>struts2-prepare</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2-prepare</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2-execute</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextClass</param-name> <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value>osgibundle:/META-INF/spring/*.xml</param-value> </context-param> </web-app> </listener> {code:xml} # Add the Spring OSGi dependency to your web app, if you are using maven: {code:xml} <dependency> <groupId>org.springframework.osgi</groupId> <artifactId>spring-osgi-web</artifactId> <version>1.1.2</version> </dependency>
- Download Spring OSGi and copy all the required bundles under /classes/bundles/other. For Struts OSGi 1.1.2, these are the required bundles:
No Format com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.apache.commons.logging-1.1.1.jar org.springframework.aop-2.5.5.A.jar org.springframework.beans-2.5.5.A.jar org.springframework.context-2.5.5.A.jar org.springframework.core-2.5.5.A.jar org.springframework.osgi.core-1.1.2.A.jar org.springframework.osgi.extender-1.1.2.A.jar org.springframework.osgi.io-1.1.2.A.jar org.springframework.osgi.web-1.1.2.A.jar org.springframework.web-2.5.5.A.jar
...
Code Block | ||||
---|---|---|---|---|
| ||||
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>velocity-tools</groupId>
<artifactId>velocity-tools</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>1.8</version>
</dependency>
|
...
Code Block | ||||
---|---|---|---|---|
| ||||
<build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <version>1<version>2.40.0</version> <configuration> <instructions> <manifestLocation>META-INF</manifestLocation> <Export-Package> org.apache.struts2.osgi.demo </Export-Package> <Import-Package> *,com.opensymphony.xwork2 </Import-Package> <Bundle-Activator> org.apache.struts2.osgi.StrutsActivator </Bundle-Activator> </instructions> </configuration> </plugin> </plugins> </build> |
...