2013-06-10 1 views
0

나는 간단한 어플리케이션을 가지고 있습니다. @startup 및 @singleton 주석이있는 EJB 하나. 그것은 프로그램 적으로 타이머를 만들고 @timeout 메서드를 가지고있다. 이 코드는 대부분 Oracle 웹 사이트의 java ee 6 자습서에 있습니다. 여기글래스 피쉬는 불법 스테이트먼트를 제공합니다 - java ee 타이머 어플리케이션을 배포하려고 시도합니다

import java.util.logging.Logger; 
import javax.annotation.PostConstruct; 
import javax.annotation.Resource; 
import javax.ejb.Singleton; 
import javax.ejb.Startup; 
import javax.ejb.Timeout; 
import javax.ejb.Timer; 
import javax.ejb.TimerService; 

@Singleton 
@Startup 
public class TimerSessionBean { 
    @Resource 
    TimerService timerService; 

    long duration = 6000; 

    private Logger logger = Logger.getLogger(
      "simpletimer.service.TimerSessionBean"); 

    @PostConstruct 
    public void setTimer() { 
     logger.info("Setting a programmatic timeout for " 
       + duration + " milliseconds from now."); 
     Timer timer = timerService.createTimer(duration, 
       "Created new programmatic timer"); 
    } 

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

} 

serverlog 파일의 오류는 다음과 같습니다 : 여기에 코드입니다

SEVERE: Exception while invoking class com.sun.enterprise.web.WebApplication start method 
java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException: javax.servlet.ServletException: com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class org.jboss.weld.servlet.WeldListener 
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:138) 
    at org.glassfish.internal.data.EngineRef.start(EngineRef.java:130) 
    at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269) 
    at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:301) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240) 
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:389) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348) 

답변

0

나는 서버 몇 번을 다시 시작하고 오류가 더 이상 발생하지 않습니다. 무엇이 잘못되었는지 아직 확실하지 않습니다. 후속 질문이 있습니다. @Resource를 @inject로 변경하고 javax.ejb.CreateException로 실패합니다 : Singleton TimerSessionBean에 초기화가 실패했습니다. 그 차이점은 무엇입니까? 나는 가능한 한 @ 주입을 사용해야한다고 생각 했단 말인가? 다들 감사 해요.

관련 문제