使用JPA和JTA的单元测试代码

2024-03-09

我使用2个独立的数据库,所以我必须使用JTA来处理分布式事务。所以要么两个数据库都必须提交,要么都回滚。我使用开放的 JPA 和 JTA。现在使用 junit 对代码进行单元测试吗?当我尝试运行处理分布式交易的代码时,出现以下错误。我在此网站上发布了类似的问题,有人要求我参考http://knol.google.com/k/how-to-unit-test-enterprise-java-beans-ejb# http://knol.google.com/k/how-to-unit-test-enterprise-java-beans-ejb#但我不明白那里有什么。

<openjpa-1.2.1-SNAPSHOT-r422266:686069 fatal store error> org.apache.openjpa.persistence.RollbackException: Unable to obtain a TransactionManager using null. 
    at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:523)
    at com.XYZ.cloud.admin.loadCatalog.LoadCatalogTest.populateOffering(LoadCatalogTest.java:253)
    at com.XYZ.cloud.admin.loadCatalog.LoadCatalogTest.CatalogUploadTest(LoadCatalogTest.java:160)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:599)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:44)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
    at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: <openjpa-1.2.1-SNAPSHOT-r422266:686069 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: Unable to obtain a TransactionManager using null. 
    at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4231)
    at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4196)
    at org.apache.openjpa.jdbc.sql.DB2Dictionary.newStoreException(DB2Dictionary.java:503)
    at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
    at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
    at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
    at org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:65)
    at org.apache.openjpa.util.ImplHelper.generateValue(ImplHelper.java:160)
    at org.apache.openjpa.util.ImplHelper.generateFieldValue(ImplHelper.java:144)
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignField(JDBCStoreManager.java:698)
    at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:487)
    at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:463)
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:682)
    at org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:134)
    at org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:519)
    at org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2823)
    at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:39)
    at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:959)
    at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1948)
    at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908)
    at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1826)
    at org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81)
    at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1350)
    at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:877)
    at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:512)
    ... 26 more
Caused by: java.sql.SQLException: Unable to obtain a TransactionManager using null. 
    at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.allocateSequence(TableJDBCSeq.java:419)
    at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.nextInternal(TableJDBCSeq.java:290)
    at org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:60)
    ... 44 more
Caused by: javax.transaction.NotSupportedException: Unable to obtain a TransactionManager using null. 
    at org.apache.openjpa.ee.AutomaticManagedRuntime.doNonTransactionalWork(AutomaticManagedRuntime.java:306)
    at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.allocateSequence(TableJDBCSeq.java:415)
    ... 46 more
Caused by: <openjpa-1.2.1-SNAPSHOT-r422266:686069 fatal user error> org.apache.openjpa.util.InvalidStateException: Could not perform automatic lookup of EJB container's javax.transaction.TransactionManager implementation. Please ensure that you are running the application from within an EJB 1.1 compliant EJB container, and then set the org.apache.openjpa.ManagedRuntime property to  
    at org.apache.openjpa.ee.AutomaticManagedRuntime.getTransactionManager(AutomaticManagedRuntime.java:250)
    at org.apache.openjpa.ee.AutomaticManagedRuntime.doNonTransactionalWork(AutomaticManagedRuntime.java:304)
    ... 47 more
Caused by: javax.naming.ConfigurationException: Name space accessor for the java: name space has not been set. Possible cause is that the user is specifying a java: URL name in a JNDI Context method call but is not running in a J2EE client or server environment.
    at com.XYZ.ws.naming.java.javaURLContextFactory.isNameSpaceAccessable(javaURLContextFactory.java:93)
    at com.XYZ.ws.naming.urlbase.UrlContextFactory.getObjectInstance(UrlContextFactory.java:82)
    at javax.naming.spi.NamingManager.getURLContext(NamingManager.java:655)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:434)
    at javax.naming.InitialContext.lookup(InitialContext.java:450)
    at org.apache.openjpa.ee.RegistryManagedRuntime.getTransactionManager(RegistryManagedRuntime.java:61)
    at org.apache.openjpa.ee.AutomaticManagedRuntime.getTransactionManager(AutomaticManagedRuntime.java:154)
    ... 48 more

我使用2个独立的数据库,所以我必须使用JTA来处理分布式事务。因此,要么两个数据库都必须提交,要么都必须回滚。我使用开放的 JPA 和 JTA。现在使用 junit 对代码进行单元测试吗?

