首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以在WAS Liberty配置文件中使用Hibernate 5作为JPA引擎

是否可以在WAS Liberty配置文件中使用Hibernate 5作为JPA引擎
EN

Stack Overflow用户
提问于 2017-01-26 19:07:55
回答 4查看 2.2K关注 0票数 1

我在Liberty项目中使用4.3.11,但Hibernate在版本5中解决了一个错误。我尝试过升级,但得到了不同的异常。

有人在使用带有Liberty配置文件的Hibernate 5.x.x吗?您在server.xml的dataSource库中包含了哪些jars?

谢谢

EN

回答 4

Stack Overflow用户

发布于 2017-01-26 22:31:11

如果我包括这些JAR,我已经能够让Hibernate 5.x至少部分地在Liberty中工作:

代码语言:javascript
运行
复制
  <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-data-source,它会工作得很好,但当尝试使用jta-data-source时,Hibernate可能无法找到特定于供应商的API来挂起当前事务。Hibernate确实有一些属性,您可以设置这些属性来告诉它WebSphere服务器正在使用Hibernate,我已经研究了这些属性的各种组合,但对于jta-data-source没有成功的结果。我认为Hibernate实现缺乏对自由的认识,这是真正应该添加的东西(请参阅HHH-10388,如果您认为它有价值,请投票给它),尽管在它不存在的情况下,您可以通过编写自己的Hibernate JtaPlatform实现来委托com.ibm.tx.jta.TransactionManagerFactory并将其指定为持久性属性,从而使其工作。

例如在persistence.xml中,

代码语言:javascript
运行
复制
  <persistence-unit ...
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    ...
    <properties>
      <property name="hibernate.transaction.jta.platform" 
                value="example.WebSphereLibertyJtaPlatform" />
    </properties>
  </persistence-unit>

示例实现,

代码语言:javascript
运行
复制
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);
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-04-09 21:25:03

从Hibernate 5.2.13开始,为Liberty提供了正确的事务集成。如果您能够升级到此版本的Hibernate,那么它将被自动检测和应用,而不再需要指定hibernate.transaction.jta.platform

有关更多详细信息,请参阅Hibernate问题:https://hibernate.atlassian.net/browse/HHH-11571

票数 3
EN

Stack Overflow用户

发布于 2017-02-25 01:01:53

就连我也遇到了类似的情况。异常消息为: com.ibm.ws.container.service.state.StateChangeException: com.ibm.xml.xlxp2.api.stax.XMLEventFactoryImpl : Provider javax.xml.stream.FactoryConfigurationError:未能实例化Provider javax.xml.stream.XMLEventFactory: java.util.ServiceConfigurationError: javax.xml.stream.XMLEventFactory :Provider was found

你看到什么突破了吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41872159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档