2

最近、JavaベースのWebアプリケーションをプレイしています。これが私が長い間理解できなかった障壁です。誰かがいくつかのヒントを与えることができることを願っています。

私の場合、事前設定に2つのxmlファイルを使用しました。1つは、URL、ユーザー名、パスワードなどを含むデータベースリソースの詳細であり、もう1つは、後でDOMを選択するための簡単なオプションです。事前設定にxmlファイルを使用する目的は、プログラムを可能な限り動的にすることです。したがって、データベースの1つで更新された場合は、ソースコードの代わりに2つのxmlファイルを変更するだけで済みます。

これを実現するには、データベースリソースベースのユーザーの選択を動的に割り当てる必要がありました。この目標を達成するための私の個人的なアイデアは、ControllerまたはServletクラスの次の手順を使用することです。

// get user's selected option from request, create Input object       
String userSelection = request.getParameter("title");
Input userInput = new Input(userSelection);     

// open user selection options xml inside Input class
Document doc = dBuilder.parse(xmlFile); 

// get matched option and set database name inside Input class
if(userSelectoin.equals(doc.getElementByTagName("desiredTitle"))
{
   userInput.setDB(doc.getElementByTagName("dbname");  
}

// use resource injection to get all details of corresponding database in database xml
@Resource(name=userInput.getDB())
public void doConnection()
{
   DataSource myDB;
   Connection myConn = myDB.getConnection(); 
}

障壁は4番目の手順にあります。リソースインジェクションの場合、その名前には。などの定数文字列が必要@Resource(name="myDB1")です。ただし、トレードオフとして、プログラムがまったく動的にならない可能性があります。私の質問は、Javaで最終的な文字列を設定して取得する方法です。それとも、目標を達成するための他の可能な解決策はありますか?

Eclipseからのエラーメッセージは、「アノテーション属性Resource.nameの値は定数式である必要があります」です。

4

2 に答える 2

0

動的データソースの場合、jndiリソースを使用する方がはるかに良いでしょう。

web.xmlでデータソースを定義します

<resource-ref>
    <description>My DataSource</description>
    <res-ref-name>jdbc/myDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

次に、コントローラーで:

@Resource(name="jdbc/myDS")
private DataSource myDS;

public void doSomething() {
  Connection conn = myDS.getConnection();
  ...
}

次に、アプリケーションサーバーがその構成でデータソースを定義し(通常はコンソールを介して)、データベース構成をアプリから完全に分離し、通常は無料で接続プールを提供します。

于 2013-02-01T08:10:18.947 に答える
0

zvzdhkが彼の提案で述べたことに従って、実行時に動的データベース選択を正常に実装しました。以下のコードは私の実装の詳細です:

Connection conn = null; 
Context ctx = new InitialContext();
DataSource ds = (DatSource)ctx.lookup("java:com/env"+userInput.getDB());

if(ds != null)
{
    conn = ds.getConnection();
}

注:databsourcesプールをWebContent / META-INF/context.xmlまたはtomcat/config/context.xmlの下に設定することを忘れないでください。同時に、jdbcドライブのjarファイルをtomcat /lib/フォルダーにコピーします。MySQLを使用している場合は、mysql-connector-java.jarになります。IBM DB2を使用している場合は、db2jcc.jar、db2jcc4.jar、およびdb2jcc_license_cu.jarになります。

この答えが他の人を助けることができることを願っています。これが私が見つけた最高のリソースです。お気軽にご覧ください。それはプロジェクトだけでなくあなた自身にも利益をもたらします。JavaWebアプリケーションとの最適なデータベース接続を選択してください

于 2013-02-06T09:35:10.840 に答える