Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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/Image Removed.

The Struts 2 OSGi plugin

Excerpt

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

...

  1. Place your Spring xml files under /META-INF/spring in the bundle jar file
  2. Copy all the bundle jar files into /WEB-INF/classes/bundles in your application
  3. 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" />
    
  4. Install the Struts 2 Spring plugin in your application, like in normal Struts 2 applications.
  5. 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>
    
  6. 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
XML
XML
<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
langxml
titleExample
<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>

...