You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2007/11/07 23:41:59 UTC
svn commit: r592931 - in /struts/sandbox/trunk/struts2-osgi-plugin: ./
src/main/java/org/apache/struts2/osgi/ src/main/resources/
Author: musachy
Date: Wed Nov 7 14:41:58 2007
New Revision: 592931
URL: http://svn.apache.org/viewvc?rev=592931&view=rev
Log:
Add Spring and FreeMarker support
* The Spring support is hacky and kind of a mess right now
Modified:
struts/sandbox/trunk/struts2-osgi-plugin/pom.xml
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundlePackageLoader.java
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleResourceLoader.java
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/PackageLoader.java
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/StrutsActivator.java
struts/sandbox/trunk/struts2-osgi-plugin/src/main/resources/struts-plugin.xml
Modified: struts/sandbox/trunk/struts2-osgi-plugin/pom.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/pom.xml?rev=592931&r1=592930&r2=592931&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-osgi-plugin/pom.xml (original)
+++ struts/sandbox/trunk/struts2-osgi-plugin/pom.xml Wed Nov 7 14:41:58 2007
@@ -29,10 +29,10 @@
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
- <version>2.0.9</version>
- </dependency>
-
- <dependency>
+ <version>2.1.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
<groupId>velocity-tools</groupId>
<artifactId>velocity-tools</artifactId>
<version>1.1</version>
Modified: struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java?rev=592931&r1=592930&r2=592931&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java (original)
+++ struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleAccessor.java Wed Nov 7 14:41:58 2007
@@ -6,10 +6,12 @@
import java.util.Map;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
public interface BundleAccessor {
void setBundles(Map<String,Bundle> bundles);
+ void setBundleContext(BundleContext bundleContext);
Class loadClass(String name) throws ClassNotFoundException;
InputStream loadResourceAsStream(String name) throws IOException;
URL loadResource(String name);
Modified: struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundlePackageLoader.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundlePackageLoader.java?rev=592931&r1=592930&r2=592931&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundlePackageLoader.java (original)
+++ struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundlePackageLoader.java Wed Nov 7 14:41:58 2007
@@ -9,6 +9,7 @@
import java.util.Map;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.config.Configuration;
@@ -20,8 +21,8 @@
public class BundlePackageLoader implements PackageLoader {
- public List<PackageConfig> loadPackages(Bundle bundle, ObjectFactory objectFactory, Map<String,PackageConfig> pkgConfigs) throws ConfigurationException {
- BundleConfigurationProvider prov = new BundleConfigurationProvider("struts.xml", bundle);
+ public List<PackageConfig> loadPackages(Bundle bundle, BundleContext bundleContext, ObjectFactory objectFactory, Map<String,PackageConfig> pkgConfigs) throws ConfigurationException {
+ BundleConfigurationProvider prov = new BundleConfigurationProvider("struts.xml", bundle, bundleContext);
Configuration config = new DefaultConfiguration("struts.xml");
for (PackageConfig pkg : pkgConfigs.values()) {
config.addPackageConfig(pkg.getName(), pkg);
@@ -34,10 +35,12 @@
static class BundleConfigurationProvider extends XmlConfigurationProvider {
private Bundle bundle;
+ private BundleContext bundleContext;
- public BundleConfigurationProvider(String filename, Bundle bundle) {
+ public BundleConfigurationProvider(String filename, Bundle bundle, BundleContext bundleContext) {
super(filename, true);
this.bundle = bundle;
+ this.bundleContext = bundleContext;
}
public BundleConfigurationProvider(String filename) { super(filename); }
@@ -47,20 +50,22 @@
Iterator<URL> iter = new EnumeratorIterator<URL>(e);
return iter;
}
+
@Override
- protected boolean verifyAction(String className, String name,
- Location loc) {
+ protected boolean verifyAction(String className, String name, Location loc) {
try {
- Class cls = bundle.loadClass(className);
- return cls != null;
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ return bundle.loadClass(className) != null;
+ } catch (Exception e) {
+ //try spring
+ try {
+ return SpringOSGiUtil.isValidBean(bundleContext, className);
+ } catch (Exception e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
return false;
}
}
-
-
}
static class EnumeratorIterator<E> implements Iterator<E> {
Modified: struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleResourceLoader.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleResourceLoader.java?rev=592931&r1=592930&r2=592931&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleResourceLoader.java (original)
+++ struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleResourceLoader.java Wed Nov 7 14:41:58 2007
@@ -2,13 +2,12 @@
import java.io.InputStream;
-import org.apache.struts2.util.ClassLoaderUtils;
-import org.apache.struts2.views.velocity.StrutsResourceLoader;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
-import com.opensymphony.xwork2.inject.Inject;
-
+/**
+ * Finds Velocity templates in bundles
+ */
public class BundleResourceLoader extends ClasspathResourceLoader {
public synchronized InputStream getResourceStream(String name)
Modified: struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java?rev=592931&r1=592930&r2=592931&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java (original)
+++ struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DefaultBundleAccessor.java Wed Nov 7 14:41:58 2007
@@ -10,17 +10,20 @@
import java.util.Map;
import java.util.Map.Entry;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
public class DefaultBundleAccessor implements BundleAccessor {
private static DefaultBundleAccessor self;
- private static final Log LOG = LogFactory.getLog(DefaultBundleAccessor.class);
+ private static final Logger LOG = LoggerFactory.getLogger(DefaultBundleAccessor.class);
private Map<String, Bundle> bundles = new HashMap<String, Bundle>();
private Map<String,String> classToBundle = new HashMap<String,String>();
+ private BundleContext bundleContext;
public DefaultBundleAccessor() {
self = this;
@@ -36,6 +39,11 @@
classToBundle.clear();
}
+ @Override
+ public void setBundleContext(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ }
+
public Class<?> loadClass(String name) throws ClassNotFoundException {
Class cls = null;
if (classToBundle.containsKey(name)) {
@@ -49,13 +57,25 @@
}
} catch (ClassNotFoundException ex) {
if (LOG.isDebugEnabled()) {
- LOG.debug("class not found in bundle "+entry.getValue().getSymbolicName(), ex);
+ LOG.debug("class not found in bundle "+entry.getValue().getSymbolicName());
}
}
}
}
if (cls == null) {
+ //try spring
+ try {
+ Object bean = SpringOSGiUtil.getBean(bundleContext, name);
+ if (bean != null)
+ cls = bean.getClass();
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ if (cls == null) {
throw new ClassNotFoundException("Unable to find class "+name+" in bundles");
}
return cls;
@@ -89,5 +109,4 @@
}
return null;
}
-
}
Modified: struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java?rev=592931&r1=592930&r2=592931&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java (original)
+++ struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/DelegatingObjectFactory.java Wed Nov 7 14:41:58 2007
@@ -1,5 +1,7 @@
package org.apache.struts2.osgi;
+import java.util.Map;
+
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Inject;
@@ -9,9 +11,8 @@
private BundleAccessor bundleResourceLoader;
@Inject
- public DelegatingObjectFactory(@Inject Container container,
- @Inject("struts.objectFactory.delegate") String delegate) {
-
+ public void setDelegateObjectFactory(@Inject Container container,
+ @Inject("struts.objectFactory.delegate") String delegate) {
if (delegate == null) {
delegate = "struts";
}
@@ -24,6 +25,14 @@
}
+ public boolean isNoArgConstructorRequired() {
+ return delegateObjectFactory.isNoArgConstructorRequired();
+ }
+
+ public Object buildBean(Class clazz, Map extraContext) throws Exception {
+ return delegateObjectFactory.buildBean(clazz, extraContext);
+ }
+
@Override
public Class getClassInstance(String className) throws ClassNotFoundException {
try
Modified: struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java?rev=592931&r1=592930&r2=592931&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java (original)
+++ struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/OsgiConfigurationProvider.java Wed Nov 7 14:41:58 2007
@@ -3,6 +3,7 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
@@ -20,8 +21,6 @@
import javax.servlet.ServletContext;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.apache.felix.framework.Felix;
import org.apache.felix.framework.cache.BundleCache;
import org.apache.felix.framework.util.FelixConstants;
@@ -35,8 +34,6 @@
import org.osgi.framework.BundleException;
import org.osgi.framework.BundleListener;
import org.osgi.framework.Constants;
-import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkListener;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
@@ -49,10 +46,12 @@
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ResolverUtil.Test;
import com.opensymphony.xwork2.util.location.LocatableProperties;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
public class OsgiConfigurationProvider implements ConfigurationProvider {
- private static final Log log = LogFactory.getLog(OsgiConfigurationProvider.class);
+ private static final Logger log = LoggerFactory.getLogger(OsgiConfigurationProvider.class);
private Felix felix;
private Map<String,Bundle> bundles = Collections.synchronizedMap(new HashMap<String,Bundle>());
@@ -66,6 +65,7 @@
@Inject
public void setBundleAccessor(BundleAccessor acc) {
acc.setBundles(bundles);
+ acc.setBundleContext(bundleContext);
}
@Inject
@@ -116,7 +116,7 @@
bundleNames.add(ref.getBundle().getSymbolicName());
log.info("Loading packages from bundle "+ref.getBundle().getSymbolicName());
PackageLoader loader = (PackageLoader) bundleContext.getService(ref);
- for (PackageConfig pkg : loader.loadPackages(ref.getBundle(), objectFactory, configuration.getPackageConfigs())) {
+ for (PackageConfig pkg : loader.loadPackages(ref.getBundle(), bundleContext, objectFactory, configuration.getPackageConfigs())) {
configuration.addPackageConfig(pkg.getName(), pkg);
}
}
@@ -134,12 +134,19 @@
}
protected void loadOsgi() {
+ //configuration properties
+ Properties systemProperties = getProperties("default.properties");
+ Properties strutsProperties = getProperties("struts-osgi.properties");
+
Map configMap = new StringMap(false);
+
configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
"org.osgi.framework; version=1.4.0," +
"org.osgi.service.packageadmin; version=1.2.0," +
"org.osgi.service.startlevel; version=1.0.0," +
- "org.osgi.service.url; version=1.0.0");
+ "org.osgi.service.url; version=1.0.0" +
+ getSystemPackages(systemProperties) +
+ strutsProperties.getProperty("xwork"));
Set<String> bundlePaths = new HashSet<String>(findInPackage("bundles"));
log.info("Loading Struts bundles "+bundlePaths);
@@ -151,7 +158,7 @@
configMap.put(FelixConstants.AUTO_START_PROP + ".1",
sb.toString());
- configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, "/tmp/foo");//System.getProperty("tmp.dir"));
+ configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, System.getProperty("tmp.dir"));
configMap.put(BundleCache.CACHE_DIR_PROP, "jim");
configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, "true");
configMap.put(FelixConstants.SERVICE_URLHANDLERS_PROP, "false");
@@ -182,6 +189,32 @@
}
+ }
+
+ private String getSystemPackages(Properties properties) {
+ String jreVersion = "jre-" + System.getProperty("java.version").substring(0, 3);
+ return properties.getProperty(jreVersion);
+ }
+
+ private Properties getProperties(String fileName) {
+ URL propertiesURL = OsgiConfigurationProvider.class.getClassLoader().getResource(
+ fileName);
+ Properties properties = new Properties();
+ InputStream is = null;
+ try {
+ is = propertiesURL.openConnection().getInputStream();
+ properties.load(is);
+ is.close();
+ } catch (Exception ex2) {
+ // Try to close input stream if we have one.
+ try {
+ if (is != null)
+ is.close();
+ } catch (IOException ex3) {
+ // Nothing we can do.
+ }
+ }
+ return properties;
}
class BundleRegistration implements BundleActivator, BundleListener {
Modified: struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/PackageLoader.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/PackageLoader.java?rev=592931&r1=592930&r2=592931&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/PackageLoader.java (original)
+++ struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/PackageLoader.java Wed Nov 7 14:41:58 2007
@@ -4,11 +4,12 @@
import java.util.Map;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.config.entities.PackageConfig;
public interface PackageLoader {
- List<PackageConfig> loadPackages(Bundle bundle, ObjectFactory objectFactory, Map<String,PackageConfig> map) throws ConfigurationException;
+ List<PackageConfig> loadPackages(Bundle bundle, BundleContext bundleContext, ObjectFactory objectFactory, Map<String,PackageConfig> map) throws ConfigurationException;
}
Modified: struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/StrutsActivator.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/StrutsActivator.java?rev=592931&r1=592930&r2=592931&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/StrutsActivator.java (original)
+++ struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/StrutsActivator.java Wed Nov 7 14:41:58 2007
@@ -10,7 +10,6 @@
public void start(final BundleContext ctx) throws Exception {
ctx.registerService(PackageLoader.class.getName(), new BundlePackageLoader(), new Properties());
ctx.getBundle().loadClass("org.apache.struts2.osgi.BundleAccessor");
- ctx.getBundle().loadClass("org.twdata.osgitest.foo.FooAction");
}
public void stop(BundleContext ctx) throws Exception {
Modified: struts/sandbox/trunk/struts2-osgi-plugin/src/main/resources/struts-plugin.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/resources/struts-plugin.xml?rev=592931&r1=592930&r2=592931&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-osgi-plugin/src/main/resources/struts-plugin.xml (original)
+++ struts/sandbox/trunk/struts2-osgi-plugin/src/main/resources/struts-plugin.xml Wed Nov 7 14:41:58 2007
@@ -11,5 +11,5 @@
<constant name="struts.objectFactory" value="osgi" />
<constant name="struts.objectFactory.delegate" value="struts" />
-
+ <constant name="struts.freemarker.manager.classname" value="org.apache.struts2.osgi.BundleFreemarkerManager" />
</struts>