0

ich eine Methode, ein in einer Klasse A, dieFrühling SDN 4.1 und @Async auf @Transactional Methode

@Service 
public class A { 
    private B classB; 
    ... 

    @Async 
    @Transactional 
    public void a() { 
     classB.b(); 
    } 
} 

@Service 
public class B { 
    ... 

    @Transactional 
    public void b() { 
     // load some nodes from neo4j db by GraphRepository 
    } 
} 

dies ein Verfahren, b in einer Klasse B nennt, ist meine Neo4j Konfiguration

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

Entsprechend der Async Annotation setze ich den Scope-Wert auf prototype, aber es funktioniert nicht immer noch.

org.neo4j.ogm.exception.TransactionManagerException: Transaktion ist nicht aktuell für diesen Thread bei org.neo4j.ogm.session.transaction.DefaultTransactionManager.commit (DefaultTransactionManager.java:100) ~ [Neo4j-OGM -core-2.0.1.jar :?] bei org.neo4j.ogm.transaction.AbstractTransaction.commit (AbstractTransaction.java:83) ~ [neo4j-ogm-api-2.0.2.jar :?] bei org .neo4j.ogm.drivers.bolt.transaction.BoltTransaction.commit (BoltTransaction.java:80) ~ [neo4j-ogm-bolt-driver-2.0.2.jar :?] unter org.springframework.data.neo4j.transaction .Neo4jTransactionManager.commit (Neo4jTransactionManager.java:50) ~ [spring-data-neo4j-4.1.1.RELEASE.jar :?] unter org.springframework.tran saction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning (TransactionAspectSupport.java:485) ~ [spring-tx-4.2.5.RELEASE.jar: 4.2.5.RELEASE] unter org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction (TransactionAspectSupport. java: 291) [spring-tx-4.2.5.RELEASE.jar: 4.2.5.RELEASE] bei org.springframework.transaction.interceptor.TransactionInterceptor.invoke (TransactionInterceptor.java:96) ~ [spring-tx-4.2 .5.RELEASE.jar: 4.2.5.RELEASE] unter org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179) ~ [spring-aop-4.2.5.RELEASE.jar: 4.2.5 .RELEASE] bei org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor.intercept (CglibAopProxy.java:655) ~ [feder-aop-4.2.5.RELEASE.jar: 4.2.5.RELEASE]

Ich habe die gleiche Technik mit einem anderen Projekt mit SDN 4.0.0 verwendet und es ist Arbeit.

Kann ein Fehler in SDN 4.1.1 und Ogm 2.0.3 sein?

Antwort

1

Erstens, haben Sie @EnableAsync mit Ihrer @Configuration Klasse aktiviert?

Zweitens, wenn Sie Spring Web-MVC oder eine Feder bewusst Web-Anwendung verwenden, müssen Sie nicht ändern das Verhalten des Umfangs der Sitzung, so dass Sie nur diese Zeile entfernen können.

Schließlich, da Sie @Async mit @Transactional verwenden, müssen Sie auch sicher, dass Sie EnableTransactionManagement(proxyTargetClass=true) auf Ihre @Configuration Klasse machen.

Wenn Sie feststellen, dass Ihre Probleme nicht selber versuchen Upgrade nicht beheben (nach allen oben genannten tun) zu SDN 4.2.0-SNAPSHOT-BUILD

@Async in Spring