首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为hazelcast配置atomikos

为hazelcast配置atomikos
EN

Stack Overflow用户
提问于 2016-03-08 14:07:09
回答 2查看 269关注 0票数 0

如何为HazelCast instance.As配置Atomikos每个mastering per转换我们只能在java.How中这样做我可以像配置databases.If一样配置java是一种方法,那么我如何利用TransactionalTask删除启动和提交事务的样板代码。

代码语言:javascript
复制
public void insertIntoGridJTA( final List<String> list)
            throws NotSupportedException, SystemException,
            IllegalStateException, RollbackException {
        HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance();
        HazelcastXAResource xaResource = hazelcast.getXAResource();
        TransactionContext context = xaResource.getTransactionContext();
        hazelcast.executeTransaction(new  TransactionalTask<Object>() {
        public Object execute(TransactionalTaskContext context)
                    throws TransactionException {
                // TODO Auto-generated method stub
            TransactionalMap<Integer, String> map = context.getMap("demo");
            System.out.println("map"+map.getName());
            for (int i = 0; i < list.size(); i++) {
                map.put(i, list.get(i));
            }
                return null;
        }
        });
    }

但是如果我使用的是TransactionalTask,事务就不会启动

EN

回答 2

Stack Overflow用户

发布于 2016-03-15 19:12:37

票数 0
EN

Stack Overflow用户

发布于 2017-11-17 07:10:11

除了@noctarius,我以前也是这样做的。

代码语言:javascript
复制
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private HazelcastXAResource hzXAResource;
@Autowired
private UserTransactionManager userTransactionManager;

@Transactional
public void insert() throws SystemException, RollbackException {
    final Transaction transaction = userTransactionManager.getTransaction();
    transaction.enlistResource(hzXAResource);
    final TransactionContext hzTransactionContext = hzXAResource.getTransactionContext();
    final TransactionalMap<Long, String> hzCustomerMap = hzTransactionContext.getMap("hzCustomerMap");

    // Use a Java 8 stream to print out each tuple of the list
    CUSTOMERS_TEST_DATA.forEach(customer -> {
        log.info("Inserting customer record for {}", customer);
        hzCustomerMap.put(customer.getId(), customer.toString());
    });
    jdbcTemplate.batchUpdate(Sql.SQL_INSERT.getSql(), new BatchPreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement ps, int i) throws SQLException {
            ps.setString(1, CUSTOMERS_TEST_DATA.get(i).getFirstName());
            ps.setString(2, CUSTOMERS_TEST_DATA.get(i).getLastName());
        }

        @Override
        public int getBatchSize() {
            return CUSTOMERS_TEST_DATA.size();
        }
    });

    // Uncomment this to test the failure of the transaction
    //        hzCustomerMap.values((Predicate) entry -> {
    //            throw new RuntimeException();
    //        });

    transaction.delistResource(hzXAResource, XAResource.TMSUCCESS);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35860188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档