Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 在Spring Boot应用程序中正确使用Hazelcast事务映射_Spring Boot_Hazelcast_Spring Transactions_Jta_Atomikos - Fatal编程技术网

Spring boot 在Spring Boot应用程序中正确使用Hazelcast事务映射

Spring boot 在Spring Boot应用程序中正确使用Hazelcast事务映射,spring-boot,hazelcast,spring-transactions,jta,atomikos,Spring Boot,Hazelcast,Spring Transactions,Jta,Atomikos,我正在研究Hazelcast事务性地图的概念验证。为了实现这一点,我正在编写一个SpringBoot应用程序,并使用Atomikos作为我的JTA/XA实现 此应用程序必须更新事务映射,还必须通过在同一事务中插入新行来更新数据库表 我正在使用JPA/SpringData/Hibernate来处理数据库 因此,该应用程序有一个组件(用@component注释的JAVA类),该组件有一个名为agregar()的方法(西班牙语中的add)。此方法用@Transactional(org.springfr

我正在研究Hazelcast事务性地图的概念验证。为了实现这一点,我正在编写一个SpringBoot应用程序,并使用Atomikos作为我的JTA/XA实现

此应用程序必须更新事务映射,还必须通过在同一事务中插入新行来更新数据库表

我正在使用JPA/SpringData/Hibernate来处理数据库

因此,该应用程序有一个组件(用@component注释的JAVA类),该组件有一个名为agregar()的方法(西班牙语中的add)。此方法用@Transactional(org.springframework.transaction.annotation.Transactional)注释

该方法必须作为一个单元执行两个任务:首先必须更新从Hazelcast实例检索到的TransactionalMap,其次必须使用从JpaRepository(org.springframework.data.jpa.repository.JpaRepository)扩展的存储库更新数据库表

这是我写的代码:

@Transactional
public void agregar() throws NotSupportedException, SystemException, IllegalStateException, RollbackException, SecurityException, HeuristicMixedException, HeuristicRollbackException, SQLException {

    logger.info("AGRENADO AL MAPA ...");

    HazelcastXAResource xaResource = hazelcastInstance.getXAResource();

    UserTransactionManager tm = new UserTransactionManager();
    tm.begin();

    Transaction transaction = tm.getTransaction();
    transaction.enlistResource(xaResource);

    TransactionContext context = xaResource.getTransactionContext();
    TransactionalMap<TaskKey, TaskQueue> mapTareasDiferidas = context.getMap("TAREAS-DIFERIDAS");

    TaskKey taskKey = new TaskKey(1L);
    TaskQueue taskQueue = mapTareasDiferidas.get(taskKey);

    Integer numero = 4;

    Task<Integer> taskFactorial = new TaskImplFactorial(numero);

    taskQueue = new TaskQueue();
    taskQueue.getQueue().add(taskFactorial);

    mapTareasDiferidas.put(taskKey, taskQueue);

    transaction.delistResource(xaResource, XAResource.TMSUCCESS);
    tm.commit();

    logger.info("AGRENADO A LA TABLA ...");

    PaisEntity paisEntity = new PaisEntity(100, "ARGENTINA", 10);
    paisRepository.save(paisEntity);

}
@Transactional
public void agregar()抛出NotSupportedException、SystemException、IllegalStateException、RollbackException、SecurityException、HeuristicMixedException、HeuristicRollbackException、SQLException{
logger.info(“AGRENADO AL-MAPA…”);
HazelcastXAResource=hazelcastInstance.getXAResource();
UserTransactionManager tm=新的UserTransactionManager();
tm.begin();
Transaction=tm.getTransaction();
事务。登记资源(xaResource);
TransactionContext=xaResource.getTransactionContext();
TransactionalMapTareasDiferidas=context.getMap(“TAREAS-DIFERIDAS”);
TaskKey TaskKey=新TaskKey(1L);
TaskQueue TaskQueue=mapTareasDiferidas.get(taskKey);
整数numero=4;
Task taskFactorial=新taskFactorial(numero);
taskQueue=新建taskQueue();
taskQueue.getQueue().add(taskFactorial);
mapTareasDiferidas.put(taskKey,taskQueue);
delistResource(xaResource,xaResource.TMSUCCESS);
tm.commit();
logger.info(“AGRENADO A LA TABLA…”);
两性平等=新两性平等(100,“阿根廷”,10);
paisRepository.save(paisEntity);
}
这段代码正在工作:如果其中一个任务引发异常,那么这两个任务都将回滚

我的问题是:

  • 这个代码真的正确吗
  • 为什么@Transactional不负责提交地图中的更改,而我必须明确地自己做
  • 项目的完整代码可在Github上获得:


    提前感谢

    最后我意识到我必须注入“UserTransactionManager”对象并从中获取事务

    还需要使用JTA/XA实现。我选择了必须在MS SQL Server中启用Atomikos和XA事务


    工作示例可在atomikos数据源mssql分支的Github上找到。最后,我意识到必须注入“UserTransactionManager”对象并从中获取事务

    还需要使用JTA/XA实现。我选择了必须在MS SQL Server中启用Atomikos和XA事务


    工作示例可从atomikos数据源mssql分支的Github获得。从Hazelcast 3.7开始,您可以去掉样板代码,使用
    HazelcastTransactionManager
    提交或回滚事务,这是一个
    PlatformTransactionManager
    实现,将与Spring事务API一起使用。 你可以找到例子

    此外,Hazelcast可以参与与Atomikos的XA事务


    谢谢

    从Hazelcast 3.7开始,您可以使用
    HazelcastTransactionManager
    摆脱用于开始、提交或回滚事务的样板代码,这是一个与Spring事务API一起使用的
    PlatformTransactionManager
    实现。 你可以找到例子

    此外,Hazelcast可以参与与Atomikos的XA事务


    谢谢

    我已更新到Hazelcast 3.7.5,并向HazelcastConfig类添加了以下代码

    @Configuration
    public class HazelcastConfig {
    ...
    
    
    @Bean
    public HazelcastInstance getHazelcastInstance() {
        ....
    }
    
    
    @Bean
    public HazelcastTransactionManager getTransactionManager() {
        HazelcastTransactionManager transactionManager = new HazelcastTransactionManager(getHazelcastInstance());
        return transactionManager;
    }
    
    @Bean
    public ManagedTransactionalTaskContext getTransactionalContext() {
        ManagedTransactionalTaskContext transactionalContext = new ManagedTransactionalTaskContext(getTransactionManager());
        return transactionalContext;
    }
    
    当我运行应用程序时,会出现以下异常:

    org.springframework.beans.factory.noSuchBean定义异常:否 名为“transactionManager”的bean可用:不匹配 找到限定符的PlatformTransactionManager bean “transactionManager”-既不匹配限定符也不匹配bean名称

    代码可在Github的一个新分支上获得:atomikos-datasource-mssql-hz37


    提前感谢

    我已更新到Hazelcast 3.7.5,并向HazelcastConfig类添加了以下代码

    @Configuration
    public class HazelcastConfig {
    ...
    
    
    @Bean
    public HazelcastInstance getHazelcastInstance() {
        ....
    }
    
    
    @Bean
    public HazelcastTransactionManager getTransactionManager() {
        HazelcastTransactionManager transactionManager = new HazelcastTransactionManager(getHazelcastInstance());
        return transactionManager;
    }
    
    @Bean
    public ManagedTransactionalTaskContext getTransactionalContext() {
        ManagedTransactionalTaskContext transactionalContext = new ManagedTransactionalTaskContext(getTransactionManager());
        return transactionalContext;
    }
    
    当我运行应用程序时,会出现以下异常:

    org.springframework.beans.factory.noSuchBean定义异常:否 名为“transactionManager”的bean可用:不匹配 找到限定符的PlatformTransactionManager bean “transactionManager”-既不匹配限定符也不匹配bean名称

    代码可在Github的一个新分支上获得:atomikos-datasource-mssql-hz37


    提前感谢

    您使用的是哪个版本的Hazelcast?嵌入Spring Boot 1.4.5的Hazelcast 3.6.7是哪个版本的Hazelcast?嵌入Spring Boot 1.4.5的Hazelcast 3.6.7我已更新为Hazelcast 3.7.5,但在atomikos集成和Hazelcast ManagedTransactionalTaskContext方面仍然存在问题。你能帮我一下吗?我将发布更多详细信息作为回答。我已经更新到Hazelcast 3.7.5,但在atomikos集成和Hazelcast ManagedTransactionalTaskContext方面仍然存在问题。你能帮我一下吗?我将发布更多细节作为答案。类路径中有hazelcast spring jar吗?有。它是在pom.xml中声明的。在类路径中是否有hazelcast spring jar?是的。它在pom.xml中声明