2009-05-20 5 views
1

私の組織では、データベース接続設定をプロパティ/ XML設定ファイルから中央のレジストリに統合することを検討しています。複数の物理マシンにフェデレーションされているため、 。Javaにおける集中型DB接続管理

私はこれを達成するためにJNDIを使用する可能性を検討してきましたが、実際にはそれを自分で使用した経験はあまりありませんでした。誰も似たようなことをしようとした経験がありますか?またはこれがどのように達成されるかもしれないかについてのより良いアイデアですか?

私たちのアプリケーションはスタンドアロンであり、J2EEコンテナ内で実行されないので、コンテナ固有の接続管理手法は特に有用ではないかもしれません。

答えて

0

XML /プロパティファイルの手法を採用するのは簡単ですが、何らかの集中管理型の構成管理システムを使用して、これらのファイルの内容を制御する方が簡単かもしれません。

データソース設定のようなものを集中化することを検討する必要がある場合は、オペレーティングシステムの設定ファイルを管理するために、すでに何かを用意しています(CFEngine、puppet、chef、rdist、...)それを使う?

0

規制に準拠しようとしていますか?

あなたができることの1つは、JNDI経由で公開されているデータソースに依存することです。ただし、これは、接続設定がデータソースの設定のサイトにあることを意味します。

私はあなたがデータベース接続の設定で「水平にする」必要があるとは思っていません。ある場所で設定を行うと、アプリケーションにリスクが発生する可能性があると考えられる特定の理由はありますか?

1

これは良いスタートかもしれません:

HashMap<String,String> dsNames = new HashMap<String,String>(); 
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); 
    System.setProperty(Context.PROVIDER_URL, "file:/home/user/tmp"); 
    InitialContext ic = new InitialContext(); 
    dsNames.put("yourDataSourceName", "jdbc/your_jndi_name"); 
    // Construct BasicDataSource reference 
    Reference ref = new Reference("javax.sql.DataSource", 
      "org.apache.commons.dbcp.BasicDataSourceFactory", null); 
    ref.add(new StringRefAddr("driverClassName", "theDriver")); 
    ref.add(new StringRefAddr("url","theDBURL")); 
    ref.add(new StringRefAddr("username", "obvious")); 
    ref.add(new StringRefAddr("password", "obvious")); 
    ref.add(new StringRefAddr("maxActive", "10")); 
    ref.add(new StringRefAddr("maxIdle", "3")); 
    ref.add(new StringRefAddr("initialSize", "3")); 
    ref.add(new StringRefAddr("maxWait", "5")); 
    ic.rebind("jdbc/your_jndi_name", ref); 

    //And to get a reference to your data source anywhere else in your program: 
    InitialContext ic2 = new InitialContext(); 
    DataSource myDS = (DataSource) ic2.lookup(dsNames.get(dsName)); 

今、あなたが見ることができるように、私は、プールされた接続ファクトリを使用していますが、あなたはあなたのニーズに合わせてそれを置き換えることができます。また、初期コンテキストファクトリはFSContextです。つまり、JNDI名が通常のファイルシステムで検索され、URLコンテキストファクトリが使用可能である必要がありますが、これを使用したことはありません。使用されるほとんどのクラスは、javax.namingパッケージに含まれています。

これが役に立ちます。

関連する問題