2011-01-12 15 views
21

Bir OSGi çerçevesini (tercihen Equinox) kolayca çalıştırabilmek ve pompamda listelenen herhangi bir paketi bir java ana bilgisayarından yüklemek istiyorum.Programlı OSGi (Equinox) Başlat?

Bu mümkün mü? Öyleyse nasıl?

Pax araçları bunu yapar gibi görünüyor, ancak bunu gösteren herhangi bir belge bulamıyorum.

BundleContext context = EclipseStarter.startup((new String[] { "-console" }), null); 

Ama daha fazla yapmak istiyorum - Dediğim gibi: Ben şöyle Equinox'u başlatmak biliyorum yük daha paketlerini, belki bazı hizmetlerin vb başlatmak

cevap

45

Herhangi bir OSGi yapısı (R4.1 veya üstü), FrameworkFactory API:

API'sini kullanarak program aracılığıyla başlatılabilir.
ServiceLoader<FrameworkFactory> ffs = ServiceLoader.load(FrameworkFactory.class); 
FrameworkFactory ff = ffs.iterator().next(); 
Map<String,Object> config = new HashMap<String,Object>(); 
// add some params to config ... 
Framework fwk = ff.newFramework(config); 
fwk.start(); 

OSGi çerçevesi artık çalışıyor. Framework örneğin

BundleContext bc = fwk.getBundleContext(); 
bc.installBundle("file:/path/to/bundle.jar"); 
bc.registerService(MyService.class.getName(), new MyServiceImpl(), null); 
// ... 

vb, getBundleContext arayıp paketlerini işlemek için normal bir API yöntemlerinin hepsi çağrı hizmetlerini kayıt olabilirsiniz Bundle uzanır yana Nihayet sadece kapatma çerçevesinde beklemeli:

fwk.stop(); 
fwk.waitForStop(0); 

Yinelemek gerekirse, bu yaklaşım,içinOSGi çerçevesi için Equinox ve Felix dahil olmak üzere sadece JAR çerçevesini sınıf yoluna yerleştirerek çalışır.

+0

Bu oldukça yararlı, teşekkürler. Çerçevenin nasıl başlatılacağı ve durdurulacağı ile uğraşıyordum (System.in yönlendirmesi o kadar çekici değil). Kabul etmekteki tek tutkum, demetlerimi bir grup yolu ve kodu değiştirmeden, maven sınıf yolumdan yükleyebilmekti. Sonra tekrar çok fazla diliyorum :) – javamonkey79

+0

Maven sınıfında ne demek istiyorsun? –

+0

Gerçekten de POM'umdaki tüm bağımlılıklar - Algılanıp yüklenmesini sağlamak istiyorum. – javamonkey79

2

Düzenleme: Teşekkür Gerçekleşen java içinden başlamak istedim. Okumaya devam etmediğim için üzerimde

Bu bağlantıya bir göz atın. Maven

O https://groups.google.com/group/spring-osgi/web/maven-url-handler?pli=1 mvn onlardan (aşağıdaki biçimi ve yük demetleri URLLERİ alabilir bir OSGi URl Eylemciler Servisi içerdiğini görünüyor: // Repo Esasen

public static void main(String args[]) throws Exception { 
    String[] equinoxArgs = {"-console","1234","-noExit"}; 
    BundleContext context = EclipseStarter.startup(equinoxArgs,null); 
    Bundle bundle = context.installBundle(
    "http://www.eclipsezone.com/files/jsig/bundles/HelloWorld.jar"); 
    bundle.start(); 
} 

Düzenleme http://www.eclipsezone.com/eclipse/forums/t93976.rhtml

/bundle_path)

+0

Bunun çoğunu aldım ve bir http url'den yükleme yapmayı düşünmüştüm - maven demetlerini nasıl yükleyeceğinizi biliyor musunuz? – javamonkey79

+0

@ javamonkey79 Hiç maven kullanmadım. Ancak, https://groups.google.com/group/spring-osgi/web/maven-url-handler?pli=1 – KitsuneYMG

+0

@ KitsuneYMG'ye söz veriyor: Google bağlantısı bozuk. Başka bir bağlantınız var mı? kullanabilirsiniz? Yardımınız için teşekkürler .. – ferhan

5

Bu iş parçacığı biraz bayat olabilir, ama yine de ...

Pax maven URL'ler için mükemmel desteği vardır, hatta dinamik güzel düzenli demetler olmayan OSGi kavanozu dönüştürmek için izin veren bir şal url işleyicisi vardır.

http://wiki.ops4j.org/display/paxurl/Mvn+Protocol

<dependency> 
     <groupId>org.ops4j.pax.url</groupId> 
     <artifactId>pax-url-wrap</artifactId> 
     <version>1.2.5</version>   
    </dependency> 
    <dependency> 
     <groupId>org.ops4j.pax.url</groupId> 
     <artifactId>pax-url-mvn</artifactId> 
     <version>1.2.5</version>   
    </dependency> 

komut şöyle olur:

install -s mvn:groupId:artifactId:version:classifier 

Not: tavuk-yumurta senaryo - Bir dosyayı kullanarak bu yüklemek zorunda: İlk url işleyicisi veya autodeploy içine koydu dizin.

Karaf'ın hepsi bu siteye yayılmışsa, bu yüzden Karaf launcher kaynağına bir göz atın.

2 not: - bir eklenti var olduğunu şöyle olur dağıtma anlık repo URL'ye @snapshots ekleyerek etkinleştirmek yapılandırma Karaf bir göz bulunmaktadır var tüm POM tanımlı bağımlılıkları yönetme açısından ConfigAdmin

aracılığıyla yönetilmektedir edilir daha sonra tüm uygulamanızı dağıtmak için kullanılabilecek bir özellik XML dosyası oluşturmak için etkinleştirmek: bir vanilya Felix/Equinox/Karaf kurulum alabilir, böylece http://karaf.apache.org/manual/2.1.99-SNAPSHOT/developers-guide/features-maven-plugin.html

Dahası bu XML eser sizin OBR'NİN dağıtılabilir ekleyebilir mvn url işleyicisi ve şirketinizin mvn repo'su ile yapılandırın ve daha sonra tüm uygulamayı hazırlayın =)