gpt4 book ai didi

java - 通过 JNDI JBoss 6 hibernate - 正确完成了吗?

转载 作者:行者123 更新时间:2023-11-30 09:49:17 25 4
gpt4 key购买 nike

我已经按照很多文章在 JBoss 6.0.0.Final 中通过 JNDI 设置了 hibernate ,但遇到了一些问题,但解决了它并且可以正常工作,但问题是,我做对了吗?对于一个,我没有指定事务查找或工厂类。

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 文件,所以这是我在 servlet 中用来测试的一些代码:

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 存档。

谢谢。

最佳答案

我相信您没有正确地将 Hibernate 与 JBoss JTA 一起使用,但 Hibernate 可能会自动使用现有的 JTA 事务。为了确定,尝试为 Hibernate 增加日志记录的详细程度(仅用于 org.hibernate.transaction 应该足够了)并查找如下条目:

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 到 cfg.xml 中的 java:comp/UserTransaction

还有一件事需要注意,HAR 部署在 JPA 出现之前的日子里很有用,当时还没有以 AS 管理的方式使用 Hibernate 的标准方法。 HAR 部署可能会在 JBoss AS 7 中被弃用。您应该根据您的项目自行决定,但我建议考虑长期迁移到 JPA。

关于java - 通过 JNDI JBoss 6 hibernate - 正确完成了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5880883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com