如果您想在容器外部运行集成测试并使用 JTA,则必须

  1. 设置一个独立的 JTA 事务管理器,例如Atomikos http://www.atomikos.com/, Bitronix http://docs.codehaus.org/display/BTM/Home等(我会选择 Atomikos 作为其文档)
  2. 设置支持 JTA 的数据源
  3. 将整个事情包裹在一起。

我强烈建议使用 Spring 来看看Spring、JPA 和 JTA 与 Hibernate 和 JOTM http://erich.soomsam.net/2007/04/24/spring-jpa-and-jta-with-hibernate-and-jotm/(但要对其进行调整以使用 Atomikos、Bitronix)。

资源

  • Atomikos 交易要点 http://www.atomikos.com/Main/TransactionsEssentials

相关问题

  • Atomikos vs JOTM vs Bitronix vs ???? https://stackoverflow.com/questions/2978207/atomikos-vs-jotm-vs-bitronix-vs
  • 如何获取JNDI数据源进行JPA/JTA DAO集成测试? https://stackoverflow.com/questions/3008486/how-to-obtain-jndi-data-source-for-jpa-jta-dao-integration-test
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用JPA和JTA的单元测试代码 的相关文章

  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • 连接外部 Accumulo 实例和 java

    我正在尝试使用 Accumulo 连接到虚拟机 问题是 我无法将其连接到 Java 中 我可以看到 Apache 抛出的网页 但我无法让它与代码一起工作 我认为这是缺乏知识的问题而不是真正的问题 但我找不到这方面的文档 所有示例都使用 lo
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • 使用 Exec Maven 插件分叉 Java,而不使用“exec”目标

    来自文档 https www mojohaus org exec maven plugin exec exec在单独的进程中执行程序和Java程序 exec java在同一虚拟机中执行 Java 程序 我想 fork 一个 java 程序
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • 为什么在将 String 与 null 进行比较时会出现 NullPointerException?

    我的代码在以下行中出现空指针异常 if stringVariable equals null 在此语句之前 我声明了 stringVariable 并将其设置为数据库字段 在这个声明中 我试图检测该字段是否有null值 但不幸的是它坏了 有
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 如何使用双重调度来分析图形基元的交集?

    我正在分析图形基元 矩形 直线 圆形等 的交互并计算重叠 相对方向 合并等 这被引用为双重调度的一个主要示例 例如维基百科 http en wikipedia org wiki Double dispatch 自适应碰撞算法通常要求 不同的
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • 什么是 Java2D 处理程序线程?

    我创建了一个使用 Hibernate 的示例 java 应用程序 当我进行线程转储时 我观察到一个名为 Java2D Disposer 的奇怪线程 有人能告诉我该线程的功能吗 AWT 系统中的某些实体需要最终确定以释放资源 最突出的例子是j
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch
  • 设置 TreeSet 的大小

    有没有办法像数组一样对 Java 集合中的 TreeSet 进行大小限制 例如我们在数组中 anArray new int 10 数组具有固定长度 在创建数组时必须指定该长度 A TreeSet当您向其中添加元素时会自动增长 您无法设置其大

