为hazelcast配置atomikos

为hazelcast配置atomikos,hazelcast,Hazelcast,我如何为HazelCast实例配置Atomikos。根据掌握的hazel cast,我们只能用java进行配置。我如何像配置数据库一样进行配置。如果配置是java,那么我如何利用TransactionalTask删除启动和提交事务的样板代码。我尝试过 public void insertIntoGridJTA( final List<String> list) throws NotSupportedException, SystemException,

我如何为HazelCast实例配置Atomikos。根据掌握的hazel cast,我们只能用java进行配置。我如何像配置数据库一样进行配置。如果配置是java,那么我如何利用TransactionalTask删除启动和提交事务的样板代码。我尝试过

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;
        }
        });
    }
public void insertIntoGridJTA(最终列表)
抛出NotSupportedException、SystemException、,
非法状态异常,回滚异常{
HazelcastInstance hazelcast=hazelcast.newHazelcastInstance();
HazelcastXAResource=hazelcast.getXAResource();
TransactionContext=xaResource.getTransactionContext();
executeTransaction(新事务性任务(){
公共对象执行(TransactionalTaskContext上下文)
抛出TransactionException{
//TODO自动生成的方法存根
TransactionalMap=context.getMap(“演示”);
System.out.println(“map”+map.getName());
对于(int i=0;i

但是,如果我使用TransactionalTask,则事务不会启动。您是否看过我们示例回购中的Atomikos示例

除了@noctarius,我过去也这样做过

@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);
}
@Autowired
私有JdbcTemplate JdbcTemplate;
@自动连线
私人HazelcastXAResource hzXAResource;
@自动连线
私有用户TransactionManager用户TransactionManager;
@交易的
public void insert()引发系统异常、回滚异常{
final Transaction=userTransactionManager.getTransaction();
事务.登记资源(hzXAResource);
final TransactionContext hzTransactionContext=hzXAResource.getTransactionContext();
final TransactionalMap hzCustomerMap=hzTransactionContext.getMap(“hzCustomerMap”);
//使用Java8流打印列表的每个元组
客户测试数据。forEach(客户->{
log.info(“插入{}的客户记录”,客户);
hzCustomerMap.put(customer.getId(),customer.toString());
});
jdbcTemplate.batchUpdate(Sql.Sql\u INSERT.getSql(),新的BatchPreparedStatementSetter()){
@凌驾
公共void setValues(PreparedStatement ps,int i)引发SQLException{
ps.setString(1,CUSTOMERS\u TEST\u DATA.get(i).getFirstName());
ps.setString(2,CUSTOMERS\u TEST\u DATA.get(i).getLastName());
}
@凌驾
public int getBatchSize(){
返回客户测试数据。大小();
}
});
//取消对此的注释以测试事务的失败
//hzCustomerMap.values((谓词)条目->{
//抛出新的RuntimeException();
//        });
delistResource(hzXAResource、XAResource.TMSUCCESS);
}