Бин сущности не связан при использовании как EJB 2, так и JPA - PullRequest
2 голосов
/ 21 декабря 2010

Я использую JPA с реализацией Hibernate и EJB 2.1 в моем проекте (проект Spring + Hibernate). После того, как я развернул свой проект на JBoss 6.0 CR1, журнал сервера сказал:

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/EBMyBean@31242541
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

В консоли JMX JBoss я ничего не вижу в разделе Ejb 2.1 Module. Мой EAR-файл содержит файл jar и файл war. Все ejbs и единицы сохраняемости находятся в файле jar.

В папке META-INF моего jar-файла находятся файлы 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 без 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 я вижу некоторые объекты jndi в разделе модуля Ejb 2.1, и сервер запускается в порядке.

Кажется, компоненты в моем первом проекте не привязаны к объектам jndi. Но как я могу это исправить?

1 Ответ

1 голос
/ 30 декабря 2010

Я отвечу на свой вопрос.

Очевидно, что сущностные бины не привязаны к объектам jndi.Причина в том, что имя, предоставленное по умолчанию, не может быть вставлено в пулы jndi.В данном случае это local / EBMyBean @ 31242541.Если я укажу свойство local-jndi-name в файле jboss.xml, я смогу вставить объект в пул jndi.

Я использую что-то вроде этого:Имя jndi - ejb / EBMyBean, и я могу найти это в консоли jmx.Это проверено в JBoss 6.0 Final.

...