2013-05-12 10 views
1

EJB bean이 있고 RemoveInactiveUsersTask 클래스가 있습니다. DB의 사용자 상태를 업데이트하는 메소드를 호출 할 때 TimerTask를 확장합니다.EJB 서비스의 범위에 대한 활성 컨텍스트가 없음

이 내 클래스의 샘플 코드 :

@Singleton 
@Named 
@ApplicationScoped 
public class UsersStatusManager implements Serializable { 

@SuppressWarnings("CdiInjectionPointsInspection") 
    @Inject 
    private EntityManager entityManager; 

... 


} 

는 그리고 이건 내 오류입니다 : 내가 CDI와 솔기와 JSF를 사용

Exception in thread "Timer-2" javax.ejb.EJBException: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.RequestScoped 

3. 방법은 물론 @Transactional와 주석입니다 내가 타이머에서 사용할 때까지 모든 것이 괜찮습니다. 관리되지 않는 EntityManager를 사용하려고했지만 트랜잭션 필요 예외가 있습니다.

어떤 아이디어로이 문제를 해결할 수 있습니까?

+0

그래서'RemoveInactiveUsersTask' 클래스는 어떻게 생겼습니까? 나는 당신이 당신의 EJB 중 하나에 대한 요청 범위를 가지고 있다고 의심한다 - 만약 당신이 그렇게하고 별도의 쓰레드에서 그것을 실행하려고 시도한다면, 거기에는 요청 문맥이 없기 때문에 작동하지 않을 것이다. – dratewka

답변

4

예외는 정확하며 여기에는 활성 요청 컨텍스트가 없습니다. 너는 더 낮은 범위를 시도해야한다; 예 : 매달린.