问题标签 [osgi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Netbeans中的OSGi,检索服务时出现ClassCastException
我有一个 ClassLoader 问题。由于我是一个 osgi 新手,希望答案不是那么难:)
我认为这与编译与运行时库有关。 在 Netbeans 6.7.1 项目属性中,编译时库总是传播到其他类别。所以我无法区分那里。
编译 FelixHost 时使用下一个 jar
- 费利克斯罐子
- osgi-core.jar
- osgi-compendium.jar
- osgi.service.obr-1.0.2.jar
但是在运行时,框架会为 OBR 加载一个实现。此 OBR 捆绑包还包含接口定义。我认为这就是为什么有一个 classCastException ..
我实际上希望 FelixHost 与 OBR 一起进行一些初始配置。
欢迎任何想法。
java - 配置Equinox修改“本地包缓存”的管理
关于上一个问题,如何让 OSGi 通过 Config Admin 重用您的配置,我仍在尝试在 Equinox Framework 中解决这个问题。
帕沃尔·尤霍斯写道:
Equinox Config Admin (org.eclipse.equinox.cm) 将配置数据存储在框架提供的持久存储区域中。这恰好是 Equinox 默认的“本地包缓存”目录。
所以我阅读了这个主题,发现 Equinox 有几个运行时选项(除其他外,osgi.configuration.area)。
我想要更改配置,以便不会删除或清除本地包缓存,因此下次我将运行框架时,将使用最后输入的配置(对于任何包)。
maven-2 - 如何将多个 OSGi 捆绑包与 BND / Maven-BND-plugin 合并?
我在我的应用程序中使用了一些现成的 OSGi 包,并希望将它们与尚不兼容 OSGi 的其他包重新打包到一个新包中。
典型的例子是 EclipseLink,它可以作为几个 OSGi 包提供,其中大部分是可选的,具体取决于您想要做什么。我想选择那些与我相关的包,添加数据库驱动程序(例如 MySQl JDBC 连接器)并将它们重新打包成一个更易于部署的新包。
我正在使用 Apache Felix 的 maven-bundle-plugin。我建立了一个没有源代码的新Maven项目,添加了四个eclipselink和mysql连接器作为依赖项并尝试了以下内容:
- 使用
<Embed-Dependency>
and<Embed-Transitive>
指令将所有依赖项包含在一个包中。问题:当插件重写清单时,需要来自 eclipselink 包的可选依赖项(例如 javax.mail.internet)。原始捆绑包在清单中包含“分辨率=可选”,因此没有它也可以正常工作。 - 使用
manifest
插件和jar-with-dependencies
程序集的目标,但这给了我基本相同的结果,只是需要更多的工作。 - 使用了
bundleall
插件的目标,这不是我想要的,因为它再次创建了单独的包。更糟糕的是,因为现在这些包里面没有它们的依赖项。
我将面临 Struts 2 的类似问题。我不会对此感到痴迷,只是使用一大堆单独的第三方捆绑包,但如果我可以更整齐地打包它们,我真的很喜欢至。我知道 OSGi 的一个要点是模块化,因此创建大包会破坏这一点,但我觉得如果您的模块无论如何都是紧密耦合的,那么您不妨将它们放入单个包中。
当然,我可以手动调整清单,但我绝对不想这样做。
jpa - 在 OSGi 环境中,类路径和类加载器是如何设置的?
我对 OSGi 中的类可见性感到困惑。我正在运行 Apache Felix 并加载以下包:
- 来自 eclipselink的
antlr
,asm
,jpa
和bundlescore
javax.persistence
1.99的 OSGi-fied jar- 带有
com.mysql.jdbc
驱动程序的 OSGi-fied jar - 我自己的一个包,其中包含带注释的实体类和一个
persistence.xml
- 我自己的另一个捆绑包
Persistence.createEntityManagerFactory(String, Map)
现在,我很困惑的是哪个包必须能够看到 MySQL 驱动程序。我认为这将是创建 EntityManagerFactory 的包,但是当我在该清单中导入时出现 ClassNotFound 错误。接下来,我尝试从 eclipselinkjpa
包的清单中导入它,但又出错了。只有当我从包含持久性单元(实体类和)的包的清单中导入它时persistence.xml
,它才能工作。
所以,似乎数据库驱动程序是由类加载器查找 PU 包的,但这对我来说没有意义。这是怎么回事?
我似乎无法为此找到一个简单的文档。这些幻灯片提供了一些提示,但并不十分全面。
java - 阅读我自己的罐子清单
我需要阅读Manifest
提供我的课程的文件,但是当我使用时:
我MANIFEST
从第一个.jar
加载到 Java Runtime 中。
我的应用程序将从小程序或 webstart 运行,所以我猜
我将无法访问我自己的文件。.jar
我实际上想Export-package
从启动 Felix OSGi 的 中读取属性.jar
,因此我可以将这些包公开给 Felix。有任何想法吗?
apache - Apache Felix Bundle Repository - 从另一个包调用
我有一个简单的测试程序,旨在使用 Apache Felix Bundle Repository 捆绑服务,但是我无法通过 eclipse 配置它。
我使用捆绑包的 jar (org.apache.felix.bundlerepository-1.4.0.jar) 作为引用库,并将其添加到清单中的类路径中。
当我尝试启动我的包时,它给出了错误:
java.lang.ClassCastException: org.apache.felix.bundlerepository.RepositoryAdminImpl cannot be cast to org.apache.felix.bundlerepository.RepositoryAdmin
我无法将 org.osgi.service.obr 添加到我的包中的导入包列表中(因为它没有解决),我认为这是问题的原因。
有任何想法吗?
谢谢
java - 让 Eclipse OSGI 激活器相互继承是个好主意吗?
如果你有一个通用的 eclipse/osgi 代码平台,你可以在上面构建各种产品,你可以/应该从通用代码继承激活器吗?
例如
org.test.common.PluginActivator
org.test.common.ui.UIPluginActivator
org.test.product1.Product1PluginActivator
org.test.product1.ui.Product1UIPluginActivator
org.test.product2.Product2PluginActivator
org.test.product2.ui.Product2PluginActivator
我希望所有 UI 激活器都继承自通用激活器,非 UI 激活器也一样。启动方法都将调用超级......但是我想知道这是否是糟糕的 osgi/bundle 实践或可能导致问题。
有人对此有任何想法/意见吗?
java - 捆绑的激活器无效
我正在尝试在 eclipse 中创建一个简单的插件。当我运行应用程序时,我在日志文件中看到了这个错误:
org.osgi.framework.BundleException : 用于 bundle org.xy 的激活器用于 bundle org.xy 的激活器无效。
您对此错误有任何想法吗?
java - OSGI 环境中单例的迁移解决方案
我在 Java EE 环境中工作,其中每个应用程序都在自己的 war 文件中。在每个应用程序 war 文件的 WEB-INF/lib 中都有一个由所有应用程序共享的公共 jar。这个常见的 jar 包含几个 Singleton,可以从代码中的许多点访问。由于战争文件的边界,每个应用程序都有自己的单例实例。这就是我们今天的操作方式,因为我们想在每个应用程序中以不同的方式配置一些单例。
现在我们正在转向一个 OSGi 环境,因为每个包都有自己的类加载器,所以这个解决方案将不再工作,所以如果我尝试从包“appA.jar”或从包访问驻留在包“common.jar”中的 MySingleton bundle "appB.jar" 我会得到相同的实例。
请记住,我“想要”每个捆绑包有一个不同的单例实例。(听起来很讽刺)
现在我意识到理想的解决方案是修复代码不依赖于那些单例,但是由于时间紧迫,我想知道你们是否可以建议某种迁移解决方案,让我可以使用捆绑范围的单例所以每个包都可以配置。
eclipse - 下游插件是否可以使用外部化的 plugin.xml 字符串?
如果我有插件通用,插件 A 和 B 作为单独的插件/产品,两者都取决于插件通用。
在插件通用中,我将 plugin.xml 中的字符串外部化,这给了我 %bundle-vendor = "My Company Name"。
在下游插件 A 和 B 中,我可以使用常见的 bundle-vendor 属性作为 vendor. 我尝试在公共插件 id 前面加上它,但它没有用。这应该可能吗?