地理的に異なる場所にある4つのデータベースを使用するアプリケーションがあります。すべてのデータベースには同じテーブルが含まれ、データベース名のみが場所によって異なります。各データベースのデータを使用するアプリケーションでいくつかのレポートを作成する必要があります。 Javaアプリケーションからこれらのデータベース接続を作成する適切な方法は何でしょうか?私が使用できるこのタスクに適した設計パターンはありますか?
質問にhibernate
、JPA
、ORM
のいずれのタグも付けていないので、プレーンJDBCを扱っていると思います。
そうは言っても、基礎となるデータベースを処理するDAOレイヤーを用意し、接続の詳細は特定の実装に任せることをお勧めします。一部の.properties
ファイルで接続文字列を構成できます。
[補足]
DAOファクトリー、抽象ファクトリーまたはファクトリーメソッドパターンの実装のいずれかをここで使用することもできます。
[リンク]
これを実現する方法はいくつかあります。
デザインパターン:
HibernateなどのORMツールを使用すると、複数の接続を簡単に処理できます。各接続を個別の構成ファイルで指定し、毎回新しいセッションファクトリを取得することで必要な接続をインスタンス化できます。
他の方法は、データソースとJNDIを使用することです: Javaが複数のデータベースに接続しています
ファクトリーパターンとシングルトンパターンを組み合わせて使うといいと思います。
これを実現する理想的な方法は、OLAPのような多次元システムを使用することです。しかし、それらのデータベースからビューを作成できるかどうかを確認してください。次に、ビューをクエリするだけです(つまり、単一のデータベース接続)。また、必要に応じて、複数のデータベース接続を使用することもできます。
とても簡単です:)
1.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.クラスデータベースを作成します。この時点ですべての接続を閉じてください。
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();
}
}
よく見る。