0

I have two datasources that are equal in their structure but not in their Data. My application has to deal with both of them at the same time. I have controller, servie, dao structure that looks like this.

Controller Modell:

@Controller
public abstract class MyFancyControllerModell{
    private MyService service;

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

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

Controller implementation:

@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);
    }
}

And the Service:

public class MyService{
    private MyDao myDao;

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

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

I create the Beans in my configuration class like this:

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)));
}

My question is, is it possible to create transactionmanagers for both datasources without the need to declare in the service layer which transactionmanager is used?

I tried creating them as bean just like the services but that did not work.

lars-2A
  • 3
  • 2

1 Answers1

0

Check out here the answers for previous quesion related to transaction manager...

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

Vikas Suryawanshi
  • 522
  • 1
  • 5
  • 12
  • Thanks. At the moment our tomcats are not capable to handle JTA. So the idea was to find an other way arround. But it seemes that JTA is the only practical solution. So we have to reconfigure our tomcats. – lars-2A Jun 13 '17 at 12:37