我想在 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/