javax.naming.NameNotFoundException
Posted
技术标签:
【中文标题】javax.naming.NameNotFoundException【英文标题】: 【发布时间】:2011-04-24 03:14:33 【问题描述】:我正在运行一个使用 JBoss5 容器的 ejb 示例。我正在使用一个例子 from here(Part one)。 在示例中,我在 JBoss 中部署了 bean,在 Tomcat 中部署了一个应用程序(从 JBoss 访问 bean)。我在 tomcat 服务器的屏幕上收到错误 : greetJndi 未绑定
( greetJndi 是 jboss.xml 文件中的 jndi-name ) 在 JBoss 中是否有任何特定的目录结构可以部署?
谢谢
【问题讨论】:
【参考方案1】:我收到错误 (...) javax.naming.NameNotFoundException: greetJndi not bound
这意味着没有任何东西与 jndi 名称 greetJndi
绑定,很可能是因为部署问题,因为本教程的质量非常低(检查服务器日志)。我会回来的。
在 JBoss 中是否有任何特定的目录结构可以部署?
ejb-jar
的内部结构应该是这样的(使用糟糕的命名约定和默认包,如提到的链接):
但如前所述,本教程充满了错误:
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@5060868vfszip:/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。
【讨论】:
你能帮忙写这篇文章吗:***.com/questions/28996931/…【参考方案2】:该错误意味着您正在尝试查找未附加到任何 EJB 组件的 JNDI 名称 - 具有该名称的组件不存在。
就目录结构而言:您必须创建一个带有 EJB 组件的 JAR 文件。据我了解,您想使用 EJB 2.X 组件(至少链接示例表明这一点),因此 JAR 文件的结构应该是:
/com/mypackage/MyEJB.class /com/mypackage/MyEJBInterface.class /com/mypackage/etc...等...java类 /META-INF/ejb-jar.xml /META-INF/jboss.xml
JAR 文件或多或少是 ZIP 文件,文件扩展名从 ZIP 更改为 JAR。
顺便说一句。如果您使用 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”。
【讨论】:
以上是关于javax.naming.NameNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章