java - 在 OSGi 框架中使用 Esper

标签 java classloader esper contextclassloader

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

我使用的是 Esper 5.3,在检查 bundle list 后,它不使用 Dynamic-Import OSGi header 。 Esper 的核心是 EPStatement,我将其理解为对 POJO 进行操作的 SQL 查询。

我很难理解的是,Esper bundle 如何获取对它们的访问权限,它不使用动态导入,并且不知道它将来可能会被引导操作哪些 POJO。

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

选择 * com.example.Pojo

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

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

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

最佳答案

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

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

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

您可以使用“ friend ” bundle 。

关于java - 在 OSGi 框架中使用 Esper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35048741/

相关文章:

java - 单击菜单中的项目后如何显示文本框。安卓

java - 可观察内的 RxJava 过滤器列表

java - Eclipse 中的自定义编译时类加载?

java - JBoss7 : loader constraint violation with ReastEasy and httpclient with custom HttpRequestInterceptor

java - Esper 外部定时 View 失败并带有时间戳?

rule-engine - 自定义规则引擎中的esper

java - javax MySQL 的连接池

java - Spring中BeanPostProcessor的实际用途是什么?

java - Websphere httpclient NoSuchMethodError org.apache.http.conn.Scheme

java - 错误时 Esper 回调