6

Quartz ジョブから ejb メソッドを呼び出す必要がありますが、ejb ジョブを見つけるのに問題があります。Local インターフェイスとステートレス実装を定義しました。Websphere 7 にデプロイすると、EjbInvokerJob が jndi ツリーでコンポーネントを見つけることができません。これは私の Quartz ジョブ定義です (これは Quartz init サーブレットを介してロードされます)

JobDetail jd = JobBuilder//
                    .newJob(EJBInvokerJob.class)//
                    .withIdentity("job", "group")//
                    .usingJobData(EJBInvokerJob.EJB_JNDI_NAME_KEY, "ejb/myBean")//
                    .usingJobData(EJBInvokerJob.EJB_METHOD_KEY, "update")//
                    .build();
            String cronExpr = getInitParameter("cronExpr");
            Trigger cronTrigger = TriggerBuilder//
                    .newTrigger() //
                    .forJob(jd) //
                    .startNow() //
                    .withSchedule(CronScheduleBuilder.cronSchedule(cronExpr))//
                    .build();

            Scheduler sched = StdSchedulerFactory.getDefaultScheduler();
            sched.scheduleJob(jd, cronTrigger);
            sched.start();

そして、私のBeanには、その上にこの注釈があります

@Stateless(name = "myBean")

EJB_JNDI_NAME_KEY をバインドするにはどうすればよいですか? または、この構成を介してこれを行うことができるはずです。問題は、jndi ツリーの知識が不足していることにあると思います。ジョブを開始するサーブレットは同じ jvm で実行されるため、ローカル インターフェイスで十分なはずです。

4

1 に答える 1

0

移植可能なグローバル JNDI 名 (java:global名前空間) は Java EE 6 まで使用できなかったため、EJB をコンポーネントの名前空間 (この場合はサーブレット) にバインドする必要があります。次に、名前を使用してルックアップを実行できますjava:comp/env/ejb/myBean

web.xml には次のエントリが必要です。

<ejb-local-ref>
  <ejb-ref-name>ejb/myBean</ejb-ref-name>
  <ejb-ref-type>Session</ejb-ref-type>
  <local>LOCAL_EJB_INTERFACE</local>
</ejb-local-ref>
于 2013-06-26T14:52:09.847 に答える