2016-01-27 37 views
1

我想用户艾斯波OSGi框架内,但我不知道内OSGi的类加载机制怎么会允许我需要什么来实现,甚至如何艾斯波可以在OSGi的,因为它被使用。OSGi框架内使用艾斯波

我使用艾斯波5.3并且在束检查体现它不使用OSGi的Dynamic-Import头。 Esper的核心是我所理解的是在POJO上运行的SQL查询的EPStatements。

我很难理解的是,Esper捆绑包如何不使用动态导入,并且不知道将来可能针对哪些POJO进行操作,从而获得对它们的访问权限。

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

select * com.example.Pojo

如果该类com.example.Pojo是另一束给艾斯波核心,然后Pojo可以装载的唯一途径是通过使用 ClassLoader。这可以这样做:

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

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

回答

2

你可以从使用 “addEventType(字符串eventTypeName,类事件类)”, “epAdministrator.getConfiguration()” 来注册类型。这样你可以控制班级的来源。

当试图按名称查找类,那么艾斯波始终使用 “Thread.currentThread()getContextClassLoader();”。你的代码可以使用“setContextClassLoader”来设置自己的类加载器。代码应该将其设置回来。

您可以简单地改变随埃斯佩尔JAR中的清单,包括任何你喜欢的。

你可以使用“朋友”束。

+0

感谢您的建议。我还尝试通过创建一个单独的包来加载类。它通过一个服务(我的定义)添加到系统中的新类被通知并且切换到加载程序到提供POJO的包的类。加载程序包导入所有Esper导出,因此我可以通过这种方式创建语句。我只需要在我自己的脑海中澄清一下,如果以这种方式加载,类就可以从等等中看到。 – Kerry