小编Jai*_*ime的帖子

在Spring和GlassFish 5中如何进行分布式事务XA?

我正在尝试创建一个包含两个REST Web服务的事务,其数据源指向相同的数据库。第一个服务名为1,调用2使用Spring RestTemplate 命名的另一个Web服务。

为了实现事务,我使用了JNDI连接池,MySql JDBC驱动程序(版本5.1.35),JTA,XA,Spring和GlassFish 5 AppServer。

现在,我已经在Spring项目中下载了maven依赖项,使用定义了一个配置类JtaTransactionManager,并在application.yml文件中配置了数据源和JTA属性,如以下代码所示:

配置类:

@Configuration
@EnableTransactionManagement
public class Transacciones {

    @Bean
     public PlatformTransactionManager platformTransactionManager(){ 
        return new JtaTransactionManager();
    }

}
Run Code Online (Sandbox Code Playgroud)

application.yml文件

spring:
  datasource:
    jndi-name: jdbc/Prueba  
    driver-class-name: com.mysql.jdbc.Driver

  jta:
    enabled: true                               
Run Code Online (Sandbox Code Playgroud)

我在GlassFish 5中配置了JNDI数据源,并jdbc/Prueba使用javax.sql.XADataSource名为的数据源定义了在“连接池”页面中命名的“ JDBC资源” pruebaXA

GlassFish,连接池

在Web服务的控制层中1,该方法2使用RestTemplateSpring Framework 的类调用服务:

服务1代码:

@RestController
@RequestMapping("/servicio")
@EnableTransactionManagement
public class a {

    @Autowired
    private JdbcTemplate objJdbcTemplate;


    @Transactional(rollbackFor = RuntimeException.class)
    @GetMapping("/1")
    public Integer getValor(){ …
Run Code Online (Sandbox Code Playgroud)

java spring web-services glassfish

4
推荐指数
1
解决办法
3217
查看次数

标签 统计

glassfish ×1

java ×1

spring ×1

web-services ×1