2011-12-15 19 views
6

OSGi tabanlı bir masaüstü uygulaması yazmaya çalışıyorum. Swing JFrame'im var ve modüller eklemek için olasılıklar eklemek istiyorum (diğer paketler). EclipseZone OSGi at JSig tutorial ile yürüdüm, ancak her uygulama OSGi Framework'den başlatıldı (bu durumda, Knopflerfish OSGi Desktop).OSGi'yi bir masaüstü bağımsız uygulamasında kullanma

Benim sorum şu ki, görünür OSGi çerçevesi olmadan uygulamayı başlatmak için bir seçenek var mı? Ben knwo, koddan, bir paketin özelliklerini değiştirmek mümkündür, ancak bir çerçevenin özelliklerini nasıl değiştirebilirim? (Örneğin varsayılan paket depolama konumu, paket konumu vs.? Içindedir varsayılan eylem olduğunda)

public class MainFrame extends ServiceTracker implements BundleActivator { 

    public MainFrame(BundleContext context, JToolBar toolBar) { 
     // select, which services is the bundle tracking 
     super(context, JMenu.class.getName(), null); 
    } 

    @Override 
    public void start(BundleContext context) throws Exception { 
     //display a JFrame 
    } 

    @Override 
    public void stop(BundleContext context) throws Exception { 
     //hide a JFrame 
    } 

    @Override 
    public Object addingService(ServiceReference reference) { 
     // Process a Service and return a JMenu 
     return new JMenu(); 
    } 

    @Override 
    public void removedService(ServiceReference reference, Object service) { 
     // remove a JMenu from a JFrame 
    } 

    public static void main(String[] args) { 
     // ???????????????????????????????????????????? 
     // ???????????????????????????????????????????? 
    } 
} 

I (Ben sadece bir kroki gönderdiniz) üstünde bir sınıf yazdım, ama hiç bir fikrim, ne var main() işlevinde yaz. Bu paket Knopflerfish OSGi Masaüstünde gayet iyi çalışıyor, ancak onsuz çalışmasını istiyorum.

cevap

12

Kodunuz temelde tamam, ama sen OSGi çerçevesinde kendisi üzerinde daha fazla kontrol isteyen gibi geliyor. Başka bir deyişle, bir OSGi çerçevesinin nasıl başlatılacağını ve paketinizi nasıl başlattığınızı bilmek istiyorsunuz. Şu anda sahip olduğunuz problem, KF GUI Konsolunu içeren başka birinin başlatıcısını (Knopflerfish one) kullanmanız ve paketinizi kurmak ve başlatmak için bunu kullanmaktır. Ancak bunların hiçbiri gerekli değildir.

AValchev'in cevabında Equinox'u java -jar org.eclipse.osgi.jar -console ile başlatmayı anlatıyor. Bu yaklaşımla ilgili sorun, size bir boş OSGi framework'ü vermesidir, bu yüzden, paketinizi kurmak ve başlatmak için OSGi kabuğuna komutlar yazmanız gerekir ... ayrıca ideal değil!

Sanırım kendi başlatıcınızı yazmalısınız. Bu aslında çok basit ve herhangi bir OSGi çerçeve uygulamasından tamamen bağımsız bir şekilde yapılabilir. Bunu bir süre önce blog post'da yazdım.

sözde kod içinde, başlatıcısı uygulama bu gibi görünmelidir:

public static void main() { 

    1. get a FrameworkFactory using java.util.ServiceLoader. 
    2. create an OSGi framework using the FrameworkFactory 
    3. start the OSGi framework 
    4. Install your bundle(s). 
    5. Start all the bundles you installed. 
    6. Wait for the OSGi framework to shutdown. 

} 

Sorunuzun özel olarak paket depolama konumunu ayarlama hakkında sormak içinde. Bu, FrameworkFactory.newFramework yöntemine geçirdiğiniz Map'deki Constants.FRAMEWORK_STORAGE özelliğini ayarlayarak yapılabilir.

+0

Teşekkürler! Blog yazısı aslında onu çözdü. – Benjamin

+0

blog gönderi linki bozuk. –

1

Swing bileşenlerini kullanmak istiyorsanız, Knopflerfish OSGi Desktop'a ihtiyacınız yoktur. EclipseRT Starter Kit'i indirin ve eklentilerinizi buraya koyun. Eğer ekinoks başladım Bu komutla

java -jar org.eclipse.osgi.jar -console 

ve konsoldan paketi yükleyebilirsiniz:

OSGi kullanmanın başka çok basit bir yoludur.

sadece bir başlangıç ​​içinde JFrame initalzation koymak Senin durumunda çok iyi bir öğretici here

bulabilirsiniz() yöntemi:

@Override 
public void start(BundleContext context) throws Exception { 
    JFrame jf = new JFrame(); 
    ..... 
} 
-2

Ben tam olarak ne yapmak istediğinizi emin değilim, ama eğer Swing uygulamaları yazmak için modüler bir yol arıyoruz ve NetBeans Platformuna bir göz atın. Çekirdek modül sistemi OSGi değil, gerektiğinde OSGi modüllerine "konuşabilir".

1

Eclipse RCP, uygulama istemcileri yazmak için iyi bir seçenektir. Tamamen OSGi'ye dayanır ve UI programlama için zengin bir araç seti sağlar. Eclipse ayrıca bunları oluşturmak için geliştirme ortamı sağlar.

Oluşturulduktan sonra, OSGi'ye dayanan bağımsız bir uygulamaya sahip olacaksınız, ancak OSGi'nin çalışması için hiçbir etkileşim gerektirmeyecek, yani başarmaya çalıştığınıza inanıyorum.

Eclipse RCP Tutorial

İlgili konular