我用4.3.11我的自由的项目,但有我试图在升级版本5解决了Hibernate的一个错误,但我得到不同的异常。
任何人是使用Hibernate的5.xx与自由个人资料? 什么罐子你包括在server.xml中的数据源库?
谢谢
我用4.3.11我的自由的项目,但有我试图在升级版本5解决了Hibernate的一个错误,但我得到不同的异常。
任何人是使用Hibernate的5.xx与自由个人资料? 什么罐子你包括在server.xml中的数据源库?
谢谢
我已经能够得到休眠5.x中至少部分地在自由工作,如果我有这些JAR:
<library id="hibernate">
<file name="${server.config.dir}/hibernate/antlr-2.7.7.jar"/>
<file name="${server.config.dir}/hibernate/classmate-1.3.0.jar"/>
<file name="${server.config.dir}/hibernate/dom4j-1.6.1.jar"/>
<file name="${server.config.dir}/hibernate/hibernate-commons-annotations-5.0.1.Final.jar"/>
<file name="${server.config.dir}/hibernate/hibernate-core-5.2.6.Final.jar"/>
<file name="${server.config.dir}/hibernate/javassist-3.20.0-GA.jar"/>
<file name="${server.config.dir}/hibernate/jboss-logging-3.3.0.Final.jar"/>
</library>
<application location="myApp.war">
<classloader commonLibraryRef="hibernate"/>
</application>
我说,部分工作的原因是,如果使用非JTA的数据源,但试图使用JTA数据源时的伟大工程,Hibernate可以失败,试图找到供应商特定的API暂停当前事务。 休眠确实有一些属性,你可以设置来告诉它,它的正在使用WebSphere服务器,和我探讨了那些的各种组合而不考虑JTA数据源成功的结果。 我认为Hibernate实现是缺乏其自由的意识,这恐怕是真的应该被添加,(见HHH-10388并投票支持它,如果你会发现有价值的),尽管其没有,你可以得到它的写作工作自己的实现休眠JtaPlatform的委托给com.ibm.tx.jta.TransactionManagerFactory并指定其作为持久性能。
例如在persistence.xml中,
<persistence-unit ...
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
...
<properties>
<property name="hibernate.transaction.jta.platform"
value="example.WebSphereLibertyJtaPlatform" />
</properties>
</persistence-unit>
示例实现,
package example;
import com.ibm.tx.jta.TransactionManagerFactory;
import javax.naming.*;
import javax.transaction.*;
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
public class WebSphereLibertyJtaPlatform implements JtaPlatform {
public boolean canRegisterSynchronization() {
try {
return getCurrentStatus() == Status.STATUS_ACTIVE;
} catch (SystemException x) {
throw new RuntimeException(x);
}
}
public int getCurrentStatus() throws SystemException {
return retrieveTransactionManager().getStatus();
}
public Object getTransactionIdentifier(Transaction transaction) {
return transaction;
}
public void registerSynchronization(Synchronization synchronization) {
try {
retrieveTransactionManager().getTransaction().registerSynchronization(synchronization);
} catch (IllegalStateException x) {
throw new RuntimeException(x);
} catch (RollbackException x) {
throw new RuntimeException(x);
} catch (SystemException x) {
throw new RuntimeException(x);
}
}
public TransactionManager retrieveTransactionManager() {
return TransactionManagerFactory.getTransactionManager();
}
public UserTransaction retrieveUserTransaction() {
try {
return InitialContext.doLookup("java:comp/UserTransaction");
} catch (NamingException x) {
throw new RuntimeException(x);
}
}
}
即使我结束了类似的情况。 异常信息是:com.ibm.ws.container.service.state.StateChangeException:javax.xml.stream.FactoryConfigurationError:提供javax.xml.stream.XMLEventFactory无法实例:java.util.ServiceConfigurationError:javax.xml。 stream.XMLEventFactory:提供com.ibm.xml.xlxp2.api.stax.XMLEventFactoryImpl未找到
你看到过任何破发?
我知道这个线程是有点老了,但比较自由简介17.0.0.2和17.0.0.3我注意到他们已经推出了此类
com.ibm.ws.jpa.hibernate.LibertyJtaPlatform
而现在,当我启动应用程序服务器,容器经过时某些属性调用
HibernatePersistenceProvider.createContainerEntityManagerFactory(PersistenceUnitInfo info, Map properties)
初始化休眠的数据源和你有类的实例的属性:
希望能帮助到你。
由于休眠5.2.13的,正确的交易整合已交付自由。 如果你能够升级到这个版本的Hibernate,那么它将被检测到,并自动应用,不必指定hibernate.transaction.jta.platform
了。
看到这个Hibernate的问题更多详情: https://hibernate.atlassian.net/browse/HHH-11571