2010-10-12 78 views
13

我正在運行一個使用JBoss5容器的ejb示例。我正在使用示例 from here(Part one)
在這個例子中,我在JBoss中部署了bean,在Tomcat中部署了一個應用程序(用於從JBoss訪問bean)。我收到錯誤Tomcat服務器
javax.naming.NameNotFoundException的屏幕:greetJndi不綁定
javax.naming.NameNotFoundException

(greetJndi是的jboss.xml文件中的JNDI名稱) 是否有任何特定的目錄結構來在JBoss中部署?

感謝

回答

23

我收到錯誤(...)javax.naming.NameNotFoundException:greetJndi不綁定

這意味着,沒有什麼是必然的JNDI名稱greetJndi,很可能是因爲部署問題鑑於本教程的令人難以置信的低質量(檢查服務器日誌)。我會回來的。

在JBoss中是否有任何特定的目錄結構要部署?

ejb-jar的內部結構應該是這樣的(使用差命名約定和默認包如在所提到的鏈路):

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

但正如已經提到的,這教程是錯誤百出:

  • 有一個多餘的字符(<enterprise-beans>] < - HERE)在ejb-jar.xml(!)
  • 一個空間PUBLIC後失蹤的ejb-jar.xmljboss.xml(!!)
  • 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 [email protected]{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。

+0

你能幫助這篇文章:http://stackoverflow.com/questions/28996931/namenotfoundexception-when-running-simple-webapp-in-jboss-6-but-not-on-jboss-7 – 2015-03-13 05:25:16

4

的錯誤意味着您正試圖查找JNDI名稱,即不依附於任何EJB組件 - 具有該名稱的組件不存在。

就dir結構而言:您必須創建一個帶有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,只是EJB JAR與MyEJB和MyEJBInterface編譯的類。

現在在您的客戶端代碼中,您需要查找「MyComponentName」。