问题标签 [atomikos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2535 浏览

java - java连接池,多线程批处理中的最大连接数是多少?

我有一个 Java 批处理,它使用大的结果集进行选择(我使用 Spring 回调处理程序处理元素)。回调处理程序将任务放入固定线程池中以处理该行。我的 poolsize 固定在 16 个线程上。结果集包含大约 100k 个元素。所有数据库访问代码都通过 JdbcTemplate 或 Hibernate/Spring 处理,不存在手动连接管理。我曾尝试使用 Atomikos 和 Commons DBCP 作为连接池。

现在,我认为我的连接池中最多 17 个连接足以完成这批。一个用于选择,16 个用于连接池中更新某些行的线程。然而这似乎太天真了,因为我必须指定一个更大的最大池大小(没有尝试过确切的值),首先我尝试了 50 ,它在我的本地 Windows 机器上工作,但似乎不是在我们的 Unix 测试环境中已经足够了。在那里我必须指定 128 才能使其工作(同样,我什至没有尝试 50 到 128 之间的值,我直接选择了 128)。

这是正常的吗?我缺少连接池的一些基本机制吗?我发现很难调试它,因为我不知道如何查看打开的连接会发生什么。我尝试了各种 log4j 设置,但没有得到任何令人满意的结果。

编辑,附加信息:当连接池大小似乎太低时,批处理似乎挂起。如果我对进程执行 jstat,我可以看到所有线程都在等待新连接。起初我没有在 dbcp 连接池上指定 maxWait 属性,这会导致线程在新连接上无限期地等待,我注意到批处理一直挂起。所以没有释放连接。然而,这只发生在处理 +-70k 行之后,这以某种方式消除了我最初的连接泄漏预感。

edit2:我忘了提到我已经在我的任务中重写了更新部分。我在 ConcurrentLinkedQueue 中查询我的更新,我清空了 1000 个元素。所以我实际上只做了大约 100 次更新。

edit3:我正在使用 Oracle,并且正在使用并发工具。所以我有一个配置为 16 的固定池大小的执行器。我在这个执行器上提交我的任务。我不在我的任务中手动使用连接,我使用线程安全的 jdbctemplate 并询问它来自连接池的连接。我想 Spring/DBCP 处理连接/线程问题。

0 投票
1 回答
2544 浏览

jakarta-ee - 事务提交抛出异常:事务设置为仅回滚

我的应用程序试图在 DB2 服务器上的 2 个数据库上执行分布式事务,应用程序服务器是 websphere 6.1,并使用 Atomikos 作为 TM。

UserTranaction.commit() 失败,出现以下异常: javax.transaction.RollbackException: Transaction set to rollback only 完整的堆栈跟踪是:

我没有将事务设置为仅在代码中回滚。我猜它是默认设置的。我想更改它而不是将其设置为 rollbackOnly。另外,我在事务之后明确调用 commit() 。为什么我仍然收到此异常?我如何确保事务被提交?

0 投票
1 回答
6675 浏览

spring - 使用 Atomikos 的两阶段提交 (2PC) 配置

我正在创建一个示例应用程序来测试两阶段提交 (2PC)。我从互联网上获取了这里使用的代码位。我使用 Spring、Hibernate 和 Atomikos 以及 MySQL 作为后端。我正在使用两个数据库并故意对第二个数据库的调用无法检查第一个数据库调用是否回滚。可悲的是,它似乎不起作用。有人可以指出一些带有一些示例代码的链接吗?

以下是我的配置:
Hibernate 会话工厂:

数据源配置:

Spring JTA 配置:

我有两个 DAOImpl,我将上面定义的两个 sessionFactories 注入其中。以下是来自 Java 代码的调用:

任何指针都会有很大帮助。

谢谢

0 投票
2 回答
1858 浏览

spring - Spring、Atomikos、Tibco EMS 5.1 集成问题

我正在尝试在我的 Spring 应用程序中配置Atomikos 。我在用:

  • Atomikos 3.7.1 (TransactionsEssentials)
  • 春天 3.0.2
  • Tibco EMS 5.1

有人可以给我使用 JNDI for JMS 的连接工厂的配置详细信息以及有关 Tibco EMS 配置的详细信息吗?

我试过以下方法:

但是得到这个错误:

0 投票
2 回答
3262 浏览

spring - Spring Data JPA 无法调用 JtaTransactionManager

我正在使用 Spring Data JPA (SDJ),在我的集成测试期间,我遇到了一个奇怪的情况——我可能错误配置了一些东西,但我看不到那可能是什么。

PlatformTransactionManager简而言之 -一旦在存储库接口上声明了任何类型的方法(即扩展的方法) ,SDJ 似乎根本无法调用 Spring 的实现JpaRepository<T, ID>。我已经将这种行为深入到一个非常平庸的原因 - 在这种情况下,JtaTransactionManager's setter 根本不会调用,但我无法弄清楚原因。

如果接口缺少任何方法声明 - 一切都按原样工作:JtaTransactionManagersetter 正常调用并启动事务,但我 真的不喜欢编写不需要的自定义存储库只是为了解决可能的错误配置/错误(我已经确认实现自定义存储库确实可以规避提到的行为)。

我会很感激你给我的任何信息,因为我在这里没有想法了。

这是我的相关堆栈:

  • JDK 1.5
  • Spring 3.1.1.RELEASE
  • Spring Data JPA 1.1 GA(已在 1.0.3 版确认问题)
  • Atomikos 3.7.0
  • OpenJPA 2.0.1
  • DB2 9.7

这个基本接口将正常执行:

以下存储库接口将导致以下异常:

引发的异常(在 Spring 应用程序上下文引导期间抛出异常,在“配置时间”):

When you delve into the code that bombs (OpenJPA AbstractBrokerFactory class), it follows that OpenJPA expects the given transaction manager (as defined in OpenJPA properties map below), but Spring doesn't provide it, since setter on JtaTransactionManager class is not invoked at all (I've verified this behaviour while debugging).

