我是OSGI的新手,正在开发在websphere上运行的项目。 我有一个简单的调度程序,我使用了java.util.concurrent.ScheduledExecutorService,如下所示:
private ScheduledExecutorService scheduler;
...
scheduler = Executors.newScheduledThreadPool(corePoolSize);
因为我的应用程序是在容器(WebSphere)中运行的,所以尽管让容器管理线程会更好,所以我想使用:
scheduler = Executors.newScheduledThreadPool(corePoolSize, threadFactory);
threadFactory将从容器中注入蓝图。
我环顾四周,找不到如何做的例子。 所以我的问题是,如何做到这一点,是否值得努力?
答案 0 :(得分:1)
关于我的问题,我找到了一些非常有用的资源,
归咎于此: http://www.ibm.com/developerworks/websphere/techjournal/0609_alcott/0609_alcott.html#spring-4
其他软件包(例如quartz和JDK Timer)启动时不受管理 线程,应该避免。
解决方案是: http://www.ibm.com/developerworks/websphere/techjournal/0606_johnson/0606_johnson.html#sec5
示例代码可用,基本上使用WebSphere WorkManager实现自定义TheardFactory,而剩下的就是使用自定义ThreadFactory启动ExecutorService。
答案 1 :(得分:0)
我不确定OSGi标签在这个特定情况下的位置,但是this question有几个链接你会觉得很有用。我不会在你自己的答案中引用的文章中使用WorkManager的内容,因为它非常适合IBM,并且在commonj API中有更好的选择,并且就此而言,有一个Timer服务作为API的一部分这可能会完全照顾你的需求。
如果您使用Spring,那么您可以编写integration for task execution and scehduling代码,它们透明地支持JDK和commonj(在编译时)。