使用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的单元测试代码 的相关文章

随机推荐

  • 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 对代码进行单元测试吗 当我尝试运行处理分布式交易的代码时 出现以下错误 我在此网