Hibernate через JNDI JBoss 6 - правильно сделано? - PullRequest
2 голосов
/ 04 мая 2011

Я установил hibernate через JNDI в JBoss 6.0.0. Наконец, следуя большому количеству статей, у меня возникли некоторые проблемы, но он был отсортирован, и он работает, но вопрос в том, правильно ли я это сделал?для одного я не указал поиск транзакции или класс фабрики.

файл service-hibernate.xml:

<hibernate-configuration xmlns="urn:jboss:hibernate-deployer:1.0">
<session-factory name="java:/hibernate/SessionFactory" bean="jboss.test.har:service=Hibernate, testcase=TimersUnitTestCase">
    <property name="datasourceName">java:jdbc/MyDataSourceDS</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="show_sql">true</property>
    <property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
    <property name="current_session_context_class">jta</property>
    <depends>jboss:service=Naming</depends>
    <depends>jboss:service=TransactionManager</depends>
</session-factory>

Очевидно, у меня есть сущности и .hbm.xmlфайлы, так что вот код, который я использую в сервлете для тестирования:

UserTransaction utx = (UserTransaction)new InitialContext().lookup("UserTransaction");
utx.begin();
InitialContext ctx = new InitialContext();
SessionFactory sf = (SessionFactory)ctx.lookup("java:/hibernate/SessionFactory");
Session session = sf.getCurrentSession();
List<TblSettings> settings = session.createQuery("FROM TblSettings").list();
utx.commit();

Приведенный выше код работает, но я делаю это так, как было задумано?

Кстати, я использую плагин maven HAR для пакета моих сущностей + .hbm.xml и service-hibernate.xml в качестве архива HAR.

Спасибо.

1 Ответ

2 голосов
/ 05 мая 2011

Я считаю, что вы не правильно используете Hibernate с JBoss JTA, но Hibernate может автоматически потреблять существующие транзакции JTA. Чтобы убедиться в этом, попробуйте увеличить подробность ведения журнала (достаточно только для org.hibernate.transaction) для Hibernate и найдите записи, подобные этой:

16:27:11,518  INFO TransactionFactoryFactory:58 - Using default transaction strategy (direct JDBC transactions)
16:27:11,520  INFO TransactionManagerLookupFactory:79 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)

Если вы видите записи, подобные приведенным выше, вам нужно явно установить свойство transaction.factory_class в org.hibernate.transaction.JTATransactionFactory и свойство jta.UserTransaction в java:comp/UserTransaction в вашем файле cfg.xml.

Еще одна вещь, на которую следует обратить внимание, это то, что развертывания HAR были полезны в дни до JPA, когда не было стандартного способа использования Hibernate под управлением AS. Внедрение HAR, вероятно, будет устаревшим в JBoss AS 7. Вы должны решить сами, основываясь на своем проекте, но я бы рекомендовал рассмотреть переход на JPA на длительный срок.

...