2009-05-13 8 views
14

私は、Spring MVC 2.5とHibernateを使用するWebアプリケーションで作業しています。複数のデータソースを使用するHibernate + Spring?

アプリケーションの要件の1つは、一部のオブジェクトを外部データベースにエクスポートできる必要があることです。私は既存のデータレイヤーを使用して、オブジェクトを外部ソースに保存するだけでよいかもしれません。

私はSpringとHibernateを初めて使いました。私はこれにどうやってアプローチすればいいのだろうかと思っています。今はすべてが自動的に注釈を介して配線されています。私は唯一の外部データへの接続をしたい

  1. を私は多分...新しいデータソース豆、および新しいのSessionFactory、およびトランザクションマネージャーを作成する必要があります推測する...しかし...よユーザーが特に「エクスポートしている」ときに使用できるソース。

  2. 私の方法でオートワイヤリングが行なわれますか?エクスポート処理のためにDAOをインスタンス化するとき、Springに適切なsessionFactoryを挿入するように指示するにはどうすればよいですか? (私はコンストラクタを使ってautowiringしています)私はプログラムでセッションファクトリ(etc)を作成し、DAOを手動でインスタンス化する必要がありますか?もしそうなら、これはautowire注釈を "上書き"するでしょうか?

私は誰かがちょうど仕事にこのような何かを得るための基本的なプロセスを通じて、私をステップ実行することができます場合、私は、特に上記の質問への回答を必要としないと思います。ありがとう!

+0

この質問は、この1にひどく似ています http://stackoverflow.com/questions/281247/nhibernate-one-base-class-several-mappings –

答えて

8

Spring環境で複数のデータソースとセッションファクトリを設定すること自体は問題にはなりませんが、自動配線の魅力はあまりありません。

あなたが選択する1オートワイヤリングを伝えるために@Qualifier注釈を使用することができますが、私はオートワイヤリングを使用して、その代わりに、明示的に<property>または<constructor-arg>を使用して、正しいデータソースとセッション工場を注入しないことをお勧めしたいです。

両方のデータソースがアプリケーションサーバーによって管理されている場合、両方のデータソース間でトランザクションマネージャが共有される可能性がありますが、両方のデータソースでトランザクションの整合性が要求されないように思えますデータソースごとに十分です。

+0

どのように両方のデータソース間のトランザクションマネージャを共有するのでしょうか?私はSessionFactoryのリストを取るセッター、またはそれに類するものを見ません。 –

+0

@NieldeWet:マルチデータソーストランザクションは、まったく異なる野球ゲームです。分散トランザクションは難しい。そのためには、JavaEEでのJTA実装のフルパワーが必要です。次に、SpringのJtaTransactionManagerを使用してアプリケーションと統合します。 – skaffman

24

春には、幸運にもこれに対応したソリューションとして、AbstractRoutingDataSourceがあります。基本的には複数のデータソースのファサードとして機能し、サブクラス化して、どのDataSourceを使用するか決定するために必要なロジックを実装することができます。いくつかの詳細はここにある:

http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/

これはあなたのデータソースルックアップ論理は正確に一つの場所で処理することを可能にします。 DAOレイヤーとSessionFactoryは調整する必要はありません。ただし、AbstractRoutingDataSourceのサブクラスをHibernate SessionFactoryに挿入する必要がある点が異なります。

+0

実行時にアクティブなデータソースが1つしかない場合は、これは正しいアプローチですか?私の場合は、クライアントごとに2 dbmsをサポートしていますが、それぞれ1つのサーバーしかサポートしていません。 –

+1

おそらく、そうではありません。 SpringのURLをSpringのPropertyPlaceholderConfigurerを使用して設定する必要があります。あなたはプロパティファイルや環境変数から読み込むことができます。 –

+0

これは私が最後にやったこととほぼ同じです。どのBeanがデータソースとして使用されたのかを選択するために使用されたプロパティを指定しました。私はそれをここに掲載しました(http://stackoverflow.com/questions/23915154/using-sqlserverconnectionpooldatasource-in-spring/23993098#23993098) –

関連する問題