我想在OSGi容器中安裝OSGi包。我在我的一個文件夾中有一個jar文件..我將這個jar文件讀入ByteArray
,然後我使用這個ByteArray
在OSGi容器中安裝Framework
包。下面是代碼..使用ByteArray安裝OSGi包
FrameworkFactory frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next();
framework = frameworkFactory.newFramework(new HashMap<String, String>());
framework.start();
final String basePath = "C:\\LocalStorage";
final BundleContext bundleContext = framework.getBundleContext();
final List<Bundle> installedBundles = new LinkedList<Bundle>();
String filename = "Framework" + "-" + "1.0.0" + ".jar";
String localFilename = basePath+ File.separatorChar + filename;
File file = new File(localFilename);
byte [] fileData = new byte[(int)file.length()];
DataInputStream dis = new DataInputStream((new FileInputStream(file)));
dis.readFully(fileData);
dis.close();
// But below line gives me exception always-
installedBundles.add(bundleContext.installBundle(filename, new ByteArrayInputStream(fileData)));
for (Bundle bundle : installedBundles) {
bundle.start();
}
下面是個例外,我總是GET-
org.osgi.framework.BundleException: Bundle symbolic name and version are not unique: Framework:1.0.0
誰能告訴我,我做錯了什麼?而我需要的,因爲在我的一些在另一個類的代碼,我使用的ByteArray使用的ByteArray,所以我需要通過罐的ByteArray的文件,以這些方法..
更新: -
但如果我像這樣安裝它,那麼它工作正常。它不工作,如果我通過的ByteArray安裝它..
final String basePath = "C:\\LocalStorage";
final BundleContext bundleContext = framework.getBundleContext();
final List<Bundle> installedBundles = new LinkedList<Bundle>();
String filename = "Framework" + "-" + "1.0.0" + ".jar";
String localFilename = Constants.FILE_PROTOCOL + basePath+ File.separatorChar + filename;
installedBundles.add(bundleContext.installBundle(localFilename));
for (Bundle bundle : installedBundles) {
bundle.start();
}
也許是可能的,我做錯了什麼與ByteArray的事情嗎?任何想法?
我已經有這些條目在我的'MANIFEST.MF file' - '捆綁-ManifestVersion:2 捆綁-名稱:框架 捆綁-SymbolicName:框架 捆綁-版本:1.0.0' – AKIWEB