I believe that Spring 2.0 provides pretty solid support for using Spring in an OSGi runtime.
More at http://www.springframework.org/osgi/specification On 10/18/06, Cameron Fieber <[EMAIL PROTECTED]> wrote: > What I've done using Spring + OSGi is: > > 1) create a library bundle for Spring that just exports all the spring classes > > 2) created some hooks following the patterns of the Spring Remoting > classes: OSGIExporter and OSGIImporter that publish spring beans as > OSGI services or import OSGI services for use by spring beans > > 3) each bundle that wants to export beans creates an application > context in its activator (Abstract class that does that) and uses the > OSGI Exporter to publish those beans > > The activator is set via a manifest entry as to which services are > required before it can launch the application context, so it waits to > launch the application context until all required services are > available, and restarts the application context if those services > change. > > Basically it uses the OSGI service mechanism to integrate spring beans > in different bundles. As far as classloading stuff goes, all it > required was that any thing you are exposing for other application > contexts to import has to be properly configured in your manifest as > an exported package and imported by the consuming bundle. > > It's not pretty but it works. Unfortunately I can't publish the code > for it, but it wasn't too hard to build. > > -Cameron > > On 10/18/06, Joe Toth <[EMAIL PROTECTED]> wrote: > > I'm relatively new to OSGi, but I'm learning. I have a question regarding > > classloading. > > > > I'm trying to have a Spring based plug-in/bundle serve up beans to other > > bundles. In one bundle I add all the spring stuff and spring works fine in > > that one bundle (its called org.omegaframework.system). Now I'm trying to > > initialize Spring with an applicationContext.xml from another bundle (called > > org.omegaframework.example). I know the 2 bundles have different > > classloaders so I have to do something in the Spring bundle to let it know > > about the classpath from the other bundle. > > > > I tried 2 methods: > > 1. Using Equinox's BuddyLoader by putting... > > Eclipse-RegisterBuddy: org.omegaframework.system in the example bundle. > > And Eclipse-BuddyPolicy: registered in the system bundle. > > This didn't work, plus I'm looking for a platform independent way to do it > > anyway, if possible. > > > > 2. Passing the classloader...This method is in the system bundle and is > > called from the example bundle. I tried passing > > ExampleActivator.class.getClassloader() and > > this.getClassLoader() > > > > public void init(String applicationContextXMLFile, ClassLoader > > classLoader) { > > > > Thread current = Thread.currentThread(); > > ClassLoader original = current.getContextClassLoader(); > > current.setContextClassLoader(classLoader); > > try { > > context = new ClassPathXmlApplicationContext( > > new String[] { applicationContextXMLFile }, > > this.getClass()); > > } catch (Exception e) { > > e.printStackTrace(); > > } finally { > > current.setContextClassLoader(original); > > } > > > > } > > > > > > I can't get either to work. I've only tested on Equinox 3.3 > > > > Is there a "standard" way to allow a bundle access to another bundles > > classpath? > > > > Thanks > > > > _______________________________________________ > > general mailing list > > [email protected] > > http://lists.ops4j.org/mailman/listinfo/general > > > > > > > > _______________________________________________ > general mailing list > [email protected] > http://lists.ops4j.org/mailman/listinfo/general > _______________________________________________ general mailing list [email protected] http://lists.ops4j.org/mailman/listinfo/general
