是否可以在 WAS Liberty Profile 中使用 Hibernate 5 作为 JPA 引擎

2023-12-04

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

有人使用带有 Liberty Profile 的 Hibernate 5.x.x 吗?您在 server.xml 的 dataSource 库中包含哪些 jar?

thanks


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

  <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 服务器使用,并且我已经探索了这些属性的各种组合,但没有为 jta-data-source 带来成功的结果。我认为 Hibernate 实现缺乏对自由的认识,这是真正应该添加的东西,(参见HHH-10388如果您认为它有价值,请投票给它),尽管在没有它的情况下,您可以通过编写自己的 Hibernate 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);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在 WAS Liberty Profile 中使用 Hibernate 5 作为 JPA 引擎 的相关文章

随机推荐

  • Lua:减去十进制数不会返回正确的精度

    我使用的是Lua 5 1 print 10 08 10 07 上面不是打印 0 01 而是打印 0 0099999999999998 知道如何通过这个减法得到 0 01 吗 减法得到 0 01 它只是重复小数的形式 精度略有损失 Lua使用
  • urllib2 和 httplib 线程安全吗?

    我正在寻找有关线程安全的信息urllib2 and httplib 官方文档 http docs python org library urllib2 html and http docs python org library httpli
  • 奏鸣曲和单页

    我是奏鸣曲的新手 我有一个带有实体等的 ContentTestAdmin 它只能包含 4 条记录 记录1 记录2 记录3 记录4 我已经禁用了创建和删除功能 public function configureRoutes RouteColl
  • SQL 填充缺失日期

    我认为这是一个常见的数据仓库问题 我一直在尝试做的是创建一个日期之间没有间隙的 SQL 查询 事实表只记录被测量并记录到表中的记录 本案涉及海上船舶的注册石油生产 有时 某些船上没有任何作品 这是我的简单数据仓库 DimVessel Dim
  • 在 UITextView 上以编程方式禁用 iOS8 Quicktype 键盘

    我正在尝试更新 iOS8 的应用程序 该应用程序具有聊天界面 但新的 Quicktype 键盘隐藏了文本视图 因此我想以编程方式或在界面生成器中将其关闭 是否有可能以某种方式或只有用户可以在设备设置中将其关闭 我知道有一个问题 答案可以解决
  • CodeIgniter 空白页

    这里是n00b 在搜索论坛后 我还没有遇到这个问题 因为我正在经历它 我有一个 CI 站点 直到大约三天前都工作正常 我的问题如下 单击按钮时 页面正确加载 按 Enter 键 CI 死亡空白页加载 例如 当我登录时 在登录过程运行后 它必
  • 在 servlet 外部访问 ServletContext

    我想知道是否有人可以就 Java webapp 问题提供建议 我有一个设置的标准 Java 类 它具有设置和获取属性文件值的方法 这些方法在系统范围内使用 并由 servlet 和非 servlet 类方法等调用 但我想做的是使用 Serv
  • 在 Ubuntu 上重置 mysql root 密码

    如果我有 root 访问权限并且很快关闭数据库不是问题 有没有一种简单的方法可以在 Ubuntu 上设置 mysql root 密码 如果您没有很多表 这应该在 10 秒内运行 pass MyNewPass echo ALTER USER
  • jqPlot 步骤图不按系列顺序绘制

    我需要使用 jQPlot 构建步骤图 我的 X 轴是日期 时间 Y 轴是数字 做这个原型一切都运行良好 Scripts jqplot jquery jqplot min css rel stylesheet media screen gt
  • 如何将基数 10 转换为基数 X? [复制]

    这个问题在这里已经有答案了 我想编写一个程序 要求用户输入一个以 10 为基数的数字 并输入他们想要转换成的基数 在不让我的程序变得极其复杂的情况下 我可以转换到的最高基数是多少 我正在考虑基数 9 因为在 10 已经给出 之后 基数开始使
  • 指向子类的指针上的删除是否会调用基类析构函数?

    我有一个class A它对其字段之一使用堆内存分配 类 A 被实例化并作为指针字段存储在另一个类中 class B 当我完成 B 类的对象后 我调用delete 我认为它调用了析构函数 但这也调用了 A 类的析构函数吗 Edit 从答案中
  • 从异步函数获取当前方法名称?

    无论如何可以从异步函数内部获取当前方法名称吗 我试过了 System Reflection MethodInfo GetCurrentMethod 我尝试使用 StackTrace 和 StrackFrame 如下 StackTrace s
  • 谷歌脚本,下载带有用户输入的文件

    我编写了以下 Google Apps 脚本 该脚本记录文件名并生成文件的直接下载链接 到目前为止 它工作得很好 function SearchFiles var searchFor title contains Letter var nam
  • org.hsqldb.HsqlException:用户缺乏权限或未找到对象:DATABASECHANGELOGLOCK

    怎么会发生这种事呢 liquibase 不是应该为自己创建这个表吗 这是为单元测试创 建的内存数据库 public void setUp String contexts try ResourceAccessor resourceAccess
  • 如何在 win32print 中使用 SetJob?

    我想使用 Python 清除或删除打印作业 但我怎样才能得到JobID win32print SetJob hPrinter JobID Level JobInfo Command 我怎样才能运行这段代码 jobs for p in win
  • 尝试使用 jQuery 访问 Instagram API

    我正在尝试使用 Instagram API 并在 do while 循环中发出 AJAX 请求 直到 next url 为 null 我想要这段代码做的就是通过发出连续的请求来获取所有关注者 直到完成为止 这段代码有什么问题 当我删除 do
  • 如何在 Java Swing 中的 JLabel 中设置行间距/高度?

    我有以下 JLabel 代码 JLabel someJLabel new JLabel first line br second line someJLabel setFont new Font Arial Font PLAIN 16 我想
  • 将 2 个数组映射到 1 个数组对象

    我有 2 个独立的数组 但它们都有相同的长度 如何将它们合并到一个数组对象中 以便以后轻松填充 例如 1 2 3 4 5 a b c d e 我希望我能有类似的东西 index 1 value a index 2 value b 我试过了
  • 无法在 T 中访问类 Object 中的 Scala 方法克隆 不允许访问受保护的方法克隆,因为

    我在 Scala 中的克隆方面遇到了麻烦 是否可以克隆任意类型 T 的对象 像这样的东西 import collection immutable Stack object Tester extends App trait Grand T l
  • 是否可以在 WAS Liberty Profile 中使用 Hibernate 5 作为 JPA 引擎

    我在 Liberty 项目中使用 4 3 11 但版本 5 中解决了 Hibernate 的一个错误 我尝试升级 但遇到了不同的异常 有人使用带有 Liberty Profile 的 Hibernate 5 x x 吗 您在 server