2010-08-23 6 views
2

10 분마다 실행되는 백그라운드 서비스가 있습니다.SEAM : 동적으로로드되는 클래스에서 EntityManager 및 Logger를 가져 오는 방법은 무엇입니까?

이 서비스는 작업을 수행하기 위해 DB에 쿼리를 실행합니다. Class.forName()을 사용하여 작업에 따라 다른 비즈니스 로직을 가진 클래스를로드합니다. 그들은 물론 같은 인터페이스를 구현합니다.

SEAM 구성 요소로 선언되었지만 entityManager 또는 Logger를 사용하려고하면 NPE가 발생합니다.

내 자신의 질문에 답하기 위해 Class.forName()이 SEAM의 주입 메커니즘을 따르고 종속성을 주입 할 기회가 없기 때문에 이것이라고 생각합니다.

나는 클래스를로드 한 후,이 코드들을 직접 삽입함으로써 해결할 수있을 것이다. 그렇게 할 수있는 더 좋은 방법이 있습니까?

감사합니다.

답변

2

EJB-Timer Service 사용 방법을 확인하셨습니까?

또 다른 자원 :

Is it possible to use Seam in a JBoss timed service?

나는 며칠 비슷한 일을해야합니다.

당신을 위해 일을 어떤 코멘트를 남겨주세요 ;-)

당신은 당신이 할 수있는 일 로거를 얻으려면
Component.getInstance("entityManager") //You can inject whatever you want. 

를 사용하여 비 심 클래스의 모든 Seam 컴포넌트를 삽입 할 수
+0

EJB 3 타이머를 사용하고 있습니다. 이상하게도 나는 다른 질문에서 언급 한 '문맥 상 문제 없음'을 가지고 있지 않다. Component.getInstance (String, boolean)를 사용하여 구성 요소를로드하면 lyfecicle.beginCall()을 호출 할 필요가 없으므로 문제가 해결되었습니다. 이제는 EntityManager 및 로거를 사용할 수 있습니다. 감사! –

+0

@Cleber Goncalves 의견에 감사드립니다 – stacker

1

다음
private static final LogProvider log = Logging.getLogProvider(MyClass.class); 
관련 문제