Я пытаюсь изучить 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!» когда я запускаю пакет из моего приложения.
Да, Нил ... Я не ухаживают за тот момент, когда он останавливается, но я добавлю его позже (я добавил его сейчас, но я до сих пор не вижу «Hello»). Что вы подразумеваете под объявлением активатора? Кажется, я ничего подобного не делаю. Где и как мне это сделать? Благодарю. –
Подробнее о Bundle-Activator: http: //wiki.osgi.org/wiki/Bundle-Activator –
Если вы имели в виду внедрение методов запуска и остановки BundleActivator, то я уже упоминал, что сделал это в своем вопросе. Я не вижу ничего нового в указанной вами ссылке. Это в основном то, с чего я начал. –