Websphere 配置Quartz作业以使用EJBInvokerJob调用EJb
我需要从quartz作业调用ejb方法,因为我在定位ejb作业时遇到了问题。我已经定义了一个本地接口和一个无状态实现。在websphere7上部署时,EjbInvokerJob无法在我的jndi树中找到我的组件。 这是我的quartz作业定义(通过quartz init servlet加载) 我的bean上面有这个注释Websphere 配置Quartz作业以使用EJBInvokerJob调用EJb,websphere,ejb-3.0,quartz-scheduler,jndi,Websphere,Ejb 3.0,Quartz Scheduler,Jndi,我需要从quartz作业调用ejb方法,因为我在定位ejb作业时遇到了问题。我已经定义了一个本地接口和一个无状态实现。在websphere7上部署时,EjbInvokerJob无法在我的jndi树中找到我的组件。 这是我的quartz作业定义(通过quartz init servlet加载) 我的bean上面有这个注释 @Stateless(name = "myBean") 我应该如何绑定我的EJB\u JNDI\u NAME\u密钥?在websphere中,或者我应该能够通过此配置执行此操作
@Stateless(name = "myBean")
我应该如何绑定我的EJB\u JNDI\u NAME\u密钥?在websphere中,或者我应该能够通过此配置执行此操作。我认为问题在于我缺乏jndi树知识。由于启动作业的servlet在同一jvm中运行,因此本地接口应该足够了,因为可移植全局JNDI名称(
java:global
namespace)直到JavaEE6才可用,所以您应该将EJB绑定到组件的名称空间(在本例中为servlet)。然后可以使用java:comp/env/ejb/myBean
name执行查找
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>
ejb/myBean
一场
本地EJB接口
LOCAL_EJB_接口,是我的EJB接口的FQN还是我可以给@LOCAL注释的值?这仍然会生成错误。名称[ejb/myBean]未在此上下文中绑定。找不到[ejb]@jelle它应该是本地ejb接口的FQN。在WAS控制台中,这个EJB是否显示为绑定到web应用程序(企业应用程序/您的应用程序/引用/EJB引用)中?当我看到它与另一个bean一起定义时,我被注入到一个servlet中。我应该定义一个jndi名称并引用它吗?@jelle从servlet中查找的bean必须绑定到web模块中。我不熟悉EJBInvokerJob,也不知道它是否在bean引用前面加上了“java:comp/env”。您可以同时尝试“java:comp/env/ejb/myBean”和“ejb/myBean”。
<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>