Используйте проект Hibernate с EJB - PullRequest
0 голосов
/ 03 февраля 2012

Моя настройка:

  1. Библиотека, использующая hibernate для работы с базой данных.(ETM)
  2. EJB-компонент с локальным интерфейсом для работы с библиотекой.(ETMEJB)
  3. Веб-приложение с сервлетом, использующим EJB.(ETMWeb)
  4. Интерфейсы для EJB (локальный элемент списка) ETMEJBClient
  5. Все это находится внутри EAR.ETMEAR

ETMEAR:

  • - ETM
  • - ETMEJB
  • - ETMEJBClient
  • --ETMWeb

Когда я использую библиотеку (ETM) из обычного приложения Java, она работает нормально.

Когда я пытаюсь развернуть все это (JBoss 7.1), я получаю: http://pastebin.com/gDmiFfhL

Я думаю, что это сводится к следующему:

Caused by: org.hibernate.HibernateException: Connection cannot be null 
when 'hibernate.dialect' not set

Я думаю, hibernate.cfg.xml не найден.Куда мне его положить?

Я уже положил копию в каждый корень исходного кода каждой части приложения (это глупо, но я в отчаянии), и это не помогает.

Может бытьэто что-то еще?

Спасибо!

Дайте мне знать, если я смогу предоставить больше информации.

РЕДАКТИРОВАТЬ: Мой hibernate.cfg.xml (работает для доступа к библиотеке из Javaприложение): РЕДАКТИРОВАТЬ @ouapdouap: раздел переформатированного кода

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
    <!-- We're using MySQL database so the dialect needs to MySQL as well-->
    <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>

    <!-- Database connection settings -->
    <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
    <property name="connection.url">jdbc:hsqldb:/data/Documents/etm</property>
    <property name="connection.username">sa</property>
    <property name="connection.password"></property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>

    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

  <!-- This will drop our existing database and re-create a new one.
      Existing data will be deleted! -->
  <property name="hbm2ddl.auto">create</property>        

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Names the annotated entity class -->
    <mapping class="com.leonty.etm.domain.Contract"/>    
    <mapping class="com.leonty.etm.domain.Employee"/>  
<mapping class="com.leonty.etm.domain.Job"/>  
<mapping class="com.leonty.etm.domain.Time"/>  

1 Ответ

0 голосов
/ 04 февраля 2012

Я перенес всю свою конфигурацию в файл persistence.xml

Я поместил его в: ETMEJB / ejbModule / META-INF / persistence.xml

Так что теперь мое ухо развертывается.

Дело в том, что когда я пытаюсь использовать свои объекты гибернации из EJB, он читает persistence.xml не из META-INF EJB, а из META-INF библиотеки ETM, поэтому я должен поместить один и тот же файл в 2 директории:

ETMEJB / ejbModule / META-INF / persistence.xml - поэтому развертывание успешно выполняется ETM / src / META-INF / persistence.xml - используется, когда приложение работает

Когда я впервые пытаюсь использовать мой спящий режимОбъект путем создания EntityManagerFactory я получаю следующее исключение:

    20:50:47,905 ERROR [SchemaExport] schema export unsuccessful
java.sql.SQLException: You cannot set autocommit during a managed transaction!
    at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.setJdbcAutoCommit(BaseWrapperManagedConnection.java:582)
...