将 PlatformTransactionManager 注入 Ehcache

Injecting PlatformTransactionManager into Ehcache

我正在尝试根据文档 here 将 Spring 的 PlatformTransactionManager 注入到 Ehcache 中。我现有的事务管理器定义如下:

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {

    JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
    jpaTransactionManager.setEntityManagerFactory(entityManagerFactory);

    return jpaTransactionManager;
}

文档指出您需要编写自己的 class 来实现 TransactionManagerLookup:

public class MyTransactionManagerLookup implements TransactionManagerLookup {

    @Override
    public TransactionManager getTransactionManager() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void init() {
        // TODO Auto-generated method stub
    }

    @Override
    public void register(EhcacheXAResource arg0, boolean arg1) {
        // TODO Auto-generated method stub
    }

    @Override
    public void setProperties(Properties arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void unregister(EhcacheXAResource arg0, boolean arg1) {
        // TODO Auto-generated method stub
    }
}

我已尝试将 PlatformTransactionManager 自动装配到 MyTransactionManagerLookup,但您无法从 PlatformTransactionManager 转换为 TransactionManager:

@Autowired
PlatformTransactionManager ptm;

@Override
public TransactionManager getTransactionManager() {

    return ptm; // cannot convert from PlatformTransactionManager to TransactionManager
}

我想我在这里遗漏了一些明显的东西,非常感谢任何指点。

您需要使用JtaTransactionManager并将JtaTransactionManager.getTransactionManager()的结果传递给Ehcache。

感谢 Louis Jacomet 的 ,我意识到我需要使用 JtaTransactionManager 而不是 JpaTransactionManager

我选择 Atomikos 因为 Ehcache 自动识别这个事务管理器并注册它而不需要自定义 TransactionManagerLookup.