2013-07-21 2 views
0

Я пытаюсь изучить OSGI. (В основном, динамическая загрузка и разгрузка пучков).OSGI Bundle Установлен и запущен, но нет видимого выхода

Следующее руководство Neil Bartlett для How To Embed OSGi, я добавил реализацию Framework Equinox OSGi в путь класса и начал игру.

Вот код:

import java.util.HashMap; 
import java.util.LinkedList; 
import java.util.List; 
import java.util.Map; 
import java.util.ServiceLoader; 

import org.osgi.framework.Bundle; 
import org.osgi.framework.BundleContext; 
import org.osgi.framework.BundleException; 
import org.osgi.framework.Constants; 
import org.osgi.framework.launch.Framework; 
import org.osgi.framework.launch.FrameworkFactory; 


public class BundleManager { 

    /** 
    * @param args 
    * @throws Exception 
    */ 
    public static void main(String[] args) throws Exception { 
     // TODO Auto-generated method stub 

     FrameworkFactory frameworkFactory = ServiceLoader.load(
       FrameworkFactory.class).iterator().next(); 
     Map<String, String> config = new HashMap<String, String>(); 
     //TODO: add some config properties 
     Framework framework = frameworkFactory.newFramework(config); 
     framework.start(); 



     BundleContext context = framework.getBundleContext(); 
     List<Bundle> installedBundles = new LinkedList<Bundle>(); 

     installedBundles.add(context.installBundle(
           "file:C:/Users/student/Documents/eclipse/myPlugins/HellowService.jar")); 


     for (Bundle bundle : installedBundles) { 

     if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) == null) 
       bundle.start(); 

     } 


     System.out.println("done!!"); 



    } 

} 

Да, это работает. Никаких ошибок. Однако набор, который я установил, который является файлом jar в пути: C:/Users/student/Documents/eclipse/myPlugins/HellowService.jar содержит «HelloWorld» в его методе запуска. Я не вижу этого «HelloWold» в моей консоли eclipse. Почему я не вижу этого сообщения, хотя пакет был запущен? Я ценю любую простую помощь.

Примечание: HellowService.jar плагин проект, который я создал ранее, реализованный BundleActivator в одном из своих классов, чтобы добавить сообщение «HelloWorld» в методе запуска, и, наконец, экспортировал ее в банку файл в каталог C:/Users/student/Documents/eclipse/myPlugins/

Edit: Вот мой Activator класс в комплекте я установка и запуск:

package com.javaworld.sample.service.impl; 

import org.osgi.framework.BundleActivator; 
import org.osgi.framework.BundleContext; 
import org.osgi.framework.ServiceRegistration; 

import com.javaworld.sample.service.HelloService; 

public class HelloServiceActivator implements BundleActivator { 

    ServiceRegistration helloServiceRegistration; 


     public void start(BundleContext context) throws Exception { 

      HelloServiceFactory helloServiceFactory = new HelloServiceFactory(); 
      helloServiceRegistration =context.registerService(HelloService.class.getName(), helloServiceFactory, null); 

      System.out.println("Hello World!"); 
     } 
     public void stop(BundleContext context) throws Exception { 
      helloServiceRegistration.unregister(); 
     } 


} 

а вот MANIFEST.MF файл пучка:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: HelloService 
Bundle-SymbolicName: com.javaworld.sample.HelloService 
Bundle-Version: 1.0.0.qualifier 
Bundle-Activator: com.javaworld.sample.service.impl.HelloServiceActivator 
Bundle-Vendor: JAVAWORLD 
Bundle-RequiredExecutionEnvironment: JavaSE-1.7 
Import-Package: org.osgi.framework;version="1.3.0" 
Export-Package: com.javaworld.sample.service 

Способ, которым я экспортирую пакет, - щелкнуть правой кнопкой мыши по проекту пакета -> Export-> Runnable Jar File->, затем я выбираю Launch Configuration для BundleManager (который является классом, устанавливающим комплект).

Я до сих пор не вижу «Hello World!» когда я запускаю пакет из моего приложения.

ответ

0

Оказалось, что я экспортировал пакет неправильно. Это потому, что я пытался сделать это сам. Вот как пучок должен быть экспортированы в файл фляги:

Open the plugin export wizard File > Export... > Plug-in Development > 
    Deployable plug-ins and fragments . 
    Then select the bundle you want to export and the destination directory. Done! 

Теперь вы можете использовать путь к файлу фляги, чтобы установить пакет. В моем случае это:

installedBundles.add(context.installBundle(
           "file:C:/Users/student/Documents/eclipse/myPlugins/plugins/com.javaworld.sample.HelloService_1.0.0.201307220322.jar")); 

Источник: http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.pde.doc.user%2Fguide%2Ftools%2Fexport_wizards%2Fexport_plugins.htm

И наверняка благодаря @Neil Bartlett

1

Ваша пусковая установка не ждет остановки OSGi Framework. Я ожидал бы, что эта программа начнет все, но затем сразу же выключится, потому что мы дойдем до конца метода main. Вернитесь к моему учебнику, где я покажу, как использовать метод Framework.waitForStop.

Сказав это, я ожидаю, что выход из вашего пакета HelloWorld появится на самом деле перед выключением. Таким образом, кажется вероятным, что в этом пакете есть ошибка. Возможно, вы не объявили активатора? Я могу только догадываться, потому что вы не указали никаких подробностей.

+0

Да, Нил ... Я не ухаживают за тот момент, когда он останавливается, но я добавлю его позже (я добавил его сейчас, но я до сих пор не вижу «Hello»). Что вы подразумеваете под объявлением активатора? Кажется, я ничего подобного не делаю. Где и как мне это сделать? Благодарю. –

+0

Подробнее о Bundle-Activator: http: //wiki.osgi.org/wiki/Bundle-Activator –

+0

Если вы имели в виду внедрение методов запуска и остановки BundleActivator, то я уже упоминал, что сделал это в своем вопросе. Я не вижу ничего нового в указанной вами ссылке. Это в основном то, с чего я начал. –

Смежные вопросы