我想在OSGi框架内使用Esper,但是我不确定OSGi中的类加载机制将如何允许我需要达到的目标,甚至不确定Esper如何在OSGi中使用。
我使用Esper5.3,在检查包清单时,它不使用Dynamic-Import OSGi头。Esper的核心是EPStatements,据我所知,它是在POJO上操作的SQL查询。
我很难理解的是Esper包是如何获得访问权限的。Esper包不使用动态导入,也不知道它将来可能针对什么POJO操作。
例如,如果我尝试创建EPStatement:
select * com.example.Pojo
如果类com.example.Pojo位于Esper核心的另一个包中,那么加载Pojo的唯一方法就是使用its ClassLoader。这可以通过以下方式做到:
Thread.currentThread().setContextClassLoader(com.example.Pojo.class.getClassLoader);但是,这不只是将Pojo加载到包含Pojo本身的包的类空间吗?当创建上面的示例EPStatement时,Esper包如何获得对它的访问。
发布于 2016-01-28 12:58:32
您可以使用"addEventType(String eventTypeName,Class eventClass)“中的"epAdministrator.getConfiguration()”注册类型。这样,您就可以控制类的来源。
当尝试按名称查找类时,Esper总是使用"Thread.currentThread().getContextClassLoader();".您的代码可以使用"setContextClassLoader“来设置自己的类加载器。代码可能会把它放回原处。
您可以简单地更改Esper jar附带的Manifest,并包含您喜欢的任何内容。
你可以用“朋友”包。
https://stackoverflow.com/questions/35048741
复制相似问题