0

At the moment I am trying to migrate from SDN3 to SDN4. In my project I use two databases: Neo4j and MySQL, so I end up with chained transaction manager. However, after migration I have problem with its configuration. Before the migration I had this:

@Bean(name = "transactionManager")
@Autowired
public PlatformTransactionManager neo4jTransactionManager(
        LocalContainerEntityManagerFactoryBean entityManagerFactory, GraphDatabaseService graphDatabaseService)
                throws Exception {
    JtaTransactionManager neoTransactionManager = new JtaTransactionManagerFactoryBean(graphDatabaseService)
            .getObject();
    neoTransactionManager.setRollbackOnCommitFailure(true);
    neoTransactionManager.setAllowCustomIsolationLevels(true);
    JpaTransactionManager mysqlTransactioNmanager = new JpaTransactionManager(entityManagerFactory.getObject());
    return new ChainedTransactionManager(mysqlTransactioNmanager, neoTransactionManager);
}

Now I have something like this:

    @Bean(name = "transactionManager")
@Autowired
public PlatformTransactionManager neo4jTransactionManager(
        LocalContainerEntityManagerFactoryBean entityManagerFactory, Neo4jTransactionManager neo4jTransactionManager)
                throws Exception {
    Neo4jTransactionManager neoTransactionManager = neo4jTransactionManager;
    JpaTransactionManager mysqlTransactioNmanager = new JpaTransactionManager(entityManagerFactory.getObject());
    return new ChainedTransactionManager(mysqlTransactioNmanager, neoTransactionManager);
}

However, project could not be deployed on server, because of this exception:

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: public org.springframework.transaction.PlatformTransactionManager com.project.config.ApplicationConfig.neo4jTransactionManager(org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,org.springframework.data.neo4j.transaction.Neo4jTransactionManager) throws java.lang.Exception; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.data.neo4j.transaction.Neo4jTransactionManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

When mentioned part of configuration is commented project is properly deployed, but obviously there is an exception concerning missing transaction during save to MySQL database. How should I configure this chained transaction manager in SDN4? It is hard to find any examples now, because SDN4 is quite recent and I really need to have Neo4j in standalone mode, so migration seems to be a good idea.

Cob
  • 171
  • 10

1 Answers1

0

With this configuration I managed to successfully deploy my application:

@Bean(name = "transactionManager")
@Autowired
public PlatformTransactionManager neo4jTransactionManager(
        LocalContainerEntityManagerFactoryBean entityManagerFactory,
        Session session) throws Exception {
    Neo4jTransactionManager neoTransactionManager = new Neo4jTransactionManager(session);
    JpaTransactionManager mysqlTransactioNmanager = new JpaTransactionManager(entityManagerFactory.getObject());
    return new ChainedTransactionManager(mysqlTransactioNmanager,neoTransactionManager);
}

I had also to add this element to my config:

@Override
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
    return super.getSession();
}
Cob
  • 171
  • 10