6

我需要从石英作业中调用 ejb 方法,但我无法找到 ejb 作业。我已经定义了一个本地接口和一个无状态实现。在 websphere 7 上部署时,EjbInvokerJob 无法在我的 jndi 树中找到我的组件。这是我的石英作业定义(这是通过石英初始化 servlet 加载的)

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?在 websphere 中,或者我应该能够通过这个配置来做到这一点。我认为问题在于我缺乏 jndi 树知识。由于启动作业的 servlet 在同一个 jvm 中运行,因此本地接口应该足够了

4

1 回答 1

0

由于可移植的全局 JNDI 名称(java:global名称空间)直到 Java EE 6 才可用,因此您应该将 EJB 绑定到组件的名称空间(在本例中为 servlet)。然后可以使用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 回答