在 OSGi 框架中使用 Esper

Using Esper within OSGi framework

我想在 OSGi 框架中使用 Esper,但是我不确定 OSGi 中的 class 加载机制将如何实现我需要实现的目标,甚至不确定 Esper 如何在 OSGi 中使用,因为它.

我正在使用 Esper 5.3,在检查包清单后它没有使用 Dynamic-Import OSGi header。 Esper 的核心是 EPSStatement,据我所知是 SQL 对 POJO 进行操作的查询。

我很难理解的是 Esper 包是如何访问它们的,它不使用动态导入并且不知道将来可能会被指示操作哪些 POJO。

例如,如果我尝试创建 EPSstatement:

select * com.example.Pojo

如果 class com.example.Pojo 在 Esper 核心的另一个包中,那么 Pojo 可以加载的唯一方法是使用 its 类加载器。这可以通过以下方式完成:

Thread.currentThread().setContextClassLoader(com.example.Pojo.class.getClassLoader);

但这不只是将 Pojo 加载到包含 Pojo 本身的包的 class space 中吗? Esper bundle 如何获得对它的访问权限,因为它在创建上述示例 EPSstatement 时需要访问它。

您可以使用 "epAdministrator.getConfiguration()" 中的 "addEventType(String eventTypeName, Class eventClass)" 来注册类型。这样您就可以控制 class 的来源。

当试图通过名称查找 class 时,Esper 总是使用 "Thread.currentThread().getContextClassLoader();"。您的代码可以使用 "setContextClassLoader" 来设置自己的 classloader。并且代码可能应该将其设置回去。

您可以简单地更改 Esper jar 附带的清单,并包含您喜欢的任何内容。

您可以使用 "friend" 个捆绑包。