2010-09-24 13 views
5

Tengo un paquete OSGi que usa el archivo bundle-context.xml para inicializar un bean.acceso Contexto de primavera en el paquete OSGi

<bean id="myBean" class="test.MyClass"> 
    <property name="output" value="test"/> 
</bean> 

Tengo una clase de fábrica que necesita para obtener la instancia de frijol. En el mundo no OSGi, siempre he sólo el siguiente para inicializar el contexto y obtener un identificador para un grano ...

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bundle-context.xml"); 
MyClass bean = (MyClass) applicationContext.getBean("myBean"); 

Pero, en OSGi (FuseESB 4.2, Servicemix4), el contenedor se carga automáticamente el archivo bundle-context.xml e inicializa el contexto de primavera. Si cargo el contexto explícitamente (usando el código anterior), se crean 2 contextos (lo cual es malo). Entonces, ¿cuál es la forma correcta de manejar el mismo contexto/bean?

Respuesta

4

Supongo que es Spring Dynamic Modules lo que carga su contexto, por lo que no debe hacer esto por su cuenta. Echa un vistazo a la primavera DM documentation - esto será útil.

Spring DM publicará el contexto de la aplicación como un servicio OSGi. Eche un vistazo a la explicación here y siga las recomendaciones.

Ver también mi comentario a continuación.

+0

thx, He leído esta documentación ... Todavía no veo una manera fácil de hacer esto. Tal vez saltando a través de algunos aros de registro OSGI para tener una idea del contexto, pero esto debería ser algo estándar que hacer con Spring en OSGi. ¿Me estoy perdiendo de algo? Solo quiero una instancia de bean definida en Spring? –

+0

Acabo de descubrir que hay una interfaz Spring-Core ApplicationContextAware que puede implementar. El contexto será inyectado a su clase de implementación. Eso debería funcionar y ser una solución más simple. Puedes encontrar ejemplos en la web, p. http://howto-notes.blogspot.com/2009/03/spring-applicationcontextaware.html – FrVaBe

Cuestiones relacionadas