2009-05-24 23 views
7

Herkes bana osgi framework sınıflarını nasıl kullanabileceğine dair bir örnek verebilir mi? Ben nasıl bu sınıfları kullanmak için bir ipucu ...Her zamanki java kodunda bir OSGi çerçevesi nasıl çalıştırılır?

BR,

Markus

+0

yinelenen: http://stackoverflow.com/questions/4673406/programatically-start-osgi-equinox i kabul ettiği cevabı sorgulamaya bağlantılı olduğunu, söyleyebilirim da daha fazladır Bu soruya cevap olarak uydurma, bu sayfada listelenenler. – hoijui

cevap

7

Kullandığınız OSGi uygulamasına bağlıdır. Eclipse Equinox kullanıyorum ve çerçeveyi normal bir java sınıfından başlatıyorum. Eclipse jar (org.eclipse.osgi_longversion.jar olarak adlandırılır) org.eclipse.core.runtime.adaptor.EclipseStarter adlı bir sınıfa sahiptir. Bu OSGi çerçevenizi önyükleyecektir. Çerçeveyi yapılandırmak için bazı özelliklere ihtiyacınız vardır. Belgelenen tüm özellikleri here görebilirsiniz. Başlatma işlemini çağırdığınızda, aldığınız BundleContext, Sistem Paketi içeriğidir, bu nedenle buradan paketleri yükleyebilir/başlatabilir/durdurabilirsiniz.

Tüm özellikleri ayarlarsanız, herhangi bir argümanı startup() 'a aktarmanız gerekmeyecektir.

Tüm Equinox ve diğer paketleri Equinox website'dan indirebilirsiniz. OSGi 4.1'de bu standartlaştırılmıştır.

+1

Teşekkürler! Şimdi java kodumdan bazı demetleriyle ekinoks çerçevesini çalıştırabildim :) Ama yine de biraz kafam karışık: Eğer Equinox konsolunu çalıştırmak ve daha sonra sistem demetini durdurmak için parametre -console kullanırsam, thread konsola bir komut gönderene kadar durmaz. Mayber orada yeni bir komut beklemek için sistem paketinin içinde bir tür döngü var mı? – Markus

+0

Paketleri durdurma, hatta Sistem paketi, uygulamayı kapatmaya bildirmez. Konsol, "kapat" ı yayınladığınızda, gerçekten ne yapmak, tüm paketleri, hizmetlerin kaydını tutmayanları ve işleyicileri, vb. Durdurmak ve System.exit (0) 'ı çağırmaktır. – omerkudat

+0

EclipseStarter sınıfını komut satırından kullanabilmek için ayarlanması gereken herhangi bir özel özellik var mı? Şu anda programımı doğrudan IDE'den çalıştırıyorsam bu sınıfı kullanmam mümkün. Bir jar dosyasına dışa aktarırsam, başlangıç ​​sınıfı osgi hizmetleri paketi yerine sistem paketini yükler ... bu nedenle bir paket yüklemek mümkün değildir ... – Markus

2

şartname bakın yapmadıysanız . Bu nedenle, her zamanki Java kodunuzdan OSGi çerçevesini çalıştırmak, verilen çerçeve uygulaması için her zaman özeldir (Equinox, Felix, Knopplerfish, ...).

Apache Felix (açık kaynaklı OSGi çerçevesi) uygulamanıza gömmek oldukça kolaydır. Daha fazla bilgi için bkz: http://felix.apache.org/site/launching-and-embedding-apache-felix.html.

+0

Equinox'un yanında başka bir OSGi çerçevesi kullanmak isteyip istemediğimden emin değilim. Org.eclipse.osgi.framework.internal.core.OSGi sınıfının nasıl kullanılacağını açıklayan bir örnek arıyorum. Şu anda sadece bir Alman forumunda eksik bir örnek buldum: http://www.java-forum.org/plattformprogrammierung/81133-custom-open-services-gateway-initiative-launcher-mit-config-ini.html – Markus

+1

Belirtilen paketin sınıflarını kullanmamalı. Bu paket "iç" dir ve paketten dışa aktarılmaz. Equinox'ta OSGi öğelerine erişim normalde org.osgi.framework'daki intefaces üzerinden gerçekleştirilir. – jens

0

Kısa bir süre önce, Equinox OSGi çalışma zamanını Java'ya yerleştirme hakkında basit bir kavram kanıtı oluşturdum. Ayrıntılar Github içinde projemi takip edin İçin https://github.com/sarxos/equinox-launcher

İlgili konular