[英]javax.naming.NameNotFoundException
我收到錯誤(...)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
(!)中有一個額外的字符( <enterprise-beans>]
< - HERE) 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] 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。
該錯誤意味着您正在嘗試查找未附加到任何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”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.