2017-06-13 2 views
0

Ich habe zwei Datenquellen, die in ihrer Struktur gleich sind, aber nicht in ihren Daten. Meine Anwendung muss mit beiden gleichzeitig umgehen. Ich habe Controller, Servie, DAO-Struktur, die so aussieht.spring mehrere transactionmanager für ähnliche Datenquellen

Controller-Modell:

@Controller 
public abstract class MyFancyControllerModell{ 
    private MyService service; 

    public MyFancyControllerModell (MyService service){ 
     this.service = service; 
    } 

    @RequestMapping(....) 
    public void editSomeData(String data){....} 
} 

Controller-Implementierung:

@Controller 
@RequestMapping(...) 
public class MyControllerImpl1 extends MyFancyControllerModell{ 
    @Autowired 
    public MyControllerImpl1(@Qualifier("myServiceInstance1") MyService service){ 
     super(service); 
    } 
} 

@Controller 
@RequestMapping(...) 
public class MyControllerImpl2 extends MyFancyControllerModell{ 
    @Autowired 
    public MyControllerImpl2(@Qualifier("myServiceInstance2") MyService service){ 
     super(service); 
    } 
} 

Und der Service:

public class MyService{ 
    private MyDao myDao; 

    public MyService(MyDao myDao){ 
     this.myDao = myDao; 
    } 

    @Transactional 
    public void editSomeData(String data){...} 
} 

ich die Bohnen in meiner Konfiguration Klasse wie folgt zu erstellen:

private DataSource lookupDataSource(final String jndiName) { 
    final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup(); 
    dsLookup.setResourceRef(true); 
    return dsLookup.getDataSource(jndiName); 
} 

@Bean 
public DataSource dataSource1(){ 
    return lookUpDataSource("dataSource1"); 
} 

@Bean 
public DataSource dataSource2(){ 
    return lookUpDataSource("dataSource2"); 
} 

@Bean 
public MyService myServiceInstance1(@Qualifier("dataSource1") DataSource dataSource){ 
    return new(MyService(new MyDao(dataSource)))); 
} 

@Bean 
public MyService myServiceInstance1(@Qualifier("dataSource1") DataSource dataSource){ 
    return new(MyService(new MyDao(dataSource))); 
} 

Meine Frage ist, ist es möglich, Transaktionsmanager für beide Datenquellen zu erstellen, ohne in der Serviceebene zu deklarieren, welcher Transaktionsmanager verwendet wird?

Ich habe versucht, sie als Bean wie die Dienste zu erstellen, aber das hat nicht funktioniert.

Antwort

0

Markieren Sie hier die Antworten auf vorherige quesion zu Transaktions-Manager ...

https://stackoverflow.com/a/1961853/7504001

+0

https://stackoverflow.com/q/1961566/7504001 –

+0

Dank im Zusammenhang aus. Im Moment sind unsere Kater nicht in der Lage, mit JTA umzugehen. Die Idee war also, einen anderen Weg zu finden. Aber es scheint, dass JTA die einzige praktische Lösung ist. Also müssen wir unsere Kater neu konfigurieren. –

Verwandte Themen