Author: musachy
Date: Fri Nov 9 09:53:40 2007
New Revision: 593608
URL: http://svn.apache.org/viewvc?rev=593608&view=rev
Log:
Organize the code a little bit
Added:
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/FreeMarkerBundleResourceLoader.java
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/VelocityBundleResourceLoader.java
Removed:
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/BundleTemplateLoader.java
Modified:
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/BundleFreemarkerManager.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/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
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=593608&r1=593607&r2=593608&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
Fri Nov 9 09:53:40 2007
@@ -9,11 +9,15 @@
import org.osgi.framework.BundleContext;
public interface BundleAccessor {
-
- void setBundles(Map<String,Bundle> bundles);
+
+ 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/BundleFreemarkerManager.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java?rev=593608&r1=593607&r2=593608&view=diff
==============================================================================
---
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java
(original)
+++
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java
Fri Nov 9 09:53:40 2007
@@ -5,6 +5,7 @@
import javax.servlet.ServletContext;
+import org.apache.struts2.osgi.loaders.FreeMarkerBundleResourceLoader;
import org.apache.struts2.views.freemarker.FreemarkerManager;
import org.apache.struts2.views.freemarker.StrutsClassTemplateLoader;
@@ -16,7 +17,11 @@
import freemarker.cache.TemplateLoader;
import freemarker.cache.WebappTemplateLoader;
-public class BundleFreemarkerManager extends FreemarkerManager{
+/**
+ * This class extends FreemarkerManager in core to add a template loader
+ * (that finds resources inside bundles) to MultiTemplateLoader
+ */
+public class BundleFreemarkerManager extends FreemarkerManager {
private static final Logger LOG =
LoggerFactory.getLogger(BundleFreemarkerManager.class);
@Override
@@ -33,7 +38,7 @@
try {
templatePathLoader = new FileTemplateLoader(new
File(templatePath));
} catch (IOException e) {
- LOG.error("Invalid template path specified: " +
e.getMessage(), e);
+ LOG.error("Invalid template path specified: #1",e,
e.getMessage());
}
}
@@ -44,12 +49,12 @@
templatePathLoader,
new WebappTemplateLoader(servletContext),
new StrutsClassTemplateLoader(),
- new BundleTemplateLoader()
+ new FreeMarkerBundleResourceLoader()
})
: new MultiTemplateLoader(new TemplateLoader[]{
new WebappTemplateLoader(servletContext),
new StrutsClassTemplateLoader(),
- new BundleTemplateLoader()
+ new FreeMarkerBundleResourceLoader()
});
}
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=593608&r1=593607&r2=593608&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
Fri Nov 9 09:53:40 2007
@@ -18,9 +18,12 @@
import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
import com.opensymphony.xwork2.util.location.Location;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
public class BundlePackageLoader implements PackageLoader {
-
+ private static final Logger LOG =
LoggerFactory.getLogger(BundlePackageLoader.class);
+
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");
@@ -51,18 +54,26 @@
return iter;
}
+ /*
+ * Try to find the class (className) on this bundle. If the class it
not found,
+ * try to find an Spring bean with that name.
+ */
@Override
protected boolean verifyAction(String className, String name, Location
loc) {
try {
return bundle.loadClass(className) != null;
} catch (Exception e) {
- //try spring
+ if (LOG.isDebugEnabled())
+ LOG.debug("Unable to find class #1 in bundle #2",
className, bundle.getSymbolicName());
+
+ //try to find a bean with that id
try {
return SpringOSGiUtil.isValidBean(bundleContext,
className);
} catch (Exception e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
+ if (LOG.isDebugEnabled())
+ LOG.debug("Unable to find bean #1", className);
}
+
return false;
}
}
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=593608&r1=593607&r2=593608&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
Fri Nov 9 09:53:40 2007
@@ -44,39 +44,39 @@
this.bundleContext = bundleContext;
}
- public Class<?> loadClass(String name) throws ClassNotFoundException {
+ public Class<?> loadClass(String className) throws ClassNotFoundException {
Class cls = null;
- if (classToBundle.containsKey(name)) {
- bundles.get(classToBundle.get(name)).loadClass(name);
+ if (classToBundle.containsKey(className)) {
+ bundles.get(classToBundle.get(className)).loadClass(className);
} else {
for (Entry<String,Bundle> entry : bundles.entrySet()) {
try {
- cls = entry.getValue().loadClass(name);
+ cls = entry.getValue().loadClass(className);
if (cls != null) {
- classToBundle.put(name, entry.getKey());
+ classToBundle.put(className, entry.getKey());
}
} catch (ClassNotFoundException ex) {
if (LOG.isDebugEnabled()) {
- LOG.debug("class not found in bundle
"+entry.getValue().getSymbolicName());
+ LOG.debug("class #1 not found in bundle #2",
className, entry.getValue().getSymbolicName());
}
}
}
}
if (cls == null) {
- //try spring
+ //try to find a bean with that id
try {
- Object bean = SpringOSGiUtil.getBean(bundleContext, name);
+ Object bean = SpringOSGiUtil.getBean(bundleContext, className);
if (bean != null)
cls = bean.getClass();
} catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ if (LOG.isDebugEnabled())
+ LOG.debug("Unable to find bean #1", className);
}
}
if (cls == null) {
- throw new ClassNotFoundException("Unable to find class "+name+" in
bundles");
+ throw new ClassNotFoundException("Unable to find class
"+className+" in bundles");
}
return cls;
}
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=593608&r1=593607&r2=593608&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
Fri Nov 9 09:53:40 2007
@@ -39,7 +39,7 @@
{
return delegateObjectFactory.getClassInstance(className);
}
- catch (ClassNotFoundException cnfe)
+ catch (Exception e)
{
return bundleResourceLoader.loadClass(className);
}
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=593608&r1=593607&r2=593608&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
Fri Nov 9 09:53:40 2007
@@ -25,6 +25,7 @@
import org.apache.felix.framework.cache.BundleCache;
import org.apache.felix.framework.util.FelixConstants;
import org.apache.felix.framework.util.StringMap;
+import org.apache.struts2.osgi.loaders.VelocityBundleResourceLoader;
import org.apache.struts2.views.velocity.VelocityManager;
import org.apache.velocity.app.Velocity;
import org.osgi.framework.Bundle;
@@ -51,7 +52,7 @@
public class OsgiConfigurationProvider implements ConfigurationProvider {
- private static final Logger log =
LoggerFactory.getLogger(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>());
@@ -82,7 +83,7 @@
public void setVelocityManager(VelocityManager vm) {
Properties props = new Properties();
props.setProperty("osgi.resource.loader.description","OSGI bundle
loader");
- props.setProperty("osgi.resource.loader.class",
BundleResourceLoader.class.getName());
+ props.setProperty("osgi.resource.loader.class",
VelocityBundleResourceLoader.class.getName());
props.setProperty(Velocity.RESOURCE_LOADER,
"strutsfile,strutsclass,osgi");
vm.setVelocityProperties(props);
}
@@ -91,8 +92,7 @@
try {
felix.stop();
} catch (BundleException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ LOG.error("Failed to stop Felix", e);
}
bundles = null;
}
@@ -114,7 +114,7 @@
for (ServiceReference ref : refs) {
if (!bundleNames.contains(ref.getBundle().getSymbolicName())) {
bundleNames.add(ref.getBundle().getSymbolicName());
- log.info("Loading packages from bundle
"+ref.getBundle().getSymbolicName());
+ LOG.info("Loading packages from bundle #1",
ref.getBundle().getSymbolicName());
PackageLoader loader = (PackageLoader)
bundleContext.getService(ref);
for (PackageConfig pkg :
loader.loadPackages(ref.getBundle(), bundleContext, objectFactory,
configuration.getPackageConfigs())) {
configuration.addPackageConfig(pkg.getName(), pkg);
@@ -136,6 +136,8 @@
protected void loadOsgi() {
//configuration properties
Properties systemProperties = getProperties("default.properties");
+
+ //struts specific properties
Properties strutsProperties = getProperties("struts-osgi.properties");
Map configMap = new StringMap(false);
@@ -149,7 +151,7 @@
strutsProperties.getProperty("xwork"));
Set<String> bundlePaths = new
HashSet<String>(findInPackage("bundles"));
- log.info("Loading Struts bundles "+bundlePaths);
+ LOG.info("Loading Struts bundles "+bundlePaths);
StringBuilder sb = new StringBuilder();
for (String path : bundlePaths) {
@@ -158,7 +160,7 @@
configMap.put(FelixConstants.AUTO_START_PROP + ".1",
sb.toString());
- configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP,
System.getProperty("tmp.dir"));
+ configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP,
System.getProperty("java.io.tmpdir"));
configMap.put(BundleCache.CACHE_DIR_PROP, "jim");
configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, "true");
configMap.put(FelixConstants.SERVICE_URLHANDLERS_PROP, "false");
@@ -183,12 +185,9 @@
try {
Thread.sleep(500);
} catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ LOG.error("An error occured while waiting for bundle
activation", e);
}
}
-
-
}
private String getSystemPackages(Properties properties) {
@@ -224,29 +223,16 @@
bundleContext = context;
}
- public void stop(BundleContext arg0) throws Exception {
- // TODO Auto-generated method stub
-
+ public void stop(BundleContext ctx) throws Exception {
}
public void bundleChanged(BundleEvent evt) {
- if (evt.getType() == evt.INSTALLED) {
- log.debug("Installed bundle
"+evt.getBundle().getSymbolicName());
+ if (evt.getType() == BundleEvent.INSTALLED) {
+ LOG.debug("Installed bundle
"+evt.getBundle().getSymbolicName());
bundles.put(evt.getBundle().getLocation(), evt.getBundle());
bundlesChanged = true;
}
-
- // Copy out all view files
- /*if (evt.getType() == evt.STARTED) {
- Enumeration e = evt.getBundle().findEntries("/view/", null,
true);
- while (e != null && e.hasMoreElements()) {
- URL url = (URL) e.nextElement();
- System.out.println("found view url: "+url);
- }
- }
- */
}
-
}
/**
@@ -268,7 +254,7 @@
urls =
Thread.currentThread().getContextClassLoader().getResources(packageName);
}
catch (IOException ioe) {
- log.warn("Could not read package: " + packageName, ioe);
+ LOG.warn("Could not read package: " + packageName, ioe);
return paths;
}
@@ -297,7 +283,7 @@
}
}
catch (IOException ioe) {
- log.warn("could not read entries", ioe);
+ LOG.warn("could not read entries", ioe);
}
}
return paths;
@@ -330,10 +316,9 @@
}
else if (file.getName().endsWith(".jar")) {
try {
- paths.add(file.toURL().toString());
+ paths.add(file.toURI().toURL().toString());
} catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ LOG.error("Invalid file path", e);
}
}
}
@@ -357,12 +342,12 @@
while ( (entry = jarStream.getNextJarEntry() ) != null) {
String name = entry.getName();
if (!entry.isDirectory() && name.startsWith(parent) &&
name.endsWith(".jar")) {
- paths.add(jarfile.toURL()+"!"+entry.getName());
+ paths.add(jarfile.toURI().toURL()+"!"+entry.getName());
}
}
}
catch (IOException ioe) {
- log.error("Could not search jar file '" + jarfile + "' due to an
IOException", ioe);
+ LOG.error("Could not search jar file #1 due to an IOException",
ioe, jarfile.toString());
}
}
Added:
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/FreeMarkerBundleResourceLoader.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/FreeMarkerBundleResourceLoader.java?rev=593608&view=auto
==============================================================================
---
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/FreeMarkerBundleResourceLoader.java
(added)
+++
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/FreeMarkerBundleResourceLoader.java
Fri Nov 9 09:53:40 2007
@@ -0,0 +1,19 @@
+package org.apache.struts2.osgi.loaders;
+
+import java.net.URL;
+
+import org.apache.struts2.osgi.DefaultBundleAccessor;
+
+import freemarker.cache.URLTemplateLoader;
+
+/**
+ * Finds FreeMarker templates in bundles
+ */
+public class FreeMarkerBundleResourceLoader extends URLTemplateLoader {
+
+ @Override
+ protected URL getURL(String name) {
+ return DefaultBundleAccessor.getInstance().loadResource(name);
+ }
+
+}
Added:
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/VelocityBundleResourceLoader.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/VelocityBundleResourceLoader.java?rev=593608&view=auto
==============================================================================
---
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/VelocityBundleResourceLoader.java
(added)
+++
struts/sandbox/trunk/struts2-osgi-plugin/src/main/java/org/apache/struts2/osgi/loaders/VelocityBundleResourceLoader.java
Fri Nov 9 09:53:40 2007
@@ -0,0 +1,30 @@
+package org.apache.struts2.osgi.loaders;
+
+import java.io.InputStream;
+
+import org.apache.struts2.osgi.DefaultBundleAccessor;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+
+/**
+ * Finds Velocity templates in bundles
+ */
+public class VelocityBundleResourceLoader extends ClasspathResourceLoader {
+
+ public synchronized InputStream getResourceStream(String name)
+ throws ResourceNotFoundException {
+ if ((name == null) || (name.length() == 0)) {
+ throw new ResourceNotFoundException("No template name provided");
+ }
+
+ if (name.startsWith("/")) {
+ name = name.substring(1);
+ }
+
+ try {
+ return
DefaultBundleAccessor.getInstance().loadResourceAsStream(name);
+ } catch (Exception e) {
+ throw new ResourceNotFoundException(e.getMessage());
+ }
+ }
+}