0

簡単なアプリケーションがあります。@startup および @singleton アノテーションを持つ 1 つの EJB。プログラムでタイマーを作成し、@timeout メソッドを備えています。コードの大部分は、Oracle Web サイトの Java ee 6 チュートリアルからのものです。コードは次のとおりです。

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

1 に答える 1

0

サーバーを数回再起動しましたが、エラーは発生しなくなりました。何が間違っていたのかまだわかりません。フォローアップの質問があります。@Resource を @inject に変更すると、javax.ejb.CreateException: Initialization failed for Singleton TimerSessionBean で失敗します。違いはなんですか?可能であれば @inject を使用する必要があると思いましたか? 皆さん、ありがとうございました。

于 2013-06-10T23:22:14.680 に答える