プログラムでOSGiフレームワークを作成し、それを使用してバンドルをロードし、そのバンドルからクラスをロードしたいと思います。電話Bundle.loadClass()
をかけるClass
と、すべてのfields \ methods\constructorフィールドがnullに設定されたインスタンスが表示されます。名前しかありません。パブリックメソッドなどにアクセスできません。EquinoxとFelixの両方を試しましたが、同じ結果になりました。
バンドルMANIFEST
:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Activator: org.osgitest.osgitest.Activator
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Name: OSGi Test
Bundle-SymbolicName: org.osgitest.osgitest
Bundle-Version: 1.0
Import-Package: org.osgi.framework
Export-Package: org.osgitest.osgitest.test
フレームワークのセットアップ:
FrameworkFactory ff = new EquinoxFactory();
Map<String, String> config = new HashMap<String, String>(1);
config.put("org.osgi.framework.storage.clean", "onFirstInit");
Framework framework = ff.newFramework(config);
framework.init();
framework.start();
と
FrameworkFactory ff = new org.apache.felix.framework.FrameworkFactory();
Map<String, String> config = new HashMap<String, String>(1);
config.put("org.osgi.framework.storage.clean", "onFirstInit");
Framework framework = ff.newFramework(config);
framework.init();
framework.start();
バンドルの読み込み:
Bundle testBundle = framework.getBundleContext().installBundle("file:C:\\org-osgitest-osgitest.jar");
testBundle.start();
Class<?> classOne = testBundle.loadClass("org.osgitest.osgitest.test.ClassOne");
Class<?> activator = testBundle.loadClass("org.osgitest.osgitest.Activator");
ActivatorClass
インスタンスにはコンストラクター参照が含まれていますが、パブリックメソッドは含まれていません。ありpublic void start(BundleContext c)
ますpublic void stop(BundleContext c)
。
どうすれば正しいものをロードできますClass
か?私は何が間違っているのですか?助けてくれてありがとう。