Postgresql支持XATransaction

postgresql 分布式事务

    今天碰到一个问题,就是如何让我们使用的Postgresql支持分布式事务。
    我们使用的atomikos + Postgresql 9.2。 使用的配置如下:
    首先是atomikos的配置:
    <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
        <property name="forceShutdown">
            <value>true</value>
        </property>
    </bean>
    <!--        use com.atomikos.icatch.jta.UserTransactionImp as        transaction,"transactionTimeout" property should be change accord to        product environment, it defined in millisecond unit    -->
    <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
        <property name="transactionTimeout">
            <value>200</value>
            <!-- Unit of the transactionTimeout value is second-->
        </property>
    </bean>
    <!-- define JtaTransactionManager-->
    <bean id="xaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager">
            <ref bean="atomikosTransactionManager"/>
        </property>
        <property name="userTransaction">
            <ref bean="atomikosUserTransaction"/>
        </property>
    </bean>
    <!-- transaction proxy template -->
    <bean id="xaProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <ref bean="xaTransactionManager"/>
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="create*">PROPAGATION_REQUIRED</prop>
                <prop key="delete*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="find*">PROPAGATION_REQUIRED, readOnly</prop>
                <prop key="getCount">PROPAGATION_REQUIRED, readOnly</prop>
                <prop key="isolationLevelName">ISOLATION_READ_COMMITTED</prop>
            </props>
        </property>
    </bean>

然后是数据库的配置:

    <bean id="postgresqlDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" destroy-method="close">
        <property name="uniqueResourceName">
            <value>postgresqlDatabase</value>
        </property>

        <property name="xaDataSourceClassName">
            <value>org.postgresql.xa.PGXADataSource</value>
        </property>

        <property name="xaProperties">
            <props>
                <prop key="databaseName">haodao</prop>
                <prop key="serverName">127.0.0.1</prop>
                <prop key="portNumber">5432</prop>
                <prop key="user">executor</prop>
                <prop key="password">test</prop>
            </props>
        </property>
       
        <!-- set properties for datasource connection pool -->
        <property name="maxPoolSize">
            <value>10</value>
        </property>
        <property name="minPoolSize">
            <value>2</value>
        </property>
        <property name="loginTimeout">
            <value>30</value>
        </property>
        <property name="reapTimeout">
            <value>20000</value>
        </property>

    </bean>



最后是DAO相关的配置:
    <bean id="postgresqlJdbcTemplate"
        class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource">
            <ref bean="postgresqlDataSource" />
        </property>
    </bean>
   
    <bean id="jdbcUserInfoDAOTarget"
        class="com.haodao.tools.dao.JdbcUserInfoDAO">
        <property name="jdbcTemplate">
            <ref bean="postgresqlJdbcTemplate" />
        </property>
    </bean>
   
    <bean id="jdbcUserInfoDAO" parent="xaProxyTemplate">
        <property name="proxyInterfaces">
            <list>
                <value>com.haodao.tools.dao.UserInfoDAO</value>
            </list>
        </property>
        <property name="target">
            <ref local="jdbcUserInfoDAOTarget" />
        </property>
    </bean>   

DAO类通过JdbcTemplate来访问数据库。

这些配置中需要注意的是使用的Postgresql的驱动的类是org.postgresql.xa.PGXADataSource, 而不是我们常用的org.postgresql.Driver。

但是这样配置之后,在测试的时候还是出现了错误,错误信息如下:
org.springframework.transaction.HeuristicCompletionException: Heuristic completion: outcome state is mixed; nested exception is javax.transaction.HeuristicMixedException: Heuristic Exception

经过一番google,才发现还需要配置一下Postgresql的配置文件。打开postgresql.conf文件,在其中找到配置项max_prepared_transactions,需要确保该配置项没有被注释掉,并且值是大于0的。配置该值后,需要重启Postgresql才能够生效。另外,配置这个值还需要注意一点,不要配置的太大。在Ubuntu 12上,我把该值配置为100后,导致Postgresql服务无法启动;修改为10之后就可以正常启动了。

