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.xml
和jboss.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”。