0
私は、その構造では同じですがデータではない2つのデータソースを持っています。 私のアプリケーションは、両方のアプリケーションを同時に処理しなければなりません。 私はこのようなコントローラ、servie、DAOの構造を持っています。類似のデータソース用の複数のトランザクションマネージャーを作成する
コントローラーMODELL:
@Controller
public abstract class MyFancyControllerModell{
private MyService service;
public MyFancyControllerModell (MyService service){
this.service = service;
}
@RequestMapping(....)
public void editSomeData(String data){....}
}
コントローラの実装:
@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);
}
}
とサービス:
public class MyService{
private MyDao myDao;
public MyService(MyDao myDao){
this.myDao = myDao;
}
@Transactional
public void editSomeData(String data){...}
}
私はこのように私の構成クラスで豆を作成します。
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)));
}
私の質問は、どちらのtransactionmanagerが使用されているサービス層で宣言する必要なく、両方のデータソースのトランザクションマネージャを作成できますか?
サービスのようにBeanを作成しようとしましたが、うまくいきませんでした。
https://stackoverflow.com/q/1961566/7504001 –
感謝。現時点では、私たちのトムキャットはJTAを扱うことができません。だからアイデアは別の方法arroundを見つけることでした。しかし、JTAは実用的な唯一の解決策だと思われます。だから私たちはトムキャットを再構成する必要があります。 –