相关推荐

  • wampserver xampp下PHP使用PDO 支持postgresql 来自csdn博客的分享,首先感谢他的资源共享:百度:phppostgresqlpdo——》wampserverxampp下PHP使用PDO支持postgresql链接:http://blog.csdn.net/yageeart/articl
  • 支持蓝牙,蓝牙v2.1,支持EDR 红外线无红外线功能数据业务EDGE,HSDPAJAVA不支持WAP上网不支持WWW浏览器支持WWW浏览器,Safari浏览器数据线支持数据线,USB2.0,3.5mm耳机接口扩展卡无扩展卡功能WiFi(WLAN)支持WiFi,支持802.1
  • 资产支持证券 资产支持证券资产支持证券就是由特定目的信托受托机构发行的、代表特定目的信托的信托受益权份额。受托机构以信托财产为限向投资机构承担支付资产支持证券收益的义务。资产支持证券(Asset-BackedSecurity,以下简称ABS),是一种债券
  • 转向收入支持 扑克导读美国的农业补贴逐步由以价格支持为主转向以收入支持为主。近年来,美国在农业补贴政策上注重发挥市场机制的导向作用,传统的以目标价格、保护价格、贷款差额支付为主的价格支持政策,逐渐转向以直接收入支付、反周期支付等为主的收入支持政策。这篇文
  • Android Native IPC 方案支持情况 1、Binder-不支持Native层的binder2、内存共享-不支持3、信号量(信号灯)-不支持4、消息队列-不支持5、信号-支持,但是不能用sigqueue传消息,只能用来安装信号,可以用来收集NativeCrash日志6、管道-匿名
  • 95epay支持多卡种、多币种、多网店系统、多支付语言? 支持多卡种、多币种、多网店系统、多支付语言?95epay支持五种卡:Visa、MasterCard、AmericanExpress、JCBBrand、DinersCard95epay通道支持币种:目前我们支持:美元、欧元、英镑、日元、新加坡
  • 安倍内閣 支持する47% 支持しない39% 安倍内閣支持する47%支持しない39%11月9日19時00分NHKの世論調査によりますと、安倍内閣を「支持する」と答えた人は、先月より4ポイント上がって47%、「支持しない」と答えた人は、1ポイント下がって39%でした。NHKは、今月6日か
  • 河北瀚迪对特付宝pos机代理的十大支持 1.对经销商进行系统性行业培训及业务拓展指导支持。2.对经销商销售人员进行能力提升专项培训及产品实操培训支持。3、对经销商负责区域招商人员进行招商工作系统性专项培训支持。网络推广支持4.产品品牌区域性网络推广指导支持。5、产品品牌全国性网络
  • 在美国:特朗普创新高的支持率 -53%! 在共和党支持者的投票中,特朗普的支持率创了新高--53%,这个数据要比党内其他竞争者的总和还多。同样,特朗普在民主党内支持者受欢迎比例也是最高的,数据显示被调查者中66%的人对特朗普持肯定的态度,比其他候选者都要高。并且,75%的共和党投票
  • 请问如何让apache支持php- 请问如何让apache支持php?需要模块吗请问如何让apache支持php?首先,Apache要支持DSO再编译安装PHP时,带上一个参数就可以了。请问如何让apache支持php?你说的太对了,我现在编译的时候是这样的过程:./conf
  • NewBlue Titler Pro For Windows -111223 支持众多软件的字幕插件 本插件支持Vegasx86/x64,且包含DX与OFX两种架构,可自行选择。本插件支持Edius6.支持PR。支持AvidMediaComposer软件下载地址:http://d.1tpan.com/tp0352610014
  • IE6不支持hover赋予css样式的解决方法 如div:hover li:hover支持 一般对div选择器样式设置:hoverie6浏览器不支持,如li:hoverimg:hover.abc:hover非a链接标签设置hover其ie6均不支持,这里为大家整理完美兼容让ie6支持hover赋予css样式。扩展阅读:1、cssa

你的评论

就没有什么想说的吗?

最新博客

关于我们 免责声明 移动版

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X