2010-09-24 25 views
5

Bean'i başlatmak için bundle-context.xml dosyasını kullanan bir OSGi paketine sahibim.erişim OSGi paketindeki yayılma içeriği

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

Fasulye örneğini alması gereken bir fabrika sınıfım var. olmayan OSGI dünyasında, sadece OSGi (FuseESB 4.2, Servicemix4) 'de, bağlamı başlatmak ve bir fasulye için ele almak ...

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

Ama aşağıdaki, konteyner otomatik olarak yükler hep sevmişimdir bundle-context.xml dosyası ve yay içeriğini başlatır. Bağlamı açıkça yüklediğimde (yukarıdaki kodu kullanarak), o zaman 2 bağlam yaratılır (kötü olan). Yani, aynı bağlam/fasulye bir tanıtıcı elde etmek için uygun yolu nedir?

cevap

4

Sanırım içeriğinizi yükleyen Spring Dynamic Modülleri - bu yüzden bunu kendi başına yapmamalısınız. Spring DM documentation'a bir göz atın - bu yararlı olacaktır.

Spring DM, uygulama içeriğini bir OSGi hizmeti olarak yayınlayacaktır. here no'lu açıklamaya bakınız ve önerileri takip ediniz. Ayrıca aşağıdaki yorumuma da bakın.

+0

thx, Bu belgeyi okudum ... Hala bunu yapmanın kolay bir yolunu görmüyorum. Belki de bazı OSGI kayıt çemberlerinden atlayarak içeriğe bir yönlendirme yapabilmeliyiz, fakat bu OSGi'de Spring ile yapılacak standart bir şey olmalı. Bir şey mi eksik? Sadece ilkbaharda tanımlanmış bir fasulye örneği istiyorum? –

+0

Sadece uygulayabileceğiniz bir Yay Çekirdek ApplicationContextAware Arayüzü olduğunu öğrendim. İçerik, uygulama sınıfınıza enjekte edilecektir. Bu çalışmalı ve daha basit bir çözüm olmalı. Web’deki örnekleri bulabilirsiniz, ör. http://howto-notes.blogspot.com/2009/03/spring-applicationcontextaware.html – FrVaBe