WorkManager 的使用及优势

commonj.work.WorkManager

描述:

工作管理器 (commonj.work) API 提供的接口允许应用程序在一个容器中并发地执行多个工作项。

实际上,此 API 就是 java.lang.Thread API 的容器管理替代方法。但是java.lang.Thread API 不适用于受管 Java EE 环境中承载的应用程序。在这样的环境中,WorkManager的效果更好,因为它允许容器全面查看和控制所有执行线程。
注意:
工作管理器 API 不提供故障转移和持久性机制。如果受管服务器环境出现故障或关闭,则当前所有工作都将丢失。

优点:

1. 可以由容器来管理线程
2. 可以协调多个线程共同工作




接口:
WorkManager - 此接口提供一组用于调度要执行工作的调度方法。
系统管理员可在服务器级别定义 WorkManager。WorkManager 实例通过执行 JNDI 查找来获取。受管的环境可以支持多个 WorkManager 实例。请参阅"WebLogic JNDI 编程"。您在部署期间将 WorkManager 配置为 resource-ref。。
Work - 通过此接口,您可以异步运行应用程序代码。通过创建实现此接口的类,您可以创建可通过调度在特定的时间或定义的间隔运行的代码块。换句话说,此为在工作管理器 API 中处理的"工作"。
WorkItem - 在将 Work 实例提交给 WorkManager 后,WorkManager 将返回一个 WorkItem。此 WorkItem 用于确定整个 Work 实例的状态。
WorkListener - WorkListener 接口是一个回调接口,它在 WorkManager 与 Work 实例中定义的调度工作之间建立通信。

WorkItem item = WorkManager.schedule(Work work, WorkListener wl);

可以使用 WorkListener 确定 Work 项的当前状态。
注意:
WorkListener 实例总与通过 WorkManager 调度 Work 的初始线程在同一个 JVM 中执行。


web.xml:
<resource-ref>
<res-ref-name>wm/ThreadsWorkManager</res-ref-name>
<res-type>commonj.work.WorkManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

Java code:
可以在Listener 或 servlet中用以下代码来获取WorkManager。
WorkManager wm =(WorkManager)ic.lookup("java:comp/env/wm/ThreadsWorkManager");
wm.schedule(new OpenWOWork());



public class OpenWOWork implements Work{
private boolean isRun = true;
public void run() {
     while(isRun ){
     //add code
     }
}

public void release() {
    isRun = false; //
}

  public boolean isDaemon() {
     return true;
  }

}


Work Manager具有两个无可比拟的优势:
1. 使多个Work之间协作起来,例如使用监听器,当一个任务完成后再开始另一个任务。

2. 线程由服务器统一管理起来,如果服务器的将该应用停掉,就会shut down 所有的work,当然你也可以选择不shut down. 但是它提供了这个的功能让用户在使用时可以保证不会因为多次部署而导致应用产生多个线程在跑。

你可能感兴趣的:(WorkManager 的使用及优势)