我收到错误 (...) javax.naming.NameNotFoundException: greetJndi not bound
这意味着没有任何东西与 jndi 名称 greetJndi 绑定,很可能是因为部署问题,因为本教程的质量非常低(检查服务器日志)。我会回来的。
在 JBoss 中是否有任何特定的目录结构可以部署?
ejb-jar 的内部结构应该是这样的(使用糟糕的命名约定和默认包,如提到的链接):
.
├──greetBean.java
├── greetHome.java
├──greetRemote.java
└── META-INF
├── ejb-jar.xml
└── jboss.xml
但如前所述,本教程充满了错误:
-
ejb-jar.xml (!) 中有一个额外的字符 (<enterprise-beans>]
-
ejb-jar.xml 和jboss.xml 中的PUBLIC 后面缺少一个空格(!!)
-
jboss.xml 不正确,它应该包含 session 元素而不是 entity (!!!)
这是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>
<enterprise-beans>
<session>
<ejb-name>greetBean</ejb-name>
<home>greetHome</home>
<remote>greetRemote</remote>
<ejb-class>greetBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
还有jboss.xml:
<?xml version="1.0"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.2//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_2.dtd">
<jboss>
<enterprise-beans>
<session>
<ejb-name>greetBean</ejb-name>
<jndi-name>greetJndi</jndi-name>
</session>
</enterprise-beans>
</jboss>
在完成这些更改并重新打包 ejb-jar 之后,我能够成功部署它:
21:48:06,512 INFO [Ejb3DependenciesDeployer] 遇到部署 AbstractVFSDeploymentContext@5060868{vfszip:/home/pascal/opt/jboss-5.1.0.GA/server/default/deploy/greet.jar/}
21:48:06,534 INFO [EjbDeployer] 安装 bean:ejb/#greetBean,uid19981448
21:48:06,534 具有依赖关系的信息 [EjbDeployer]:
21:48:06,534 信息 [EjbDeployer] 和用品:
21:48:06,534 信息 [EjbDeployer] jndi:greetJndi
21:48:06,624 信息 [EjbModule] 部署 greetBean
21:48:06,661 WARN [EjbModule] EJB 配置为绕过安全性。请验证这是否是有意的。 bean=greetBean 部署=vfszip:/home/pascal/opt/jboss-5.1.0.GA/server/default/deploy/greet.jar/
21:48:06,805 INFO [ProxyFactory] 将 EJB Home 'greetBean' 绑定到 jndi 'greetJndi'
该教程需要显着改进;我建议不要远离roseindia.net。