Hi all, I've been playing around with Service Binder (http://gravity.sourceforge.net/servicebinder/) for the past week or so (thanks Richard and Humberto!). My team is strongly considering OSGi as the base of a re-implementation of one of our enterprise systems here, currently based on Spring (http://www.springframework.org). Since we all know and love Spring, I wanted to see if I could work it into OSGi somehow.
I've modified the latest ServiceBinder implementation to load its service instances from a Spring BeanFactory, instead of trying to dynamically instantiate the classes itself. I also got rid of the standalone ServiceBinder XML file and integrated ServiceBinder definitions directly into the Spring XML files. Now services might be defined like this: ========================================================== <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "binder-beans.dtd"> <beans> <bean id="hibernateServiceImpl" singleton="false" class="test.orm.hibernate.impl.HibernateServiceImpl"> <instance> <provides interface="test.orm.hibernate.HibernateService"/> <osgiproperty name="version" value="1" type="string"/> <desires service="test.service.ServiceProvider" filter="(version=*)" cardinality="0..1" policy="dynamic" bind-method="setService" unbind-method="unsetService" /> </instance> <property name="dataSource"><ref bean="hibernateDataSource"/></property> <property name="properties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.jdbc.batch_size">0</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <bean id="hibernateDataSource" class="org.apache.commons.dbcp.BasicDataSource"> ... </bean> </beans> ========================================================== Bean XML definitions are specified with the "Bean-Definitions" manifest entry; e.g., Bean-Definitions: beans/hibernate.xml, beans/someservice.xml The old ServiceBinder XML file has been replaced with the <instance/> element in the new <bean/> definition (some element names have been changed). Any bean that contains an <instance/> element will be handed to ServiceBinder. Some issues currently: * I would like to support wildcard lookup of bean files, but there doesn't appear to be any way to get a list of resources from a bundle. As of now, each xml file has to be explicitly specified. * Each service bundle requires its own BeanFactory instance (not sure about the overhead with this). * Logging all goes to stdout. I've made it available for download at: http://www.rit.edu/~jrv4595/springservicebinder.zip Since the Spring jar is included (twice- once in the source tree and once in the compiled bundle), the archive is about 5mb. Any questions/comments/suggestions are greatly appreciated. :) -Jeremy