随机推荐

  • webpack-dev-server 编译但不刷新我的网络浏览器

    我正在尝试使用 webpack dev server 热加载 我的 jsx 组件 这是我正在使用的命令 bin webpack dev server host 0 0 0 0 当我保存 jsx 代码时 它会有趣地进行编译 但不会通知我的开发
  • 实体类的 GetHashCode() 的正确实现是什么?

    下面是一个实体基类的重写 Object Equals 的示例实现 应用程序中的所有其他实体都派生自该实体基类 所有实体类都有 Id 属性 它是一个可为 null 的 int 它是实体类对应的任何表的主键 public override bo
  • 如何在控制器中使用辅助函数?

    我在 app helper 文件中编写了一些函数 现在我需要在我的控制器中调用该函数 我如何在 CAKEPHP 中做到这一点 你不能 如果您的函数非常通用 可以在视图之外使用 请在中创建它们bootstrap php或在中创建自定义库 类l
  • 如何让我的Python代码运行得更快

    我正在研究循环多个 netcdf 文件 大 28G 的代码 netcdf 文件在整个域中具有多个 4D 变量 时间 东西 南北 高度 目标是循环这些文件并循环域中所有这些变量的每个位置 并将某些变量存储到一个大数组中 当文件丢失或不完整时
  • 如何从 Angular 规范触发输入 onchange

    我有一个input HTML File filed
  • 尽早设置日志记录:捕获导入期间发出的警告

    我希望所有警告都按照我希望处理日志的方式进行处理 即使这些是在导入库期间发出的 这意味着必须在导入库之前完成日志记录的配置 经过一段时间的搜索后 我认为在自定义中配置日志记录sitecustomize py可能是一个解决方案 But sit
  • 向 Citrix 会话发送消息

    我有在本地和 Citrix 会话上运行的程序 我需要以非常可靠的方式从本地运行的程序向 Citrix 会话上运行的程序发送一位消息 该客户端称为 MetaFrame 演示服务器客户端 到目前为止我想到了以下几种方法 使用 TCP IP 然而
  • sql server中日期时间的内部表示是什么?

    SQL Server 中存储的日期时间值的基础数据结构是什么 2000 和 2005 如果不同 即精确到字节表示 据推测 当您选择日期时间列时获得的默认表示形式是特定于区域性的值 可能会发生变化 也就是说 一些我们看不到的底层结构被格式化为
  • 如何使用 GetAsyncEnumerator 中止正在运行的 EF Core 查询?

    我正在使用 EF Core 5 0 并有以下代码 public async IAsyncEnumerable
  • 在哪里可以找到图片的 Instagram 媒体 ID

    我正在寻找MediaID已上传的 Instagram 图片 它应该看起来像 1234567894561231236 33215652 我发现最后一组整数是usersID 例如 这是直接图像的链接 但是我看不到mediaID以正确的格式 ht
  • ES6 中检查构造函数是否继承另一个构造函数

    我遇到一种情况 我需要检查构造函数 X 的原型链中是否有另一个构造函数 Y 或者是 Y 本身 最快的方法可能是 new X instanceof Y 在这种情况下 这不是一个选项 因为如果在没有有效参数的情况下实例化 相关构造函数可能会抛出
  • 如何使用谷歌性能工具

    我刚刚开始使用谷歌性能工具 google perftools and libgoogle perftools4ubuntu 中的软件包 我发誓我在谷歌上搜索了大约一天 但没有找到答案 问题是我没有通过 CPU 分析获得所有函数的结果 这是我
  • 如何创建一个动态导航栏,当您到达某个位置时它会跟随您

    我想创建一个类似于此网站的导航栏 http www mysupermarket co uk shelves top offers in asda html http www mysupermarket co uk shelves top o
  • 始终使用 Azure Key Vault SSMS 清除错误进行加密

    I m trying to setup a new Always Encrypted database using Azure Key Vault I have previously had this working In the SSMS
  • Hibernate慢sql未记录

    记录用 Hikari 包装的 sql 语句时出现问题 我有休眠属性 hibernate session events log LOG QUERIES SLOWER THAN MS 50 logging level org hibernate
  • Android ListView 与 SQLite

    我想刷新列表视图项目 这些项目是从 SQLite 数据库填充的 我的代码如下 public class Weeve extends Activity private String lv arr protected ListView CVie
  • 使用 google 登录进行身份验证时出现错误 12501

    我在用着谷歌登录服务 https developers google com identity sign in android start对使用我的应用程序的用户进行身份验证 当我刚刚请求电子邮件信息时 我得到了它的工作 GoogleSig
  • 如何检索实现自定义接口的所有类?

    我想要获得所有实现的类IFeature界面 Java Refelctions 似乎是一个可能的解决方案 但它并没有按照我想要的方式工作 IFeature feature new Landing Class c cls System out
  • 使用多个 jquery-ui 版本

    我们有两个使用 jQuery UI 的网站 其中一个网站包含另一个网站的一些内容 这些部分是基于 Jquery UI Accordion 构建的 但我无法加载两个版本的 UI 一个是 1 8 11 的自定义版本 另一个是完整版本 完整版本不
  • 使用JPA和JTA的单元测试代码

    我使用2个独立的数据库 所以我必须使用JTA来处理分布式事务 所以要么两个数据库都必须提交 要么都回滚 我使用开放的 JPA 和 JTA 现在使用 junit 对代码进行单元测试吗 当我尝试运行处理分布式交易的代码时 出现以下错误 我在此网