1

コンプライアンス上の理由から、私の組織は、データベース接続設定をプロパティ/XML 構成ファイルから中央レジストリに取り込もうとしています。単一点障害を回避するために、理想的には複数の物理マシンにフェデレーションされます。

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

私たちのアプリはスタンドアロンであり、J2EE コンテナー内では実行されないことを付け加えておく必要があります。そのため、コンテナー固有の接続管理手法は特に役に立たない可能性があります。

4

3 に答える 3

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 パッケージにあります。

お役に立てれば。

于 2009-05-20T17:26:01.830 に答える
0

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

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

データベース接続設定で「水平に移動」する必要があるとは思えません。設定を 1 か所に置くとアプリケーションにリスクが生じる可能性があると考える具体的な理由はありますか?

于 2009-05-20T14:03:09.290 に答える
0

XML/プロパティ ファイルのアプローチに固執する方が簡単かもしれませんが、これらのファイルの内容を制御するために、ある種の集中構成管理システムを使用します。

おそらく、データソース構成などを一元化することを検討する必要がある場合は、オペレーティング システム構成ファイルを管理するための何か (CFEngine、puppet、chef、rdist など) が既に用意されているでしょう。

于 2009-05-20T16:22:03.440 に答える