簡體   English   中英

javax.naming.NameNotFoundException

[英]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 (!)中有一個額外的字符( <enterprise-beans>] < - HERE)
  • ejb-jar.xmljboss.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM