javax.naming.NameNotFoundException

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

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

谢谢

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

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

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

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

 。
 ├──greetBean.java
 ├──greetHome.java
 ├──greetRemote.java
 └──META-INF
     ├──ejb-jar.xml
     └──jboss.xml

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

  • ejb-jar.xml (!)中有一个额外的字符( ] < - HERE)
  • ejb-jar.xmljboss.xml (!!)中的PUBLIC之后缺少空格
  • jboss.xml不正确,它应该包含一个session元素而不是entity (!!!)

这是ejb-jar.xml的“固定”版本:

      greetBean greetHome greetRemote greetBean Stateless Container    

jboss.xml

      greetBean greetJndi    

在完成这些更改并重新打包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带有依赖关系的INFO [EjbDeployer]:
 21:48:06,534 INFO [EjbDeployer]和用品:
 21:48:06,534 INFO [EjbDeployer] jndi:greetJndi
 21:48:06,624 INFO [EjbModule]部署greetBean
 21:48:06,661 WARN [EjbModule] EJB配置为绕过安全性。 请确认是否有意。  Bean = greetBean Deployment = vfszip:/home/pascal/opt/jboss-5.1.0.GA/server/default/deploy/greet.jar/
 21:48:06,805 INFO [ProxyFactory]将EJB主页'greetBean'绑定到jndi'greetJndi'

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

该错误意味着您正在尝试查找未附加到任何EJB组件的JNDI名称 – 具有该名称的组件不存在。

就dir结构而言:您必须使用EJB组件创建JAR文件。 据我所知,您希望使用EJB 2.X组件(至少链接的示例表明),因此JAR文件的结构应该是:

/com/mypackage/MyEJB.class /com/mypackage/MyEJBInterface.class / com / mypackage / etc … etc … java classes /META-INF/ejb-jar.xml /META-INF/jboss.xml

JAR文件或多或少是ZIP文件,文件扩展名已从ZIP更改为JAR。

BTW。 如果您使用JBoss 5,则可以使用EJB 3.0,它更易于配置。 最简单的组件是

 @Stateless(mappedName="MyComponentName") @Remote(MyEJBInterface.class) public class MyEJB implements MyEJBInterface{ public void bussinesMethod(){ } } 

不需要ejb-jar.xml,jboss.xml,只需要带有MyEJB和MyEJBInterface编译类的EJB JAR。

现在在您的客户端代码中,您需要查找“MyComponentName”。