TOMEEE - 无法查找 ejb
TOMEEE - Can't lookup ejb
我已经在我的代码中实现了一个基本的 EJB 对象。然后我为这个ejb 创建了一个jar。 jar 文件包含:
- 包包含 ejb classes(home interface/remote bean interface/bean 实现)
- 包含 ejb-jar.xml
的 META-INF 文件夹
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<display-name>NewTransactionEjb</display-name>
<enterprise-beans>
<session>
<display-name>NewTransactionEjb</display-name>
<ejb-name>NewTransactionEjb</ejb-name>
<home>gr.cosmote.mdb.NewTransactionEjb.NewTransactionEjbHome</home>
<remote>gr.cosmote.mdb.NewTransactionEjb.NewTransactionEjb</remote>
<ejb-class>gr.cosmote.mdb.NewTransactionEjb.NewTransactionEjbBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>NewTransactionEjb</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>NotSupported</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
然后我通过将 jar 放在 webapps 文件夹中来部署 EJB,从服务器日志来看,它似乎已成功部署。
但是当我尝试从我的代码中引用 ejb 时,我得到了错误。
代码:
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
InitialContext context = new InitialContext(p);
ejbHome = (EJBHome) context.lookup("java:global/NewTransactionEjb/NewTransactionEjb");
我使用了“java:global/NewTransactionEjb/NewTransactionEjb”,因为在部署 ejb 时我在服务器日志中看到了这一行:
03-Sep-2021 17:31:23.628 INFO [Catalina-utility-1] org.apache.openejb.assembler.classic.JndiBuilder.bind Jndi(name=global/NewTransactionEjb/NewTransactionEjb!gr.cosmote.mdb.NewTransactionEjb.NewTransactionEjbHome)
--> Ejb(deployment-id=NewTransactionEjb)
在执行过程中,上面的代码似乎在工作并且它检索了 EJBHome,但是当我尝试
将它投射到我自己的主界面 class 它失败并出现以下错误:
java.lang.ClassCastException: com.sun.proxy.$Proxy362 cannot be cast to
gr.cosmote.mdb.NewTransactionEjb.NewTransactionEjbHome
我做错了什么?
我终于找到了解决这个问题的方法。确切地说,实际问题与只是令人困惑的异常无关。所以无论如何我都会提到我的问题,以防有人遇到同样的问题。
我的问题是 2 个 EJB classes(home 接口和远程 bean 接口)也位于 TOMEE /lib 目录中,除了位于 /webapps 目录中的 EJB 可部署 jar 文件。所以我从 jar 文件中删除了它们(现在它只包含 bean 实现 class),部署它并且一切正常。
我已经在我的代码中实现了一个基本的 EJB 对象。然后我为这个ejb 创建了一个jar。 jar 文件包含:
- 包包含 ejb classes(home interface/remote bean interface/bean 实现)
- 包含 ejb-jar.xml 的 META-INF 文件夹
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<display-name>NewTransactionEjb</display-name>
<enterprise-beans>
<session>
<display-name>NewTransactionEjb</display-name>
<ejb-name>NewTransactionEjb</ejb-name>
<home>gr.cosmote.mdb.NewTransactionEjb.NewTransactionEjbHome</home>
<remote>gr.cosmote.mdb.NewTransactionEjb.NewTransactionEjb</remote>
<ejb-class>gr.cosmote.mdb.NewTransactionEjb.NewTransactionEjbBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>NewTransactionEjb</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>NotSupported</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
然后我通过将 jar 放在 webapps 文件夹中来部署 EJB,从服务器日志来看,它似乎已成功部署。 但是当我尝试从我的代码中引用 ejb 时,我得到了错误。 代码:
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
InitialContext context = new InitialContext(p);
ejbHome = (EJBHome) context.lookup("java:global/NewTransactionEjb/NewTransactionEjb");
我使用了“java:global/NewTransactionEjb/NewTransactionEjb”,因为在部署 ejb 时我在服务器日志中看到了这一行:
03-Sep-2021 17:31:23.628 INFO [Catalina-utility-1] org.apache.openejb.assembler.classic.JndiBuilder.bind Jndi(name=global/NewTransactionEjb/NewTransactionEjb!gr.cosmote.mdb.NewTransactionEjb.NewTransactionEjbHome)
--> Ejb(deployment-id=NewTransactionEjb)
在执行过程中,上面的代码似乎在工作并且它检索了 EJBHome,但是当我尝试 将它投射到我自己的主界面 class 它失败并出现以下错误:
java.lang.ClassCastException: com.sun.proxy.$Proxy362 cannot be cast to
gr.cosmote.mdb.NewTransactionEjb.NewTransactionEjbHome
我做错了什么?
我终于找到了解决这个问题的方法。确切地说,实际问题与只是令人困惑的异常无关。所以无论如何我都会提到我的问题,以防有人遇到同样的问题。
我的问题是 2 个 EJB classes(home 接口和远程 bean 接口)也位于 TOMEE /lib 目录中,除了位于 /webapps 目录中的 EJB 可部署 jar 文件。所以我从 jar 文件中删除了它们(现在它只包含 bean 实现 class),部署它并且一切正常。