我在Weblogic服务器上需要自定义threda;由于必须使用3d库,因此无法使用TimerEJB或Delayed MDB。
还是不鼓励?我可以使用ExecutorService还是石英?还是我只需要考虑commonj和worker manager?
ExecutorService
不鼓励在Weblogic 11g(EJB3.0)上创建“自己的线程执行程序”,您应该使用:
例:
MyEjb { @Stateless public class TimerBean implements TimerRemote { @Resource TimerService service; @Override public void startTimer() { Timer timer = service.createTimer(1000, 1000, null); System.out.println("Timers set"); } @Timeout public void handleTimeout(Timer timer) { System.out.println("Handle timeout event here..."); } }
如果无法使用Deleyed MDB或TimerService,则需要使用Work Manager 。
Weblogic和Websphere符合CommonJ(JSR 237 Timer&WorkManager);换句话说,他们使用公共界面与工作经理一起工作;在weblogic中,工作管理者可以调节线程(Servlet,EJB,MDB,…,自定义线程)的生命周期。
恕我直言,不要使用它,ExecutorService因为它不受weblogic的控制:如果停止应用程序(而不是服务器),则weblogic控制的线程将停止,其他线程不应终止;我遇到了这个问题。
WebLogic Server中的WorkManager功能本质上是动态的,它根据传入请求的数量自动调整线程池大小以最大化吞吐量。要使用 WorkManager, 您可以通过commonj界面或MBean访问。
InitialContext ic = new InitialContext(); commonj.work.WorkManager wm = (WorkManager); ic.lookup(‘java:comp/env/wm/default’); // default work manager
例如,spring有一个简单的方法可以将自己的TaskExecutor附加到comonj worker manager:
<bean id="workManager" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor"> <property name="workManagerName" value="java:comp/env/wm/default" /> </bean>
Quartz在应用程序服务器上工作,并且在春季,他们可以使用工作管理器
JEE7引入了批处理 (JSR 352)。Java平台API(批处理)的批处理应用程序为批处理应用程序提供了编程模型,并为调度和执行作业提供了运行时。
执行人服务
从Java规范:
Java EE 7平台中还新增了Batch API和Concurrency Utilities API,Batch API为批处理应用程序提供了编程模型,并为调度和执行作业提供了运行时,并通过托管执行器服务,托管调度执行器提供了异步功能。 。
在JEE7中,执行服务已通过ManagedExecutorService和扩展ManagedThreadFactory。
ManagedExecutorService
ManagedThreadFactory
javax.naming.InitialContext ctx = new InitialContext(); ManagedExecutorService mes = (ManagedExecutorService) ctx.lookup("java:comp/env/concurrent/ThreadPool"); // Create a set of tasks to perform the account retrieval. ArrayList<Callable<MyObject>> retrieverTasks = new ArrayList<Callable<MyObject>>(); retrieverTasks.add(new MyCallable());
参见http://www.oracle.com/technetwork/java/restrictions-142267.html