簡體   English   中英

Weblogic Server 11g上的自定義線程

[英]Custom Thread on Weblogic Server 11g

我的weblogic服務器上需要一個自定義的threda; 我不能使用TimerEJB或Delayed MDB,因為我必須使用3d庫。

我知道不鼓勵應用服務器上的自定義線程 ; 這里有一篇相關文章(4歲): 為什么不鼓勵在Java EE容器中產生線程?

它仍然氣餒嗎? 我可以使用ExecutorService或Quartz嗎? 或者我只考慮commonj和工人經理?

在Weblogic 11g(EJB3.0)上建議您創建“自己的線程執行器”(另請參閱Java EE規范和多線程 ),您應該使用:

  • TimerService

例:

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適用於應用程序服務器 ,使用spring可以使用工作管理器

JAVA EE 7

JEE7引入了BatchJSR 352 )。 Java平台API(批處理)的批處理應用程序為批處理應用程序和用於調度和執行作業的運行時提供編程模型。

執行人服務

來自java規范:

Java EE 7平台的另一個新功能是Batch API,它為批處理應用程序提供編程模型,為調度和執行作業提供運行時,以及Concurrency Utilities API,它通過托管執行程序服務,托管預定執行程序提供異步功能。 。

在JEE7中,Executor Service已使用ManagedExecutorServiceManagedThreadFactory進行了擴展。

例:

   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());

結論:Weblogic

請參閱http://www.oracle.com/technetwork/java/restrictions-142267.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM