Changeset 3977
- Timestamp:
- 07/10/08 08:12:03 (3 years ago)
- Files:
-
- trunk/build.xml (modified) (1 diff)
- trunk/ivy.xml (modified) (2 diffs)
- trunk/src/main/java/org/sarugo/xtc/Resolver.java (modified) (4 diffs)
- trunk/src/main/java/org/sarugo/xtc/osgi/Activator.java (modified) (1 diff)
- trunk/src/main/java/org/sarugo/xtc/osgi/OsgiResolver.java (modified) (1 diff)
- trunk/src/main/resources/META-INF/MANIFEST.MF (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/build.xml
r3966 r3977 42 42 </fileset> 43 43 </jar> 44 <ivy:retrieve pattern="${build.dir}/main/osgi/[artifact]-[revision].[ext]" conf=" osgi" useOrigin="true" />44 <ivy:retrieve pattern="${build.dir}/main/osgi/[artifact]-[revision].[ext]" conf="lib" useOrigin="true" /> 45 45 <jar destfile="${dist.dir}/${project.name}-osgi-${build.rev}.jar" filesetmanifest="merge"> 46 46 <fileset dir="${build.dir}/main/java" /> trunk/ivy.xml
r3966 r3977 5 5 <configurations> 6 6 <conf name="default" description="Runtime configuration"/> 7 <conf name="osgi" description="OSGi Bundle version"/> 7 8 <conf name="restlet" description="XTC-Restlet integration" extends="default"/> 8 9 <conf name="fop" description="Apache FOP integration" extends="restlet"/> 9 <conf name=" osgi" description="OSGi Bundle version"/>10 <conf name="lib" visibility="private" extends="osgi"/> 10 11 <conf name="compile" visibility="private" extends="default,restlet,fop"/> 11 12 <conf name="test" visibility="private" extends="compile"/> … … 18 19 </publications> 19 20 <dependencies> 20 <dependency org="de.odysseus.juel" name="juel" rev="2.1.0" conf="default, osgi->default"/>21 <dependency org="org.restlet" name="org.restlet" rev="1.1-RC1" conf="restlet ,compile->default"/>21 <dependency org="de.odysseus.juel" name="juel" rev="2.1.0" conf="default,lib->default"/> 22 <dependency org="org.restlet" name="org.restlet" rev="1.1-RC1" conf="restlet->default"/> 22 23 <dependency org="com.noelios.restlet" name="com.noelios.restlet.ext.jetty" rev="1.1-RC1" conf="compile->default"/> 23 24 <dependency org="javax.servlet" name="servlet-api" rev="2.5" conf="compile->default" /> trunk/src/main/java/org/sarugo/xtc/Resolver.java
r3966 r3977 15 15 import java.util.jar.JarEntry; 16 16 import java.util.jar.JarFile; 17 import java.util.logging.Logger; 17 18 18 19 /** … … 24 25 */ 25 26 public class Resolver { 27 28 protected static final Logger log = Logger.getLogger("xtc.resolver"); 26 29 27 30 private ClassLoader userClassLoader; … … 95 98 } 96 99 97 protected URL localise(URL url) {98 return url;99 }100 101 100 private void search(Collection<URL> results, ClassLoader cl, String prefix, 102 101 String suffix) throws IOException { … … 106 105 JarFile jarFile; 107 106 while (e.hasMoreElements()) { 108 url = localise((URL) e.nextElement());107 url = e.nextElement(); 109 108 conn = url.openConnection(); 110 109 conn.setUseCaches(false); trunk/src/main/java/org/sarugo/xtc/osgi/Activator.java
r3966 r3977 7 7 public class Activator implements BundleActivator { 8 8 9 private OsgiResolver resolver; 10 9 11 public void start(BundleContext context) throws Exception { 10 TemplateFactory.setResolver(new OsgiResolver()); 12 resolver = new OsgiResolver(); 13 resolver.addBundle(context.getBundle()); 14 TemplateFactory.setResolver(resolver); 11 15 } 12 16 13 17 public void stop(BundleContext context) throws Exception { 18 resolver.removeBundle(context.getBundle()); 14 19 } 15 20 trunk/src/main/java/org/sarugo/xtc/osgi/OsgiResolver.java
r3966 r3977 2 2 3 3 import java.io.IOException; 4 import java.io.InputStream; 4 5 import java.net.URL; 5 import java.net.URLConnection; 6 import java.util.ArrayList; 7 import java.util.Collection; 8 import java.util.Collections; 9 import java.util.Enumeration; 10 import java.util.List; 6 11 7 import org. eclipse.osgi.framework.internal.core.BundleURLConnection;12 import org.osgi.framework.Bundle; 8 13 import org.sarugo.xtc.Resolver; 9 14 10 15 public class OsgiResolver extends Resolver { 11 16 17 private final List<Bundle> bundles; 18 19 public OsgiResolver() { 20 this.bundles = Collections.synchronizedList(new ArrayList<Bundle>()); 21 } 22 12 23 @Override 13 protected URL localise(URL url) { 14 if (url.getProtocol().startsWith("bundle")) { 15 URLConnection conn; 24 public URL getResource(String name) { 25 URL url = getResourceFromActiveBundles(name); 26 if (url == null) { 27 url = super.getResource(name); 28 } 29 return url; 30 } 31 32 @Override 33 public InputStream getResourceAsStream(String name) { 34 URL url = getResourceFromActiveBundles(name); 35 InputStream is = null; 36 if (url != null) { 16 37 try { 17 conn = url.openConnection(); 18 if (conn instanceof BundleURLConnection) { 19 url = ((BundleURLConnection) conn).getLocalURL(); 38 is = url.openStream(); 39 } catch (IOException e) { 40 log.warning("Error opening resource as a stream from URL: " 41 + url); 42 } 43 } else { 44 is = super.getResourceAsStream(name); 45 } 46 return is; 47 } 48 49 @Override 50 public Class<?> loadClass(String name) throws ClassNotFoundException { 51 Class<?> clazz = super.loadClass(name); 52 if (clazz == null) { 53 synchronized (bundles) { 54 for (Bundle b : bundles) { 55 // skip inactive bundles 56 if ((b.getState() & Bundle.ACTIVE) == 0) 57 continue; 58 clazz = b.loadClass(name); 59 if (clazz != null) 60 break; 20 61 } 21 } catch (IOException e) { 22 e.printStackTrace(); 62 } 63 } 64 return clazz; 65 } 66 67 @SuppressWarnings("unchecked") 68 @Override 69 public Collection<URL> search(String prefix, String suffix) 70 throws IOException { 71 Collection<URL> results = super.search(prefix, suffix); 72 synchronized (bundles) { 73 for (Bundle b : bundles) { 74 // skip inactive bundles 75 if ((b.getState() & Bundle.ACTIVE) == 0) 76 continue; 77 for (Enumeration<String> e = b.getEntryPaths(prefix); e 78 .hasMoreElements();) { 79 String path = e.nextElement(); 80 if (path.endsWith(suffix)) { 81 results.add(b.getEntry(path)); 82 } 83 } 84 } 85 } 86 return results; 87 } 88 89 private URL getResourceFromActiveBundles(String name) { 90 URL url = null; 91 synchronized (bundles) { 92 for (Bundle b : bundles) { 93 // skip inactive bundles 94 if ((b.getState() & Bundle.ACTIVE) == 0) 95 continue; 96 url = b.getEntry(name); 97 if (url != null) 98 break; 23 99 } 24 100 } 25 101 return url; 26 102 } 103 104 public void addBundle(Bundle b) { 105 bundles.add(b); 106 } 107 108 public void removeBundle(Bundle b) { 109 bundles.remove(b); 110 } 27 111 28 112 } trunk/src/main/resources/META-INF/MANIFEST.MF
r3966 r3977 20 20 org.sarugo.xtc.restlet, 21 21 org.sarugo.xtc.tag, 22 org.sarugo.xtc.osgi, 22 23 javax.el 23 24 Bundle-Activator: org.sarugo.xtc.osgi.Activator
