【发布时间】:2016-03-11 10:35:21
【问题描述】:
我正在考虑修改我现有的 java 框架以使用 OSGi。我有几个组件依赖于反射并与任何类型的类一起工作(如 bean 和持久性服务)。 我对 OSGi 还不是很有经验,但据我所知,OSGi 包只能看到它显式导入的包中的类。如果我使用 maven-bundle-plugin 构建一个包并指定一个通配符作为导入包,它会解析代码在构建时引用的包。我需要代码来处理构建时未知的包中的类。
我想要实现的是,bundle-A 可以使用 bundle-B 中的持久性框架来持久化属于 bundle-C 的类。虽然 bundle-B 在构建时不知道 bundle-C。
我需要哪些清单条目以及如何使用 maven-bundle-plugin 设置它们?
另外,由于同一类可以有多个版本被不同的包使用,这在 OSGi 环境中是否有意义?如果我理解正确,Bundle-A 和 Bundle-B 可能会看到 Bundle-C 的不同版本。如果 Bundle-A 现在将位于 Bundle-C 中的类的对象传递给 Bundle-B,然后在该类上使用反射,则 Bundle-B 将看到在 Bundle-C 中定义的类或在 Bundle-C 中定义的类Bundle-A 的 Bundle-C。 例如,如果我在 Bundle-C 中有以下类:
class Y {
[...]
}
class X {
Y y;
[...]
}
Bundle-C 对于 Bundle-A 和 B 是不同的。B 将 X 类的对象传递给 A。如果 B 现在发现字段 y 并解析它的类,它将解析 Y,因为它在它的 Bundle-C 版本中还是 A 知道的版本?
简而言之,即使我有一个可以从所有包中导入所有类的包,这对于例如创建一个将对象持久保存到数据库中的服务是否有用?
【问题讨论】: