标签: atomikos

春天开机+弹簧数据JPA + Atomikos公司+多个数据库配置

使用此配置(MainConfig.java):

import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.jta.JtaTransactionManager;

import com.atomikos.icatch.jta.UserTransactionImp;
import com.atomikos.icatch.jta.UserTransactionManager;

@Configuration
@ComponentScan
public class MainConfig {

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setShowSql(true);
        hibernateJpaVendorAdapter.setGenerateDdl(true);
        hibernateJpaVendorAdapter.setDatabase(Database.MYSQL);
        return hibernateJpaVendorAdapter;
    }

    @Bean(name = "userTransaction")
    public UserTransaction userTransaction() throws Throwable {
        UserTransactionImp userTransactionImp = new UserTransactionImp();
        userTransactionImp.setTransactionTimeout(10000);
        return userTransactionImp;
    }

    @Bean(name = "atomikosTransactionManager", initMethod = "init", destroyMethod = "close")
    public TransactionManager atomikosTransactionManager() throws …
Run Code Online (Sandbox Code Playgroud)

atomikos spring-data-jpa spring-boot

14
推荐指数
1
解决办法
1万
查看次数

如何使用Atomikos Transaction Essentials和Hibernate> = 4.3

我从Hibernate 4.2切换到Hibernate 4.3,我的项目不再工作了.我得到了一个

HibernateException:无法找到当前的JTA事务

当我做

Session s = sessionFactory.getCurrentSession();
Run Code Online (Sandbox Code Playgroud)

我意识到org.hibernate.transaction.TransactionManagerLookup不再存在.它在Hibernate 4.3中被删除了.我该如何更改当前配置?

<hibernate-configuration>
<session-factory>
    <property name="connection.datasource">testDS</property>

    <property name="current_session_context_class">jta</property>
    <property name="transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</property>
    <property name="transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property>
    <property name="connection.release_mode">auto</property>
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

    <property name="hibernate.hbm2ddl.auto">create-drop</property>
    <property name="hibernate.show_sql">true</property>
    <mapping class="test.entities.Person" />
    <mapping class="test.entities.CreditCard" />
    <mapping class="test.entities.ExampleRevEntity" />
</session-factory>
Run Code Online (Sandbox Code Playgroud)

hibernate jta atomikos

10
推荐指数
2
解决办法
1万
查看次数

奇怪的Atomikos异常 - init()出错:Log已在使用中?

我们试图在几个本地环境中运行使用Atomikos作为事务管理器的相同Web应用程序(每个环境使用相同版本的spring,atomikos,tomact等,使用相同的配置文件).其中一些工作正常,但在其中一个中,当我们尝试启动tomcat时,我们得到以下异常:

Caused by: java.lang.IllegalStateException: Can't overwrite cause with java.lang.RuntimeException: Log already in use?
at java.lang.Throwable.initCause(Throwable.java:456)
at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:326)
at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:405)
at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java:569)
at com.atomikos.icatch.jta.UserTransactionManager.startupTransactionService(UserTransactionManager.java:89)
at com.atomikos.icatch.jta.UserTransactionManager.checkSetup(UserTransactionManager.java:77)
at com.atomikos.icatch.jta.UserTransactionManager.init(UserTransactionManager.java:142)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1638)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1579)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509)
... 41 more
Caused by: com.atomikos.icatch.SysException: Error in init(): Log already in use?
... 54 more
Caused by: java.lang.RuntimeException: Log already in use?
at com.atomikos.icatch.standalone.UserTransactionServiceImp.createDefault(UserTransactionServiceImp.java:203)
at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.java:258)
Run Code Online (Sandbox Code Playgroud)

我们无法弄清楚有问题的日志是什么,谷歌也没有多大帮助......任何人都知道这个奇怪问题的原因是什么?同样,我们的环境具有完全相同的配置,可以正常工作,另一个环境有另一个奇怪的警告:https: //stackoverflow.com/questions/20936253/atomikos-with-activemq-commit-heuristic-warnings

谢谢!:)

java tomcat jta atomikos

10
推荐指数
3
解决办法
7888
查看次数

如何移动Atomikos的tm.out和*.epoch文件的位置?

我正在运行一个使用Atomikos的J2SE应用程序,它将许多日志文件转储到当前目录.我想将这些文件的位置移动到"/ tmp",但我无法找到我可以在Spring XML配置文件中设置的配置属性.

Atomikos文档引用了一个属性:

com.atomikos.icatch.output_dir
Run Code Online (Sandbox Code Playgroud)

这似乎正是我需要的,但如何从没有jta.properties文件的Spring设置?这是我的事务管理器配置:

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManager" ref="atomikosTransactionManager" />
    <property name="userTransaction" ref="atomikosUserTransaction" />
</bean>

<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
    init-method="init" destroy-method="close">
    <!-- When close is called, should we force transactions to terminate? -->
    <property name="forceShutdown" value="false" />
</bean>

<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
    <!-- Number of seconds before transaction timesout. -->
    <property name="transactionTimeout" value="30" />
</bean>
Run Code Online (Sandbox Code Playgroud)

configuration logging spring temporary-files atomikos

8
推荐指数
1
解决办法
4821
查看次数

Apache Catalina错误: - "SEVERE:Error listenerStart"

当我尝试启动在apache下运行的java spring软件时,我收到以下错误: -

Sep 24, 2012 12:08:20 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Sep 24, 2012 12:08:20 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/jw] startup failed due to previous errors
Sep 24, 2012 12:08:21 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive jwdesigner.war
Sep 24, 2012 12:08:21 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Sep 24, 2012 12:08:21 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Sep 24, 2012 12:08:21 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/16 …
Run Code Online (Sandbox Code Playgroud)

atomikos catalina

8
推荐指数
2
解决办法
2万
查看次数

在一个全局事务的范围内,使用JTA同时向不同的数据源调用几个查询

我有一个带有3个分布式dataSources的应用程序(com.atomikos.jdbc.AtomikosDataSourceBean).我正在使用Atomikos事务管理器作为JTA实现.每个dataSource都适用于PostgreSQL数据库.现在,我正在调用我对每个dataSource的查询,一切正常.

我想知道,如果有可能,使用JTA,并行调用我的查询(多线程,并发)?

我试过简单地使用jdbcTemplate(Spring)在新创建的线程中调用查询.首先,我遇到了一个春天问题.Spring将事务上下文存储在ThreadLocal字段中,因此在我的新线程中无法正确解析(Spring事务管理器和多线程)).我已经通过将相同的事务上下文设置为新创建的线程的ThreadLocal来解决了这个问题.但是我在Atomikos代码中面临同样的问题.它们还将CompositeTransactionImp存储在线程范围映射(BaseTrancationManager#getCurrentTx)中.但在Atomikos案例中,不可能为新线程设置值.所以我不能同时执行我的查询,因为似乎Atomikos不支持这种方法.但我也查看了JTA规范并发现了以下内容:"多个线程可能同时与同一个全局事务关联." ("3.2 TransactionManager接口",http://download.oracle.com/otndocs/jcp/jta-1.1-spec-oth-JSpec/?submit=Download)

问题:如何在一个全局事务的范围内使用JTA(2阶段提交)同时调用两个或多个查询到不同的dataSource?

在tomcat上下文中配置DataSources:

<Resource name="jdbc/db1" auth="Container" type="com.atomikos.jdbc.AtomikosDataSourceBean"
          factory="com.company.package.AtomikosDataSourceBeanFactory"
          xaDataSourceClassName="org.postgresql.xa.PGXADataSource"
          xaProperties.serverName="localhost"
          xaProperties.portNumber="5451"
          xaProperties.databaseName="db1"
          uniqueResourceName="jdbc/db1"
          xaProperties.user="secretpassword"
          xaProperties.password="secretpassword"
          minPoolSize="5"
          maxPoolSize="10"
          testQuery="SELECT 1"  />

<Resource name="jdbc/db2" auth="Container" type="com.atomikos.jdbc.AtomikosDataSourceBean"
          factory="com.company.package.AtomikosDataSourceBeanFactory"
          xaDataSourceClassName="org.postgresql.xa.PGXADataSource"
          xaProperties.serverName="localhost"
          xaProperties.portNumber="5451"
          xaProperties.databaseName="db2"
          uniqueResourceName="jdbc/db2"
          xaProperties.user="secretpassword"
          xaProperties.password="secretpassword"
          minPoolSize="5"
          maxPoolSize="10"
          testQuery="SELECT 1"  />

<Resource name="jdbc/db3" auth="Container" type="com.atomikos.jdbc.AtomikosDataSourceBean"
          factory="com.company.package.AtomikosDataSourceBeanFactory"
          xaDataSourceClassName="org.postgresql.xa.PGXADataSource"
          xaProperties.serverName="localhost"
          xaProperties.portNumber="5451"
          xaProperties.databaseName="db3"
          uniqueResourceName="jdbc/db3"
          xaProperties.user="secretpassword"
          xaProperties.password="secretpassword"
          minPoolSize="5"
          maxPoolSize="10"
          testQuery="SELECT 1"  />
Run Code Online (Sandbox Code Playgroud)

Spring环境中的事务管理器配置:

 <bean id="transactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
  init-method="init" destroy-method="close" lazy-init="true">
  <property name="forceShutdown" value="false" />
 </bean>
Run Code Online (Sandbox Code Playgroud)

码:

    final SqlParameterSource parameters = …
Run Code Online (Sandbox Code Playgroud)

java spring multithreading jta atomikos

8
推荐指数
1
解决办法
988
查看次数

Atomikos事务日志com.atomikos.icatch.enable_logging = false

我想了解如果我设置了分布式事务功能是否适用于我的应用程序 com.atomikos.icatch.enable_logging=false

  • 我是否正确理解事务恢复与发生崩溃的情况相关,我们希望完全重新启动相同的事务.
  • 恢复是否在同一个分布式事务中工作?
  • 我的应用程序容忍失败,因为失败总是可以从一开始就用新事务重新启动.这是否意味着在我的情况下可以设置com.atomikos.icatch.enable_logging=false
  • com.atomikos.icatch.enable_logging=false如果并非所有分布式事务的参与者都已提交,则可能导致数据库的状态不一致?

更新 我在这个问题之后被触发,以便更多地了解我在这里描述的分布式事务的内部结构: 如何调整分布式(XA)事务的性能?

java database xa distributed-transactions atomikos

8
推荐指数
1
解决办法
695
查看次数

在CentOS上与Postgres 8.4.3准备交易

我在本地postgres.config中将'max_prepared_transactions'设置为20,但事务失败并出现以下错误跟踪(但仅限在Linux上).因为在Windows中,相同的代码无缝地工作,如果这不是许可问题,我就会徘徊.什么是解决方案?谢谢彼得

372300 [Atomikos:7] WARN atomikos - XA resource 'XADBMS': rollback for XID '3137332E3230332E3132362E3139302E746D30303030313030303037:3137332E3230332E3132362E3139302E746D31' raised -3: the XA resource detected an internal error
org.postgresql.xa.PGXAException: Error rolling back prepared transaction
        at org.postgresql.xa.PGXAConnection.rollback(PGXAConnection.java:357)
        at com.atomikos.datasource.xa.XAResourceTransaction.rollback(XAResourceTransaction.java:873)
        at com.atomikos.icatch.imp.RollbackMessage.send(RollbackMessage.java:90)
        at com.atomikos.icatch.imp.PropagationMessage.submit(PropagationMessage.java:86)
        at com.atomikos.icatch.imp.Propagator$PropagatorThread.run(Propagator.java:62)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
        at java.lang.Thread.run(Thread.java:595)
Caused by: org.postgresql.util.PSQLException: ERROR: prepared transaction with identifier "1096044365_MTczLjIwMy4xMjYuMTkwLnRtMDAwMDEwMDAwNw==_MTczLjIwMy4xMjYuMTkwLnRtMQ==" does not exist
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:299)
        at org.postgresql.xa.PGXAConnection.rollback(PGXAConnection.java:347)

