Author: musachy Date: Wed Apr 8 13:01:33 2009 New Revision: 763231 URL: http://svn.apache.org/viewvc?rev=763231&view=rev Log: Add demo bundle (Convention + FreeMarker + Velocity + Spring). Fix several bugs in OSGi plugin
Added: struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/pom.xml struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/HelloWorldAction.java struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/Message.java struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/META-INF/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/META-INF/spring/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/META-INF/spring/applicationContext.xml struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello-convention.ftl struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello.ftl struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello.vm struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/home.ftl struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/struts.xml Removed: struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/MyBundleActivator.java struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/resources/META-INF/ Modified: struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/ (props changed) struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/pom.xml struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/actions/BundlesAction.java struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/actions/ShellAction.java struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/resources/struts.xml struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/SpringOsgiObjectFactory.java struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/loaders/StaticContentBundleResourceLoader.java struts/sandbox/trunk/struts2-osgi-plugin/pom.xml Propchange: struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Wed Apr 8 13:01:33 2009 @@ -0,0 +1 @@ +target Modified: struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/pom.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/pom.xml?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/pom.xml (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/pom.xml Wed Apr 8 13:01:33 2009 @@ -1,79 +1,68 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd";> - <modelVersion>4.0.0</modelVersion> - <groupId>org.apache.struts.osgi</groupId> - <artifactId>struts2-admin-bundle</artifactId> - <version>1.0-SNAPSHOT</version> - <packaging>jar</packaging> - <name>Struts 2 OSGi Admin Bundle</name> + <modelVersion>4.0.0</modelVersion> + <groupId>org.apache.struts.osgi</groupId> + <artifactId>struts2-admin-bundle</artifactId> + <version>1.0.0-SNAPSHOT</version> + <packaging>bundle</packaging> + <name>Struts 2 OSGi Admin Bundle</name> - <dependencies> - <dependency> - <groupId>org.apache.struts</groupId> - <artifactId>struts2-osgi-plugin</artifactId> - <version>1.0.0-SNAPSHOT</version> - </dependency> + <dependencies> + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-osgi-plugin</artifactId> + <version>1.0.0-SNAPSHOT</version> + </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> <version>3.8.1</version> </dependency> + </dependencies> - - </dependencies> - - <properties> - <jdkLevel>1.5</jdkLevel> - </properties> + <properties> + <jdkLevel>1.5</jdkLevel> + </properties> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <configuration> - <archive> - <manifestFile> - src/main/resources/META-INF/MANIFEST.MF - </manifestFile> - </archive> - </configuration> - </plugin> - <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.admin* - </Export-Package> - <Import-Package> - com.opensymphony.xwork2, - * - </Import-Package> - <Bundle-Activator> - org.apache.struts2.osgi.admin.MyBundleActivator - </Bundle-Activator> - </instructions> - </configuration> - </plugin> - </plugins> - <pluginManagement> - <plugins> - <plugin> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <source>1.5</source> - <target>1.5</target> - </configuration> - </plugin> - </plugins> - </pluginManagement> - </build> + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <extensions>true</extensions> + <version>2.0.0</version> + <configuration> + <instructions> + <manifestLocation>META-INF</manifestLocation> + <Import-Package> + *,com.opensymphony.xwork2 + </Import-Package> + <Export-Package> + org.apache.struts2.osgi.admin* + </Export-Package> + <Bundle-Activator> + org.apache.struts2.osgi.StrutsActivator + </Bundle-Activator> + <Spring-Context> + *;create-asynchronously:=false + </Spring-Context> + </instructions> + </configuration> + </plugin> + </plugins> + <pluginManagement> + <plugins> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.5</source> + <target>1.5</target> + </configuration> + </plugin> + </plugins> + </pluginManagement> + </build> </project> Modified: struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/actions/BundlesAction.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/actions/BundlesAction.java?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/actions/BundlesAction.java (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/actions/BundlesAction.java Wed Apr 8 13:01:33 2009 @@ -1,15 +1,18 @@ package org.apache.struts2.osgi.admin.actions; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + import org.apache.struts2.dispatcher.DefaultActionSupport; import org.apache.struts2.osgi.BundleAccessor; import org.osgi.framework.Bundle; import org.osgi.framework.BundleException; -import com.opensymphony.xwork2.inject.Inject; -import com.opensymphony.xwork2.config.entities.PackageConfig; -import com.opensymphony.xwork2.config.Configuration; -import java.util.*; -import java.lang.reflect.Array; +import com.opensymphony.xwork2.config.Configuration; +import com.opensymphony.xwork2.config.entities.PackageConfig; +import com.opensymphony.xwork2.inject.Inject; public class BundlesAction extends DefaultActionSupport { Modified: struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/actions/ShellAction.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/actions/ShellAction.java?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/actions/ShellAction.java (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/java/org/apache/struts2/osgi/admin/actions/ShellAction.java Wed Apr 8 13:01:33 2009 @@ -1,17 +1,13 @@ package org.apache.struts2.osgi.admin.actions; import java.io.ByteArrayOutputStream; -import java.io.IOException; import java.io.PrintStream; -import org.apache.struts2.osgi.BundleAccessor; import org.apache.struts2.osgi.admin.services.ServicesFactory; import org.apache.struts2.osgi.admin.services.shell.ShellService; -import org.osgi.framework.ServiceReference; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; -import com.opensymphony.xwork2.inject.Inject; public class ShellAction extends ActionSupport { private String command; Modified: struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/resources/struts.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/resources/struts.xml?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/resources/struts.xml (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/admin-bundle/src/main/resources/struts.xml Wed Apr 8 13:01:33 2009 @@ -3,24 +3,26 @@ "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd";> -<struts> +<struts> <package name="bundle-admin" namespace="/osgi/admin" extends="struts-default"> + <default-action-ref name="bundles" /> + <action name="bundle_*!*" class="org.apache.struts2.osgi.admin.actions.BundlesAction" method="{2}"> <param name="id">{1}</param> <result type="freemarker">viewBundle.ftl</result> - </action> + </action> <action name="bundles" class="org.apache.struts2.osgi.admin.actions.BundlesAction" method="index"> <result type="freemarker">viewBundles.ftl</result> - </action> - - - <action name="execCommand" class="org.apache.struts2.osgi.admin.actions.ShellAction"> - <result type="freemarker">commandResult.ftl</result> - </action> - - <action name="shell"> - <result type="freemarker">shell.ftl</result> - </action> + </action> + + + <action name="execCommand" class="org.apache.struts2.osgi.admin.actions.ShellAction"> + <result type="freemarker">commandResult.ftl</result> + </action> + + <action name="shell"> + <result type="freemarker">shell.ftl</result> + </action> </package> </struts> Added: struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/pom.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/pom.xml?rev=763231&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/pom.xml (added) +++ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/pom.xml Wed Apr 8 13:01:33 2009 @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd";> + <modelVersion>4.0.0</modelVersion> + <groupId>org.apache.struts.osgi</groupId> + <artifactId>struts2-demo-bundle</artifactId> + <version>1.0.0-SNAPSHOT</version> + <packaging>bundle</packaging> + <name>Struts 2 OSGi Demo Bundle</name> + + <dependencies> + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-core</artifactId> + <version>2.1.7-SNAPSHOT</version> + </dependency> + + <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> + + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-convention-plugin</artifactId> + <version>2.1.7-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-spring-plugin</artifactId> + <version>2.1.7-SNAPSHOT</version> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <extensions>true</extensions> + <version>2.0.0</version> + <configuration> + <instructions> + <manifestLocation>META-INF</manifestLocation> + <Import-Package> + *,com.opensymphony.xwork2 + </Import-Package> + <Bundle-Activator> + org.apache.struts2.osgi.StrutsActivator + </Bundle-Activator> + <Spring-Context> + *;create-asynchronously:=false + </Spring-Context> + </instructions> + </configuration> + </plugin> + </plugins> + <pluginManagement> + <plugins> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.5</source> + <target>1.5</target> + </configuration> + </plugin> + </plugins> + </pluginManagement> + </build> +</project> Added: struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/HelloWorldAction.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/HelloWorldAction.java?rev=763231&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/HelloWorldAction.java (added) +++ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/HelloWorldAction.java Wed Apr 8 13:01:33 2009 @@ -0,0 +1,31 @@ +package actions.osgi; + +import com.opensymphony.xwork2.ActionSupport; +import org.apache.struts2.convention.annotation.ParentPackage; +import org.apache.struts2.convention.annotation.ResultPath; +import org.apache.struts2.convention.annotation.Action; + +...@resultpath("/content") +public class HelloWorldAction extends ActionSupport { + private Message message; + + @Action("hello-convention") + public String execute() { + return SUCCESS; + } + + public Message getMessage() { + return message; + } + + public void setMessage(Message message) { + this.message = message; + } + + public String toString() { + StringBuilder sb = new StringBuilder("{message:"); + sb.append(message != null ? message.getText() : "null"); + sb.append("}"); + return sb.toString(); + } +} \ No newline at end of file Added: struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/Message.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/Message.java?rev=763231&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/Message.java (added) +++ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/java/actions/osgi/Message.java Wed Apr 8 13:01:33 2009 @@ -0,0 +1,37 @@ +/* + * $Id$ + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package actions.osgi; + +public class Message { + private String text; + + public Message(String text) { + this.text = text; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } +} Added: struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/META-INF/spring/applicationContext.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/META-INF/spring/applicationContext.xml?rev=763231&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/META-INF/spring/applicationContext.xml (added) +++ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/META-INF/spring/applicationContext.xml Wed Apr 8 13:01:33 2009 @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; + xmlns:aop="http://www.springframework.org/schema/aop"; xmlns:tx="http://www.springframework.org/schema/tx"; xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd";> + + <bean class="actions.osgi.Message" id="message"> + <constructor-arg type="java.lang.String" value="Welcome to the OSGi plugin. You can checkout any time you like, but can never leave"/> + </bean> + + <bean class="actions.osgi.HelloWorldAction" id="helloWorldAction" scope="prototype"> + <property name="message" ref="message" /> + </bean> +</beans> + Added: struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello-convention.ftl URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello-convention.ftl?rev=763231&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello-convention.ftl (added) +++ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello-convention.ftl Wed Apr 8 13:01:33 2009 @@ -0,0 +1,10 @@ +<html> + <head> + <title>Action mapped by the Convention plugin</title> + </head> + <body> + This is an action mapped by the Convention plugin, using a FreeMarker result. + <br /> + Message from Action: ${message.text} + </body> +</html> \ No newline at end of file Added: struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello.ftl URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello.ftl?rev=763231&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello.ftl (added) +++ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello.ftl Wed Apr 8 13:01:33 2009 @@ -0,0 +1,10 @@ +<html> + <head> + <title>Action mapped by the XML configurationn</title> + </head> + <body> + This is an action mapped by XML configuration, using a FreeMarker result. + <br /> + Message from Action: ${message.text} + </body> +</html> \ No newline at end of file Added: struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello.vm URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello.vm?rev=763231&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello.vm (added) +++ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/hello.vm Wed Apr 8 13:01:33 2009 @@ -0,0 +1,11 @@ +<html> + <head> + <title>Action mapped by the XML configurationn</title> + </head> + <body> + This is an action mapped by XML configuration, using a Velocity result. + ->$top + <br /> + Message from Action: $message.text + </body> +</html> \ No newline at end of file Added: struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/home.ftl URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/home.ftl?rev=763231&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/home.ftl (added) +++ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/content/osgi/home.ftl Wed Apr 8 13:01:33 2009 @@ -0,0 +1,14 @@ +<html> + <head> + <title>OSGi Demo Bundle</title> + </head> + <body> + This demo contains actions that will be packaged into an OSGi bundle and loaded by the Struts 2 OSGi plugin. + <br /> + <ul> + <li><@s.a namespace="/osgi" action="hello-convention">Action mapped by the Convention plugin, with FreeMarker result</@s.a></li> + <li><@s.a namespace="/osgi" action="hello-freemarker">Action mapped by XML, with FreeMarker result</@s.a></li> + <li><@s.a namespace="/osgi" action="hello-velocity">Action mapped by XML, with Velocity result</@s.a></li> + </ul> + </body> +</html> \ No newline at end of file Added: struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/struts.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/struts.xml?rev=763231&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/struts.xml (added) +++ struts/sandbox/trunk/struts2-osgi-plugin/demo-bundle/src/main/resources/struts.xml Wed Apr 8 13:01:33 2009 @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE struts PUBLIC + "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" + "http://struts.apache.org/dtds/struts-2.0.dtd";> + +<struts> + <package name="bundle-demo" namespace="/osgi" extends="struts-default"> + <default-action-ref name="home" /> + <action name="hello-velocity" class="helloWorldAction"> + <result type="velocity">/content/osgi/hello.vm</result> + </action> + <action name="hello-freemarker" class="helloWorldAction"> + <result type="freemarker">/content/osgi/hello.ftl</result> + </action> + + <action name="home"> + <result type="freemarker">/content/osgi/home.ftl</result> + </action> + </package> +</struts> \ No newline at end of file Modified: struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java Wed Apr 8 13:01:33 2009 @@ -15,13 +15,15 @@ String CURRENT_BUNDLE_NAME = "__bundle_name__"; - void init(Map<String, Bundle> bundles, Map<String, String> packageToBundle); + void setPackageToBundle(Map<String, String> packageToBundle); Class loadClass(String name) throws ClassNotFoundException; InputStream loadResourceAsStream(String name) throws IOException; - URL loadResource(String name); + InputStream loadResourceFromAllBundlesAsStream(String name) throws IOException; + + URL loadResourceFromAllBundles(String name) throws IOException; Map<String, Bundle> getBundles(); @@ -38,4 +40,6 @@ void addPackageFromBundle(Bundle bundle, String packageName); void setBundleContext(BundleContext bundleContext); + + void setBundles(Map<String, Bundle> bundles); } Modified: struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java Wed Apr 8 13:01:33 2009 @@ -66,8 +66,7 @@ return bundleContext != null ? bundleContext.getServiceReferences(className, params) : null; } - public void init(Map<String, Bundle> bundles, Map<String, String> packageToBundle) { - this.bundles = Collections.unmodifiableMap(bundles); + public void setPackageToBundle(Map<String, String> packageToBundle) { this.packageToBundle = packageToBundle; this.packagesByBundle = new HashMap<Bundle, Set<String>>(); for (Map.Entry<String, String> entry : packageToBundle.entrySet()) { @@ -92,27 +91,15 @@ } public Class<?> loadClass(String className) throws ClassNotFoundException { - Class cls = null; - Bundle bundle = getCurrentBundle(); if (bundle != null) { - cls = bundle.loadClass(className); - LOG.debug("Located class [#0] in bundle [#1]", className, bundle.getSymbolicName()); - } - - //try all the bundles - for (Bundle bundle2 : bundles.values()) { - try { - return bundle2.loadClass(className); - } catch (Exception ex) { - //ignore - } + Class cls = bundle.loadClass(className); + if (LOG.isTraceEnabled()) + LOG.debug("Located class [#0] in bundle [#1]", className, bundle.getSymbolicName()); + return cls; } - if (cls == null) { - throw new ClassNotFoundException("Unable to find class " + className + " in bundles"); - } - return cls; + throw new ClassNotFoundException("Unable to find class " + className); } private Bundle getCurrentBundle() { @@ -208,4 +195,8 @@ public void setBundleContext(BundleContext bundleContext) { this.bundleContext = bundleContext; } + + public void setBundles(Map<String, Bundle> bundles) { + this.bundles = Collections.unmodifiableMap(bundles); + } } Modified: struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java Wed Apr 8 13:01:33 2009 @@ -12,22 +12,22 @@ private ObjectFactory delegateObjectFactory; private BundleAccessor bundleResourceLoader; private OsgiConfigurationProvider osgiConfigurationProvider; - + @Inject - public void setDelegateObjectFactory(@Inject Container container, + public void setDelegateObjectFactory(@Inject Container container, @Inject("struts.objectFactory.delegate") String delegate) { if (delegate == null) { delegate = "struts"; } delegateObjectFactory = container.getInstance(ObjectFactory.class, delegate); } - + @Inject public void setBundleResourceLoader(BundleAccessor rl) { this.bundleResourceLoader = rl; } - - + + public boolean isNoArgConstructorRequired() { return delegateObjectFactory.isNoArgConstructorRequired(); } @@ -36,14 +36,16 @@ return delegateObjectFactory.buildBean(clazz, extraContext); } + public Object buildBean(String className, Map<String, Object> extraContext, boolean injectInternal) throws Exception { + return delegateObjectFactory.buildBean(className, extraContext, injectInternal); + } + @Override public Class getClassInstance(String className) throws ClassNotFoundException { - try - { + try { return delegateObjectFactory.getClassInstance(className); } - catch (Exception e) - { + catch (Exception e) { return bundleResourceLoader.loadClass(className); } } Modified: struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java Wed Apr 8 13:01:33 2009 @@ -63,6 +63,7 @@ try { osgiHost.setExtraBundleActivators(Arrays.asList(new BundleRegistrationListener())); osgiHost.init(); + bundleAccessor.setBundles(osgiHost.getBundles()); } catch (Exception e) { if (LOG.isErrorEnabled()) LOG.error("Failed to start the OSGi container", e); @@ -78,26 +79,43 @@ } catch (InvalidSyntaxException e) { throw new ConfigurationException(e); } - + + + //init action contect + ActionContext ctx = ActionContext.getContext(); + if (ctx == null) { + ctx = new ActionContext(new HashMap()); + ActionContext.setContext(ctx); + } + Map<String, String> packageToBundle = new HashMap<String, String>(); Set<String> bundleNames = new HashSet<String>(); + if (refs != null) { for (ServiceReference ref : refs) { - if (!bundleNames.contains(ref.getBundle().getSymbolicName())) { - bundleNames.add(ref.getBundle().getSymbolicName()); + String bundleName = ref.getBundle().getSymbolicName(); + if (!bundleNames.contains(bundleName)) { + bundleNames.add(bundleName); if (LOG.isDebugEnabled()) - LOG.debug("Loading packages from bundle [#0]", ref.getBundle().getSymbolicName()); + LOG.debug("Loading packages from bundle [#0]", bundleName); PackageLoader loader = (PackageLoader) bundleContext.getService(ref); - for (PackageConfig pkg : loader.loadPackages(ref.getBundle(), bundleContext, objectFactory, configuration.getPackageConfigs())) { - configuration.addPackageConfig(pkg.getName(), pkg); - packageToBundle.put(pkg.getName(), ref.getBundle().getSymbolicName()); + try { + ctx.put(BundleAccessor.CURRENT_BUNDLE_NAME, bundleName); + for (PackageConfig pkg : loader.loadPackages(ref.getBundle(), bundleContext, objectFactory, configuration.getPackageConfigs())) { + configuration.addPackageConfig(pkg.getName(), pkg); + packageToBundle.put(pkg.getName(), bundleName); + } + } finally { + ctx.put(BundleAccessor.CURRENT_BUNDLE_NAME, null); } } } } - bundleAccessor.init(osgiHost.getBundles(), packageToBundle); + + //add the loaded packages to the BundleAccessor + bundleAccessor.setPackageToBundle(packageToBundle); //reload container that will load configuration based on bundles (like convention plugin) reloadExtraProviders(configuration.getContainer()); Modified: struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/SpringOsgiObjectFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/SpringOsgiObjectFactory.java?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/SpringOsgiObjectFactory.java (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/SpringOsgiObjectFactory.java Wed Apr 8 13:01:33 2009 @@ -26,13 +26,17 @@ import java.util.Map; +/** + * This Object factory uses the ActionContext(s) published by Spring OSGi + * to lookup beans + */ public class SpringOsgiObjectFactory extends ObjectFactory { private final static String SPRING_SERVICE_NAME = "org.springframework.context.ApplicationContext"; private BundleAccessor bundleAccessor; public Object buildBean(String className, Map<String, Object> extraContext, boolean injectInternal) throws Exception { - return containsBean(className) ? getBean(className) : super.buildBean(className, extraContext); + return containsBean(className) ? getBean(className) : super.buildBean(className, extraContext, injectInternal); } public Object buildBean(Class clazz, Map<String, Object> extraContext) throws Exception { Modified: struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/loaders/StaticContentBundleResourceLoader.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/loaders/StaticContentBundleResourceLoader.java?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/loaders/StaticContentBundleResourceLoader.java (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/plugin/src/main/java/org/apache/struts2/osgi/loaders/StaticContentBundleResourceLoader.java Wed Apr 8 13:01:33 2009 @@ -2,16 +2,26 @@ import java.io.IOException; import java.io.InputStream; +import java.net.URL; import org.apache.struts2.dispatcher.DefaultStaticContentLoader; import org.apache.struts2.osgi.DefaultBundleAccessor; +import org.apache.struts2.osgi.BundleAccessor; +import com.opensymphony.xwork2.inject.Inject; /** * Loads static resources from bundles * */ public class StaticContentBundleResourceLoader extends DefaultStaticContentLoader { - protected InputStream findInputStream(String path) throws IOException { - return DefaultBundleAccessor.getInstance().loadResourceFromAllBundlesAsStream(path); + private BundleAccessor bundleAccessor; + + protected URL findResource(String path) throws IOException { + return bundleAccessor.loadResourceFromAllBundles(path); + } + + @Inject + public void setBundleAccessor(BundleAccessor bundleAccessor) { + this.bundleAccessor = bundleAccessor; } } Modified: struts/sandbox/trunk/struts2-osgi-plugin/pom.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/pom.xml?rev=763231&r1=763230&r2=763231&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-osgi-plugin/pom.xml (original) +++ struts/sandbox/trunk/struts2-osgi-plugin/pom.xml Wed Apr 8 13:01:33 2009 @@ -32,6 +32,7 @@ <modules> <module>admin-bundle</module> + <module>demo-bundle</module> <module>plugin</module> </modules> </project>