2012-05-15 6 views
13

私は地理的に異なる4つのデータベースを使用するアプリケーションを持っています。すべてのデータベースには同じテーブルがあり、データベース名だけが場所によって異なります。 各データベースのデータを使用するアプリケーションでいくつかのレポートを作成する必要があります。どのような適切な方法は、Javaアプリケーションからこれらのデータベース接続を作成すると私は使用できるこのタスクのための適切なデザインパターンはありますか?Javaの異なるデータベースに複数のデータベース接続を作成する方法

答えて

7

hibernateJPAORMについては、私はあなたが、プレーンJDBCを扱っていると仮定します。

これは、基本的なデータベースを扱うためのDAOレイヤを用意し、特定の実装に接続の詳細を残すことをお勧めします。いくつかの.propertiesファイルに接続文字列を設定することができます。

[補完]

あなたがここにも合った方DAO工場、抽象工場や工場Mathodパターンの実装、利用することができます。

[リンク]

+0

ですが、どのように複数のDB接続がありますか? –

+0

@ munna:すべてのDAO実装は、そのデータソースを知っています。 –

1

これを達成する理想的な方法は、OLAPのような多次元システムを使用することです。しかし、それらのデータベースからビューを作成できるかどうかを確認してください。次に、ビューを照会するだけです(つまり、単一のデータベース接続)。また、必要に応じて複数のデータベース接続を使用することもできます。

1

HibernateのようなORMツールを使用すると、複数の接続を簡単に処理できます。各接続を別々の構成ファイルで指定し、毎回新しいセッションファクトリを取得して必要な接続をインスタンス化できます。私はあなたが目的でFactoryパターンとSingletonパターンの組み合わせを使用することができると思うJava connecting to multiple databases

他の方法は、データソースとJNDIを使用することです。

3

あなたがこれを達成することができ、複数の方法があります:あなたは、あなたがそこに機能を使用することができ、分散トランザクションをサポートする任意のJava EEコンテナを使用している場合

  1. が。
  2. プレーンなJDBCを使用している場合は、すべてのデータベースに対して独自の接続を維持する必要があります。 JDBCの場合 :
    1. は、すべての接続の詳細
    2. 抽象ジェネリックDAOを呼び出すことによって、あなたの目的のオブジェクトを与えるファサードを持ってを提供します。
    3. 接続に基づいてDAOを作成するファクトリがあります。
  3. 複数のデータベースの設定を使用できるHibernateなどのORMツールを使用します。 Tutorial
  4. Springを使用している場合、データベースごとに1つのデータソースを構成できます。 Docs

デザインパターン:

  • Facadeパターン - 複雑さと複数のデータベースの使用を隠すため。
  • 工場 - 自分でデータベース接続を管理する場合。
  • シングルトンは - あなたがこののいずれかであなたの質問にタグ付けされていないとして、データソース
0

は非常に簡単です:)

1.Createデータソースは、クラスのデータベースDB

public DataSource getDataSource(String db) throws Exception { 
DataSource dt = null; 
InitialContext ic = null; 
try { 
    if(db.trim().equals("you_database_name")) { 
     dt = (DataSource)ic.lookup("jdbc/connection_name"); 
    } else if(db.trim().equals("you_database_name")) { 
     dt = (DataSource) ic.lookup("jdbc/connection_name"); 
    } 
    return dt; 
} catch(NamingException n) { 
    throw new Exception("Err getDataSource (ServiceLocator) NamingException - " + n.getMessage()); 
} 

2.Createへの接続を試みる近いこの時点ですべての接続を覚えています。

public class DataBases { 
public YouNameDataSourceClass dataSrc; 
public DataBases() throws Exception { 
    super(); 
    dataSrc = new YouNameDataSourceClass.getDataSource(); 
} 
public Connection getConnectionAS400() throws Exception { 
    return locator.getDataSource("you_database_name").getConnection(); 
} 

public Connection getConnectionOracle() throws Exception { 
    return locator.getDataSource("you_database_name").getConnection(); 
} 

public Connection getConnectionSQLServer() throws Exception { 
    return locator.getDataSource("you_database_name").getConnection(); 
} 
} 

グッドルック。

関連する問題