1

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

我使用的是 Esper 5.3,并且在检查捆绑清单时它不使用Dynamic-ImportOSGi 标头。Esper 的核心是 EPStatements,我理解它是在 POJO 上运行的 SQL 查询。

我正在努力理解的是 Esper 捆绑包如何访问它们,它不使用动态导入并且不知道将来可能会被引导操作哪些 POJO。

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

select * com.example.Pojo

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

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

但这不只是加载Pojo到包含 Pojo 本身的包的类空间中吗?在创建上述示例 EPStatement 时,Esper 包如何获得对它的访问权限。

4

1 回答 1

2

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

当尝试按名称查找类时,Esper 总是使用“Thread.currentThread().getContextClassLoader();”。您的代码可以使用“setContextClassLoader”来设置自己的类加载器。并且代码可能应该将其设置回来。

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

您可以使用“朋友”捆绑包。

于 2016-01-28T12:58:32.433 回答