| Apache Struts 2 Plugin Registry > Home > OSGi Plugin |
| Name | OSGi Plugin |
|---|---|
| Publisher | |
| License | Open Source (ASL2) |
| Version | 0.1-SNAPSHOT |
| Compatibility | Struts 2.0.9+ |
| Homepage | OSGi Plugin |
| Experimental | Yes |
| Download | SVN |
|
This plugin is only experimental and hasn't been released yet. It is not ready to be used in production applications. |
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 leverages OSGi to allow Struts 2 applications to be divided into multiple jars (bundles) and managed at runtime. It allows you to separate your application into jars (called bundles), each containing a struts.xml file, Action classes, and Velocity (for now) files.
The demo is available here![]()
If your actions do not extend ActionSupport, and you are not using Spring then convert your jar that contains Actions, Velocity files, and a struts.xml file into a bundle, add a few lines in the jar's manifest.mf:
Bundle-Activator: org.apache.struts2.osgi.StrutsActivator Export-Package: com.mycompany.myapp.actions Bundle-Version: 1.0.0 Bundle-SymbolicName: foo.actions
Now the jar is ready to be deployed. Drop the jar into the /WEB-INF/classes/bundles directory and it will automatically be installed when the application starts up.
If your actions extend ActionSupport, or use other classes distributed with Struts, you will have to list their package names in the jar's manifest.mf:
Import-Package: com.opensymphony.xwork2
If you want to use the Spring as the object factory for your actions, then follow these steps:
<constant name="struts.objectFactory" value="osgi" /> <constant name="struts.objectFactory.delegate" value="spring" /> <constant name="struts.freemarker.manager.classname" value="org.apache.struts2.osgi.BundleFreemarkerManager" />
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
to web.xml and an empty applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans></beans>
under /WEB-INF/ in your application. This is a hack, but the Spring support doesn't work otherwise. TODO: find a way around this dirty hack
<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>
Here is how an example architecture would look:
| (view as slideshow) | ||
|---|---|---|
|
||
| Example Architecture | ||
The following settings can be customized. See the developer guide
.
| Setting | Description | Default | Possible Values |
|---|---|---|---|
| struts.objectFactory.delegate | The alias of the ObjectFactory to wrap | struts | Any configured alias |
Follow these steps to use this plugin:
<filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> <init-param> <param-name>packageProviders</param-name> <param-value>org.apache.struts2.osgi.OsgiConfigurationProvider</param-value> </init-param> </filter>
See the Maven Bundle Plugin documentation
for more details.
<build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <version>1.4.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>
| Version | Date | Author | Notes |
|---|