2009-06-18 48 views
8

Tôi đang cố gắng xây dựng một dịch vụ JBoss sẽ được khởi động tự động, mỗi khi máy chủ được khởi động.Tự động khởi động dịch vụ JBoss (MBean)

Tôi đã có cấu trúc lớp sau cho dịch vụ của tôi:

public interface CumbiaXPMServiceMBean extends org.jboss.system.ServiceMBean 
public class CumbiaXPMService extends org.jboss.system.ServiceMBeanSupport implements CumbiaXPMServiceMBean 

Tôi cũng đã có những tập tin sau đây cấu hình - JBoss-service.xml - cho dịch vụ của tôi:

<server> 
    <mbean code="uniandes.cumbia.xpm.jboss.CumbiaXPMService" 
     name="jcumbia:service=JCumbiaEngine"> 
     <depends>jcumbia:service=cumbiaConsole</depends> 
     <attribute name="LocationInCumbia" attributeClass="java.lang.String">XPMEngine</attribute>  
    </mbean> 
</server> 

Câu hỏi của tôi là: làm cách nào để tự động bắt đầu dịch vụ này? Tôi dự kiến ​​JBoss sẽ gọi phương thức start() như là một phần của quá trình tải, nhưng nó không phải là: Tôi có rất nhiều mã đăng nhập trong phương thức start(), nhưng tôi chưa thấy bất kỳ đầu ra.

Tuy nhiên, khi tôi xem trạng thái MBean bằng JMXConsole, trạng thái của nó (StateString) là 'Bắt ​​đầu'.

vấn đề giải quyết

tôi tìm thấy giải pháp cho vấn đề của tôi. Tôi đã ghi đè các phương thức start(), stop(), destroy() và tạo(); tuy nhiên, vì tôi đang mở rộng lớp trừu tượng ServiceMBeanSupport, tôi nên ghi đè các phương thức startService(), stopService(), v.v.

Tôi vừa chuyển mã của tôi từ phương thức start() sang phương thức startService() và bây giờ mọi thứ đều hoạt động như tôi cần: ngay sau khi các phụ thuộc của nó được hoàn thành, dịch vụ của tôi được bắt đầu và phương thức startService() được thực thi.

Tôi nghĩ kết luận là: mặc dù vòng đời của một MBean liên quan đến việc gọi create(), start(), stop() và destroy(), việc triển khai lớp trừu tượng ServiceMBeanSupport sử dụng các phương thức đó để xử lý cuộc sống chu kỳ. Tuy nhiên, nó cung cấp các phương thức được bảo vệ * Service() để cho phép lập trình viên tham gia vào vòng đời.

+0

"tự động"?Dịch vụ không "bắt đầu" khi máy chủ ứng dụng được khởi động phải không? Nếu giao diện điều khiển JMX nói nó đã bắt đầu, hành vi nào khiến bạn tin rằng nó đã không hoạt động? – duffymo

+0

Tôi đã có một số mã đăng nhập bên trong phương thức start(), nhưng nó không được thực thi. Tôi có một số mã đăng nhập trong constructor của lớp, và tôi có thể nhìn thấy đầu ra của nó, nhưng đó là nó. – nozebacle

Trả lời

6

vấn đề giải quyết

tôi tìm thấy giải pháp cho vấn đề của tôi. Tôi đã ghi đè các phương thức start(), stop(), destroy() và tạo(); tuy nhiên, vì tôi đang mở rộng lớp trừu tượng ServiceMBeanSupport, tôi nên ghi đè các phương thức startService(), stopService(), v.v.

Tôi vừa chuyển mã của tôi từ phương thức start() sang phương thức startService() và bây giờ mọi thứ đều hoạt động như tôi cần: ngay sau khi các phụ thuộc của nó được hoàn thành, dịch vụ của tôi được bắt đầu và phương thức startService() được thực thi.

Tôi nghĩ kết luận là: mặc dù vòng đời của một MBean liên quan đến việc gọi create(), start(), stop() và destroy(), việc triển khai lớp trừu tượng ServiceMBeanSupport sử dụng các phương thức đó để xử lý cuộc sống chu kỳ. Tuy nhiên, nó cung cấp các phương thức được bảo vệ * Service() để cho phép lập trình viên tham gia vào vòng đời.

2

Đối với tôi nó giúp xác định điểm dừng và bắt đầu phương pháp trong giao diện MBean:

public interface MyServiceMBean { 
    ... 

    // Lifecycle callbacks 
    void start() throws Exception; 
    void stop(); 
} 

Ưu điểm là bạn không cần phải mở rộng ServiceMBean oder ServiceMBeanSupport.

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