如何在 Jaxrs 中创建多个 ManagedScheduledExecutorService 资源
How to create multiple ManagedScheduledExecutorService resources in Jaxrs
我正在使用 WebSphere Liberty (wlp) 和 JAX-RS 开发一项服务。
我想在我的服务中 运行 多个调度程序来定期执行不同的任务。
我已经安装了 concurrent-1.0 功能并定义了
的实例
@Resource(name ="DefaultManagedScheduledExecutorService")
private ManagedScheduledExecutorService myScheduler;
在我的初始化 class 中实现了 ServletContextListener
如何在其他 class 中创建更多实例?
我可以找到 ManagedExecutorService
的指针,例如:
http://www.adam-bien.com/roller/abien/entry/injecting_an_executorservice_with_java
我用 ManagedScheduledExecutorService
试过同样的方法,但没用。
但我无法获得有关 ManagedScheduledExecutorService
资源的太多信息。
请提供任何可能对此处有用的链接或指示。
查看此页面 Configuring managed scheduled executors 了解如何配置托管执行程序的详细信息。
您应该能够使用一个执行器,只需为您的不同任务调用多个 executor.schedule*
方法。
您当前的注入示例正在使用默认的 ManagedScheduledExecutorService,一旦您打开 concurrent-1.0
功能,它就可用。
要配置额外的 ManagedScheduledExecutorService,您只需在 server.xml 配置中定义更多,如下所示:
<managedScheduledExecutorService jndiName="concurrent/exec1"/>
<managedScheduledExecutorService jndiName="concurrent/exec2"/>
<managedScheduledExecutorService jndiName="concurrent/exec3"/>
但是,您确实没有理由需要额外的 ManagedScheduledExecutorService,除非它们将针对不同的任务应用不同的上下文服务配置。例如:
<managedScheduledExecutorService jndiName="concurrent/classloaderExec">
<contextService>
<classloaderContext/>
</contextService>
</managedScheduledExecutorService>
<managedScheduledExecutorService jndiName="concurrent/jeeMetadataExec">
<contextService>
<jeeMetadataContext/>
</contextService>
</managedScheduledExecutorService>
如果您只是想安排不同的任务,比如 myHourlyTask
和 myDailyTask
,您仍然可以使用相同的 ManagedScheduledExecutorService 资源来完成:
myScheduler.scheduleAtFixedRate(myHourlyTask, 0, 1, TimeUnit.HOURS);
myScheduler.scheduleAtFixedRate(myDailyTask, 0, 1, TimeUnit.DAYS);
在任何非资源 class 中声明和使用 ManagedScheduledExecutorService
默认资源实例:
/** The scheduler. */
private ManagedScheduledExecutorService monkeyScheduler;
try {
monkeyScheduler = (ManagedScheduledExecutorService)
new InitialContext().lookup("java:comp/DefaultManagedScheduledExecutorService");
} catch (NamingException e) {
e.printStackTrace();
}
我正在使用 WebSphere Liberty (wlp) 和 JAX-RS 开发一项服务。 我想在我的服务中 运行 多个调度程序来定期执行不同的任务。 我已经安装了 concurrent-1.0 功能并定义了
的实例@Resource(name ="DefaultManagedScheduledExecutorService")
private ManagedScheduledExecutorService myScheduler;
在我的初始化 class 中实现了 ServletContextListener
如何在其他 class 中创建更多实例?
我可以找到 ManagedExecutorService
的指针,例如:
http://www.adam-bien.com/roller/abien/entry/injecting_an_executorservice_with_java
我用 ManagedScheduledExecutorService
试过同样的方法,但没用。
但我无法获得有关 ManagedScheduledExecutorService
资源的太多信息。
请提供任何可能对此处有用的链接或指示。
查看此页面 Configuring managed scheduled executors 了解如何配置托管执行程序的详细信息。
您应该能够使用一个执行器,只需为您的不同任务调用多个 executor.schedule*
方法。
您当前的注入示例正在使用默认的 ManagedScheduledExecutorService,一旦您打开 concurrent-1.0
功能,它就可用。
要配置额外的 ManagedScheduledExecutorService,您只需在 server.xml 配置中定义更多,如下所示:
<managedScheduledExecutorService jndiName="concurrent/exec1"/>
<managedScheduledExecutorService jndiName="concurrent/exec2"/>
<managedScheduledExecutorService jndiName="concurrent/exec3"/>
但是,您确实没有理由需要额外的 ManagedScheduledExecutorService,除非它们将针对不同的任务应用不同的上下文服务配置。例如:
<managedScheduledExecutorService jndiName="concurrent/classloaderExec">
<contextService>
<classloaderContext/>
</contextService>
</managedScheduledExecutorService>
<managedScheduledExecutorService jndiName="concurrent/jeeMetadataExec">
<contextService>
<jeeMetadataContext/>
</contextService>
</managedScheduledExecutorService>
如果您只是想安排不同的任务,比如 myHourlyTask
和 myDailyTask
,您仍然可以使用相同的 ManagedScheduledExecutorService 资源来完成:
myScheduler.scheduleAtFixedRate(myHourlyTask, 0, 1, TimeUnit.HOURS);
myScheduler.scheduleAtFixedRate(myDailyTask, 0, 1, TimeUnit.DAYS);
在任何非资源 class 中声明和使用 ManagedScheduledExecutorService
默认资源实例:
/** The scheduler. */
private ManagedScheduledExecutorService monkeyScheduler;
try {
monkeyScheduler = (ManagedScheduledExecutorService)
new InitialContext().lookup("java:comp/DefaultManagedScheduledExecutorService");
} catch (NamingException e) {
e.printStackTrace();
}