javax.naming.NameNotFoundException

sja*_*ain 14 java jboss jndi java-ee ejb-3.0

我正在使用JBoss5 Container运行ejb的示例.我在这里使用一个例子 (第一部分).
在示例中,我在JBoss中部署了bean,在Tomcat中部署了一个应用程序(从JBoss访问bean).我在tomcat服务器 javax.naming.NameNotFoundException的屏幕上收到错误
:greetJndi没有绑定

(greetJndi是jboss.xml文件中的jndi-name)是否有任何特定的目录结构要在JBoss中部署?

谢谢

Pas*_*ent 27

我收到错误(...)javax.naming.NameNotFoundException:greetJndi没有绑定

这意味着没有任何东西绑定到jndi名称greetJndi,很可能是因为本教程质量极低(检查服务器日志)导致部署问题.我会回来的.

是否有任何特定的目录结构要在JBoss中部署?

该内部结构ejb-jar应该是这样的(使用不良的命名约定和默认包,如上面提到的链接):

.
??? greetBean.java
??? greetHome.java
??? greetRemote.java
??? META-INF
    ??? ejb-jar.xml
    ??? jboss.xml

但正如已经提到的,本教程充满了错误:

  • (!)中有一个额外的字符(<enterprise-beans>]< - HERE ejb-jar.xml)
  • PUBLICejb-jar.xmljboss.xml(!!)之后缺少一个空间
  • 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>
Run Code Online (Sandbox Code Playgroud)

而且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>
Run Code Online (Sandbox Code Playgroud)

在完成这些更改并重新打包ejb-jar后,我能够成功部署它:

21:48:06,512 INFO  [Ejb3DependenciesDeployer] Encountered deployment AbstractVFSDeploymentContext@5060868{vfszip:/home/pascal/opt/jboss-5.1.0.GA/server/default/deploy/greet.jar/}
21:48:06,534 INFO  [EjbDeployer] installing bean: ejb/#greetBean,uid19981448
21:48:06,534 INFO  [EjbDeployer]   with dependencies:
21:48:06,534 INFO  [EjbDeployer]   and supplies:
21:48:06,534 INFO  [EjbDeployer]    jndi:greetJndi
21:48:06,624 INFO  [EjbModule] Deploying greetBean
21:48:06,661 WARN  [EjbModule] EJB configured to bypass security. Please verify if this is intended. Bean=greetBean Deployment=vfszip:/home/pascal/opt/jboss-5.1.0.GA/server/default/deploy/greet.jar/
21:48:06,805 INFO  [ProxyFactory] Bound EJB Home 'greetBean' to jndi 'greetJndi'

该教程需要重大改进; 我建议远离roseindia.net.