osgi bundle导出类,但是仍然在类路径中的类被拾取

时间:2011-03-29 22:46:00

标签: java classpath osgi

我正在尝试使用一个使用osgi包并导出一些类的webapp部署一个耳朵。这是在appserver中。 bundle导出从类B派生的类A.ClassB实际上是第3方开源类,捆绑包已决定提供。问题是我的耳朵的lib目录中还有另一个版本的classB。

在尝试部署应用程序时,我收到一个奇怪的错误,A类是从osgi bundle jar加载的,但是因为classB是从ear的lib目录加载而不是从osgi bundle加载的,即使它在那里。

这导致了classA期望某些行为出现在其基类中的错误,但实际上并不存在,因为classB是从bundle外部加载的。

我不知道如何解决这个问题 - 这是我第一次遇到osgi而且我有点担心这可能比classpath地狱更糟糕,特别是对于那些需要与osgi及其部分内容集成的应用程序不

1 个答案:

答案 0 :(得分:0)

我知道人们正在尝试混合Java EE和OSGi堆栈,但我认为这是问题的一个方法。他们对于类加载器的工作方式有各自的期望,并且让他们合作可能是一个问题。

如果您必须这样做,您可以通过在osgi容器中尽可能多地放置您的Web应用程序来让自己的生活更轻松。或者,找到初始化osgi运行时的位置并更改其父级的类加载器的连接方式。您甚至可以编写一个自定义过滤类加载器,以防止OSGi从webapp类加载器加载某些类。很多事情都有可能,但也许你真的不想走这条路......