2010-12-21 44 views
2

我在項目(Spring + Hibernate項目)中使用JPA與Hibernate實現和EJB 2.1。我部署到JBoss 6.0 CR1我的項目後,服務器日誌中說:使用EJB 2和JPA時未綁定的實體Bean

15:34:20,866 INFO [EjbDeployer] installing bean: ejb/ejbproject.jar#EBMyBean,uid27484928 
15:34:20,867 INFO [EjbDeployer] with dependencies: 
15:34:20,870 INFO [EjbDeployer] and supplies: 
15:34:20,871 INFO [EjbDeployer] jndi:EBMyBean 
15:34:20,873 INFO [EjbDeployer] jndi:local/[email protected] 
15:34:21,038 INFO [PersistenceUnitDeployment] Starting persistence unit persistence.unit:unitName=myproject.ear/ejbproject.jar#persistenceUnit 
15:34:21,196 INFO [Version] Hibernate Commons Annotations 3.2.0.Final 

服務器未正常啓動,並在年底就拋出一個異常說:

Caused by: javax.naming.NameNotFoundException: EBMyBean not bound 

在JBoss中的JMX控制檯我在Ejb 2.1模塊部分看不到任何東西。 我的EAR文件包含一個jar文件和一個war文件。所有ejbs和持久性單元都在jar文件中。

在我的jar文件的META-INF文件夾中有ejb-jar.xml和persistence.xml文件,但我沒有指定jboss.xml。我在該文件夾外有一個beanRefContext.xml以及一些bean定義文件。

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> 

    <!--========================================--> 
    <!-- EBMyBean        --> 
    <!--========================================--> 
    <entity> 
     <description></description> 
     <ejb-name>EBMyBean</ejb-name> 
     <local-home>com.ejb.EBMyBeanHome</local-home> 
     <local>com.ejb.EBMyBean</local> 
     <ejb-class>com.ejb.EBMyBean</ejb-class> 
          <persistence-type>Bean</persistence-type> 
    <prim-key-class>java.lang.Integer</prim-key-class> 
     <reentrant>False</reentrant> 
    </entity> 
<enterprise-beans> 
</ejb-jar> 

我也做了一個簡單的EJB 2.1會話bean的測試項目沒有Hibernate和部署它。服務器日誌,但是,不同的是:

15:30:46,658 INFO [EjbDeployer] installing bean: ejb/#HiEJB,uid14009391 
15:30:46,658 INFO [EjbDeployer] with dependencies: 
15:30:46,659 INFO [EjbDeployer] and supplies: 
15:30:46,660 INFO [EjbDeployer] jndi:HiEJB 
15:30:46,660 INFO [EjbDeployer] jndi:HiEJB/com.test.HiRemote 
15:30:46,697 INFO [EjbModule] Deploying HiEJB 
15:30:46,904 INFO [ProxyFactory] Bound EJB Home 'HiEJB' to jndi 'HiEJB' 

在JMX控制檯,我可以看到在EJB 2.1模塊部分的一些JNDI對象,並在服務器啓動確定。

看來我的第一個項目中的bean沒有綁定到jndi對象。但我該如何解決這個問題?

+0

您的applicationContext.xml或jboss ejb部署描述符似乎有問題。你能顯示這些文件嗎? – 2010-12-21 12:01:17

+0

您的EAR結構如何?你的EJB是否在JAR中,而你的EJB是否在另一個JAR中,或者它們是否在同一個jar中? – jpkrohling 2010-12-21 14:20:28

回答

1

我會回答我自己的問題。

很明顯,實體bean沒有綁定到jndi對象。原因是默認提供的名字不能被插入到jndi池中。在這種情況下,它是本地/ EBMyBean @ 31242541。如果我在jboss.xml文件中指定了local-jndi-name屬性,我可以將該對象插入到jndi池中。

我用的是這樣的:

<!DOCTYPE jboss PUBLIC 
     "-//JBoss//DTD JBOSS 4.0//EN" 
     "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd"> 
    <jboss> 
    <enterprise-beans> 
      <entity> 
       <ejb-name>EBMyBean</ejb-name> 
       <local-jndi-name>ejb/EBMyBean</local-jndi-name> 
     </entity> 
    </enterprise-beans> 
    </jboss> 

那麼JNDI名稱是EJB/EBMyBean,我能找到的JMX控制檯。這在JBoss 6.0 Final中進行了測試。