2009-06-18 4 views
8

서버가 시작될 때마다 자동으로 시작되어야하는 JBoss 서비스를 빌드하려고합니다.JBoss 서비스 (MBean) 자동 시작

내 서비스를 다음 클래스 구조를 가지고 :

또한 다음과 같은 구성 파일이있어
public interface CumbiaXPMServiceMBean extends org.jboss.system.ServiceMBean 
public class CumbiaXPMService extends org.jboss.system.ServiceMBeanSupport implements CumbiaXPMServiceMBean 

- 제이 보스-service.xml - 내 서비스 :

<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> 

제 질문은 :이 서비스를 어떻게 자동 시작합니까?

JBoss가로드 프로세스의 일부로 start() 메소드를 호출 할 것으로 예상했지만, 그렇지 않습니다. start() 메소드에 많은 로그 코드가 있지만 아무 것도 보지 못했습니다. 산출.

그러나 JMXConsole을 사용하여 MBean 상태를 볼 때 State (StateString)는 'Started'입니다.

문제는 내 문제에 대한 해결책을 발견

를 해결. 나는 start(), stop(), destroy(), create() 메소드를 오버라이드하고 있었다. 그럼에도 불구하고, 나는 추상 클래스 ServiceMBeanSupport를 확장하고 있기 때문에 startService(), stopService() 등의 메소드를 오버라이드해야한다.

방금 ​​start() 메소드에서 startService 이제는 필요에 따라 모든 것이 작동합니다. 종속성이 충족되면 서비스가 시작되고 startService() 메소드가 실행됩니다.

결론 : MBean의 라이프 사이클에는 create(), start(), stop() 및 destroy()를 호출하는 것이 포함되어 있지만 ServiceMBeanSupport 추상 클래스의 구현은 이러한 메소드를 사용하여 수명을 처리합니다 주기. 그럼에도 불구하고 프로그래머가 라이프 사이클에 참여할 수 있도록하기 위해 * Service() 보호 메소드를 제공합니다.

+0

"자동으로"?앱 서버가 시작될 때 서비스가 "시작"되지 않습니까? JMX 콘솔이 시작되었다고 말하면 어떤 행동을 취하지 않는다고 믿게합니까? – duffymo

+0

start() 메서드 내에 로깅 코드가 있지만 실행되고 있지 않습니다. 클래스의 생성자에서 일부 로깅 코드가 있는데 그 출력을 볼 수 있지만 그게 전부입니다. – nozebacle

답변

6

문제는 내 문제에 대한 해결책을 발견

를 해결. 나는 start(), stop(), destroy(), create() 메소드를 오버라이드하고 있었다. 그럼에도 불구하고, 나는 추상 클래스 ServiceMBeanSupport를 확장하고 있기 때문에 startService(), stopService() 등의 메소드를 오버라이드해야한다.

방금 ​​start() 메소드에서 startService 이제는 필요에 따라 모든 것이 작동합니다. 종속성이 충족되면 서비스가 시작되고 startService() 메소드가 실행됩니다.

결론 : MBean의 라이프 사이클에는 create(), start(), stop() 및 destroy()를 호출하는 것이 포함되어 있지만 ServiceMBeanSupport 추상 클래스의 구현은 이러한 메소드를 사용하여 수명을 처리합니다 주기. 그럼에도 불구하고 프로그래머가 라이프 사이클에 참여할 수 있도록하기 위해 * Service() 보호 메소드를 제공합니다.

public interface MyServiceMBean { 
    ... 

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

장점은 당신이 ServiceMBean의 오 데르의 ServiceMBeanSupport을 확장 할 필요가 없다는 것입니다 : 나를 위해

2

그것은 MBean의 인터페이스의 메소드 정지를 정의하고 시작 도왔다.