postgresql xa atomikos

7
推荐指数
1
解决办法
5997
查看次数

JTA 事务性资源实现示例

我试图了解使远程/网络资源符合 JTA 的基本原则,但我对有关该主题的文档/博客/文章如此之少感到震惊

假设我编写了自己的特殊类型的服务器,即“ IAmYourFaja ”服务器或“ IAYF ”。假设我编写/实现了我自己的基于 TCP 的网络协议,用于与该服务器进行交互,称为 IAYFCP(IAYF 通信协议)。最后,我编写了一个 Java 客户端库,用于通过 IAYFCP 访问和发送消息到远程 IAYF 服务器。还在我这儿?

现在我有一个用例,我需要执行以下分布式事务:

  1. 在关系/JDBC 数据库中插入记录;然后
  2. 向我的 IAYF 服务器发送消息;然后
  3. 将消息推送到 JMS 代理

我需要所有这些进行交易,这样如果任何一个组件在任何时候出现故障,我都可以将它们全部回滚,并且这些网络资源中的状态不会发生任何改变。

最终目标是能够运行以下代码(此处为伪代码):

// "JTA Example"
DistributedTransaction dTrans = getTransaction();
DataSource jdbcDataSource = getDataSource();
IayfClient iayfClient = getIayfClient();
JmsClient jmsClient = getJmsClient();
try {
    dTrans.begin();

    // 1. Insert a record in a relational/JDBC database
    insertRecord(jdbcDataSource, "INSERT INTO widgets ( fizz, buzz ) VALUES ( 35, true )");

    // 2. Fire a message …
Run Code Online (Sandbox Code Playgroud)

java transactions jta atomikos bitronix

6
推荐指数
1
解决办法
2971
查看次数

将 jta 事务超时从默认更改为自定义

我正在使用 Atomikos 进行 JTA 事务。我对 JTA 有以下设置:

UserTransactionImp userTransactionImp = new UserTransactionImp();
userTransactionImp.setTransactionTimeout(900);
Run Code Online (Sandbox Code Playgroud)

但是当我的代码执行 JTA 事务时,如果它需要超过 5 分钟(这是默认值),那么它会抛出异常:

Caused by: com.atomikos.icatch.RollbackException: Prepare: NO vote
    at com.atomikos.icatch.imp.ActiveStateHandler.prepare(ActiveStateHandler.java:231)
    at com.atomikos.icatch.imp.CoordinatorImp.prepare(CoordinatorImp.java:681)
    at com.atomikos.icatch.imp.CoordinatorImp.terminate(CoordinatorImp.java:970)
    at com.atomikos.icatch.imp.CompositeTerminatorImp.commit(CompositeTerminatorImp.java:82)
    at com.atomikos.icatch.imp.CompositeTransactionImp.commit(CompositeTransactionImp.java:336)
    at com.atomikos.icatch.jta.TransactionImp.commit(TransactionImp.java:190)
    ... 25 common frames omitted
Run Code Online (Sandbox Code Playgroud)

看起来它采用了默认的 jta 事务超时(即使我明确地设置了超时(到 15 分钟/900 秒)。

我尝试在 application.properties 文件中使用以下属性,但它仍然采用默认超时值(300 秒)。

spring.jta.atomikos.properties.max-timeout=600000
spring.jta.atomikos.properties.default-jta-timeout=10000
Run Code Online (Sandbox Code Playgroud)

我也尝试过以下属性,但没有运气:

spring.transaction.default-timeout=900
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议我是否需要任何其他设置?我正在使用 wildfly 插件、spring boot 和 atomikos api 进行 JTA 事务。

jta atomikos

6
推荐指数
1
解决办法
1万
查看次数