2011-12-20 11 views
6

この設定に問題があり、ログを見ることさえできません。@Singleton、@Startup、@PostConstructはEJB3.1とGlassfish3.0.1では動作しません

これは私の@Singleton@Startup EJBです:

SchedulerEJB
@Singleton 
@Startup 
@DependsOn("SchedulerEJB") 
public class SchedulerStartUp { 

    private static Logger log = Logger.getLogger(SchedulerStartUp.class); 

    @EJB 
    SchedulerEJB schedEJB; 

    @PostConstruct 
    public void atStartup() { 
     log.info("startUp") 
     System.out.println("startUp"); 

     schedEJB.cancelTimer("EBlastScheduler"); 
     schedEJB.createTimer("*/1", "*", "*"); 
    } 
} 

@Stateless 
public class SchedulerEJB { 

    @Resource 
    TimerService timerService;   

    public cancelTimer(String timerInfo){/*...*/} 

    public createTimer(String sec, String min, String hour) {/*...*/} 

    @Timeout 
    public void execute(Timer timer) {/*...*/} 
} 

MavenのPOM:

//Been Using Glassfishv3.0.1 and EJB3.1 with a dependency of: 
<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> 
    <scope>provided</scope> 
</dependency> 
+0

デバッグできますか?また、私はコモンズロギングを使用する際に問題がありました。アプリケーションがデプロイされたときにslf4j 'LoggerFactory.getLogger(SchedulerStartUp.class)' –

+0

ログが正常に実行されました。このコンテキストで使用されると発生するようです:( –

+0

それをデバッグするのですか? –

答えて

6

あなたは@DependsOnの属性として豆の無効な種類があります。 DependsOnは、シングルトンとステートレス間ではなく、2つのシングルトンセッションBean間の依存関係を表現するためのものです。 SchedulerEJBをSingletonに変更するか、依存関係を削除する必要があります。

あなたはシングルトンに変更しSchedulerEJBを決定した場合は、その後、@DepensOnも、必要とされていないので(からEJB 3.1仕様):

注1シングルトンは、単にそのPostConstructメソッドから別のシングルトン を呼び出す必要がある場合に明示的な注文メタデータは である必要はありません。その場合、最初のシングルトンはejb 参照を使用してターゲットシングルトンを呼び出すだけです。そこでは、 のejb参照(注入または参照による)の取得は、対応するSingleton beanインスタンスの実際の作成を必ずしも意味しません。

+0

しかし、@Stateless、回避策が必要ですか?多分私は '@DependsOn '完全に?しかし私の' @EJB 'は動作しますか:( –

+0

' @EJB 'は動作しません。上記のSchedulerEJBという名前のBeanを初期化する方法はありますか? –

+0

ステートレスと呼ばれる状況はありませんBeanをシングルトンから削除することはできますが、@DependsOnを削除することを前提としています。なぜなら、SchedulerEJBを前もって初期化する必要があるコードの他の部分に隠された必要がないと仮定します。コンテナは、追加なしで現在のコードで使用可能なインスタンスがあることを保証する必要があります。 –

関連する問題