Contrary to that, if interface without any methods is invoked, the setter is called normally and provides transaction manager to OpenJPA.


Here's my configuration - one thing that you may notice and could potentially be relevant: I am not using persistence.xml file at all.

Datasource

Transaction manager

Entity manager

OpenJPA properties

JPA repository scanner

Thanks in advance

0 投票
1 回答
710 浏览

jndi - 使用 Tomcat 7.0.27 和 Atomikos 3.7.1 自动发布后未找到 JNDI 资源

我正在使用 Spring、Tomcat 7.0.27 和 Atomikos 3.7.1 构建一个 Web 应用程序。我遵循了 Atomikos 的集成指南:Tomcat7Integration35。除了 Tomcat 7.0.27 中不再存在的两个侦听器之外,一切都正常。所以我没有在 server.xml 文件中包含这两个监听器。

<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />

<Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>

当我第一次启动 Tomcat 时,一切正常。当我进行一些代码更改并且 Tomcat 尝试自动发布应用程序时,找不到在 context.xml 中定义的 JNDI 资源(异常:javax.naming.NameNotFoundException)。我需要停止服务器并重新启动它。通过这样做,应用程序被成功发布。

有没有其他人经历过这个?如果您能给我任何指示,我将不胜感激。

0 投票
1 回答
210 浏览

spring - 事务二级缓存和生成的标识符

我有以下堆栈:

  • 休眠 3.6.9.Final
  • 春天 3.1.1
  • Atomikos 3.7.1
  • Infinispan 4.2.1.FINAL
  • MySQL

我一直在编写一些测试,以确保当抛出 RuntimeException 时,当前事务会在数据库上回滚,但也会在事务性 2LC 上回滚。

我发现了一些奇怪的结果,希望有人能解释一下。

如果我使用带有 @Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL) 注释的 @Entity 和字符串 @Id,我会在分配 id 并保存实体时看到我期望的结果:

  • 当没有抛出异常时,事务被提交并且 2LC 包含实体,我使用以下方法确认了这一点:

sessionFactory.getCache().containsEntity(MyEntity.class, myIdentifier)

  • 如果抛出异常,则数据库或 2LC 都不包含该实体。

@Entity但是,如果我使用生成的@Id(MySQL 自动递增长属性)重复这些测试,如图所示:

我发现实体永远不会被放入 2LC,无论抛出任何异常。

我已经进行了一些调试,这似乎取决于AbstractSaveEventListener#performSaveOrReplicate. 对于分配的@IduseIdentityColumn 为 false,因此我们实例化并执行 EntityInsertAction,然后将新实体放入 2LC。

相反,如果@Id由 MySQL 生成,我们发现 useIdentityColumn 为真,我们实例化并执行 EntityIdentityInsertAction。这包含注释掉的关于 2LC 的代码,如下所示:

这有什么原因吗?缓存插入是否应该在其他地方完成?这是一个错误吗?

如果有人能阐明这种差异以及它应该如何工作,我将不胜感激。

我已经在 Hibernate 论坛上发布了这个问题,但没有太大的兴趣。

0 投票
2 回答
4447 浏览

spring - 使用 Atomikos JTA 事务管理器时,Spring 单元测试不会回滚

我们想使用 Atomikos JTA 事务管理器。我们有一个单元测试,我们希望在它完成后回滚它,从而使表保持干净以供下次运行。

当我们使用 Spring 捆绑的 JTA 事务管理器运行时,配置如下

...我们得到:

但是当我们使用配置如下的 Atomikos 事务管理器运行时:

...我们得到:

简而言之,Atomikos 似乎正在无缘无故地中止和终止我们的 Tx 中途飞行。有谁知道为什么?

0 投票
1 回答
733 浏览

mysql - Spring 3 - Hibernate 3 - 查询多个 MySQL 数据库

我正在尝试开发一个小程序,对存储在单个服务器上的多个 MySQL 数据库执行查询。例如,考虑使用一个 select 语句从数据库 D1 中的表 X1 中的字段和数据库 D2 中的表 X2 中的字段中检索值。

除了 Hibernate 3.5,我们还使用 Spring 3 作为我们的框架。我将如何设置一个 spring/hibernate 项目来实现这一目标?

我已经看到许多源状态需要为每个数据库单独的休眠配置/会话工厂,并使用诸如 Atomikos 之类的事务管理器。但我一直找不到任何明确的方向/说明。

感谢您提供的任何帮助!(如果需要,我可以提供更多信息)

0 投票
2 回答
2458 浏览

transactions - JTA 是否跨多个线程工作?

从 JTA 规范中,我了解到它仅适用于(或支持)分布式事务,用于调用线程。这是否意味着事务不能跨越多个线程?还是取决于实施?

是否有任何 JTA 实现支持跨线程的 XA?

谢谢!