3

Oracle 10G データベースに接続し、そこからデータを読み取り、SQL Server データベースに接続してデータをテーブルに書き込むデーモン ベースの Java プロセス (Web ベースではない) を作成する必要があります。

簡単に聞こえますが、これについていくつか質問があります。

  • 2 つの jdbc ドライバーが必要です。つまり、1 つは Oracle データベースに接続するため、もう 1 つは SQL Server データベースに接続するためです。SQL Server jdbc ドライバーは jtds jdbc ドライバー ( http://jtds.sourceforge.net/ ) であり、Oracle i では標準の oracle jdbc ドライバーを使用します。クラスパスで両方のドライバーを一緒に使用すると、問題が発生する可能性がありますか?

  • 私の推測では、必要なのは、接続を管理するための ConnectionManager クラスと、Oracle からの読み取りか SQL Server への書き込みかに応じて、必要な接続を取得するために関連するメソッドを呼び出すクライアント DAO クラスだけです。これは合理的なアプローチですか、それともより良い設計/パターンがありますか?

編集

わかりました、簡単な設計ソリューションをまとめようとしました。下の画像を参照してください

私が抱えていると思う問題は、コミットする方法です。加工の流れはこちら

  • InvoiceBD はファクトリ クラスから Oracle 接続を取得し、Oracle 接続オブジェクトを渡して InvoiceUploadDAO.readData を呼び出します。
  • InvoiceBD はファクトリ クラスから SQL Server 接続を取得し、InvoiceUploadDAO.writeData を呼び出して SQL Server 接続オブジェクトを渡します。
  • InvoiceBD は、Oracle 接続を再利用して InvoiceUploadDAO.update ステータスを呼び出し、Or​​acle データベースのステータスを「完了」に設定します。

InvoiceBD は Oracle 接続をコミットします。InvoiceBD は SQL Server 接続をコミットします。

または、何か問題が発生した場合、両方の接続オブジェクトがロールバックされます。

それは正しいと思いますか?

ありがとう

4

2 に答える 2

4

クラスパスで両方のドライバーを一緒に使用すると、問題が発生する可能性がありますか?

ありそうもない。このDriverManager.getConnectionメソッドは、実際には、接続の構築をそれに登録されているすべてのドライバーに委任します。JDBC URL のプロトコルを認識するドライバーのみが接続を返します。JDBC 仕様には次のように記載されています。

DriverManager接続を確立しようとすると、そのドライバの接続メソッドが呼び出され、ドライバに URL が渡されます。Driver 実装が URL を理解すると、オブジェクトが返されますConnection。それ以外の場合は を返しますnull

...

JDBC URL の形式は次のとおりです。

jdbc:<subprotocol>:<subname>

jTDS と Oracle (シン) ドライバーの場合、プロトコル形式が異なるため、問題が発生することはありません。ただし、同じドライバーの複数のバージョンを配置しないでください。

これは合理的なアプローチですか、それともより良い設計/パターンがありますか?

を探していDataSourceます。DataSource は、Java SE アプリケーションではなく、Java EE 環境で使用できます。ただし、独自の DataSource または同様のクラスを構築することはできます。DataSource インターフェイス自体を実装する必要はありませんが、同様のことを行うことができます。あなたのコンテキストでは、ConnectionManager接続先のデータベースを区別するパラメーターを受け入れる可能性があるため、あなたのクラスは DataSource の役割を引き受けます。接続プールが必要な場合に備えて、接続プールの使用を検討できます (データベースへの接続が 1 つしか必要ない場合はありそうにありません)。

SQLクエリが異なる状況により適していますが、DAOクラスを構築する@duffymoのアプローチを採用することもできます。

于 2011-06-18T17:29:54.290 に答える
3
  1. クラスパスの両方のドライバーに問題はありません。読み取りと書き込みを 1 つのトランザクションにする必要がある場合は、両方に XA ドライバーを使用することを検討してください。2 フェーズ コミットが必要な場合は、両方に XA ドライバーが必要です。
  2. 2 つの DAO インスタンスが必要です。1 つは Oracle 読み取り用、もう 1 つは SQL Server 書き込み用です。
于 2011-06-18T16:32:48.107 に答える