2012-08-24 28 views
6

Tôi cần chạy một tác vụ được lập lịch đơn giản sẽ bắt đầu mỗi 200ms và thực hiện điều gì đó đơn giản.Cách thích hợp để bắt đầu nhiệm vụ theo lịch trình trên nền tảng Java EE 5 (JBoss) là gì?

Có phải là Executors.newSingleThreadScheduledExecutor() cách thích hợp để nhận dịch vụ thi hành theo lịch trên JBoss không?

Người ta nói rằng việc sinh ra các luồng không được quản lý trên nền tảng Java EE không được khuyến khích. Dường như chủ đề này sẽ không được quản lý.

Mặt khác, tôi không muốn khai báo MBeans, v.v. đối với những điều đơn giản như vậy.

Sửa

Có gì đó như org.jboss.resource.work.JBossWorkManager nhưng tôi không thể tìm thấy một ví dụ về việc lên kế hoạch.

+0

bạn có đang sử dụng Spring không? – Eugene

+0

Không, nó chỉ là Java EE 5 + Đường may (cũ) –

Trả lời

4

Gọi Executors.newSingleThreadScheduledExecutor() không phải là khủng khiếp, nhưng tốt hơn nên tránh nó trong các thùng chứa EE. Trong Java EE 5 use TimeoutService:

@Stateless 
public class TimerSessionBean implements TimerSession { 
    @Resource 
    TimerService timerService; 

    public void startTimer() { 
     Timer timer = timerService.createTimer(200, "Created new timer"); 
    } 

    @Timeout 
    public void timeout(Timer timer) { 
     logger.info("Timeout occurred"); 
    } 
} 

Trong Java EE 6 bạn có tiện dụng @Schedule annotation.

+0

Không có cách nào để làm điều đó một cách thích hợp mà không có EJB? (Tôi đang sử dụng JBoss 4.x, đường dài đến Java EE 6) –

+0

@PiotrGwiazda: ['TimerService'] (http://docs.oracle.com/javaee/6/api/javax/ejb/TimerService.html) đã được giới thiệu trong EJB 2.1, vì vậy bạn nên sử dụng JBoss 4.x. –

Các vấn đề liên quan