問題文
データベースに接続するメソッドで junit テストを実行できるようにしたいと考えています。
現在のセットアップ
Eclipse Java EE IDE – Java コードはフレームワークを使用していません。開発者 (私を含む) は、コードを Spring フレームワークに移行しようとする前に、現在のレガシー コードのより堅牢なテストを行い、その動作がまだ正しいことを途中で証明できるようにしたいと考えています。
JBoss 4.2 – ベンダー ソフトウェア ( Adobe LiveCycle ES2 ) によるバージョン制限。Java Web アプリケーションは、JBoss のこのセットアップを使用して実行し、Adobe LiveCycle API を利用します。
ベンダーが設定した JBoss を Eclipse 内で正常に実行することができませんでした。Adobe LiveCycle 用の JBoss の設定をサポートする会社に連絡するなど、これを試みるのに何週間も費やしました。おそらく、問題は Eclipse の設定でのメモリ制限の問題ですが、メモリ設定を変更しても、これまでのところ Eclipse 内で JBoss サーバーを正常に起動できませんでした。今のところ、JBoss を Eclipse 内で実行する試みは保留中です。
データベース接続は、JBoss が起動時にロードする JNDI データ ソースで定義されます。Web アプリケーションと Adobe LiveCycle の両方で、このデータ ソースへの接続を作成する必要があります。
コード
問題の核心に焦点を当てるために、このコード スニペットのエラー チェックとクラス構造について詳しく説明します。うまくいけば、それが他の人に問題を引き起こさないでしょう。角括弧内のテキストは実際のテキストではありません。
接続を作成するコードは次のようなものです。
Properties props = new Properties();
FileInputStream in = null;
in = new FileInputStream(System.getProperty("[Properties File Alias]"));
props.load(in);
String dsName = props.getProperty(“[JNDI data source name here]”);
InitialContext jndiCntx = new InitialContext();
DataSource ds = (DataSource) jndiCntx.lookup(dsName);
Ds.getConnection();
このコードに変更を加えることなく、このコードに依存するメソッドをテストできるようにしたいと考えています。
properties-service.xml ファイル内のプロパティ ファイル エイリアスへの参照:
<!-- ==================================================================== -->
<!-- System Properties Service -->
<!-- ==================================================================== -->
<!-- Allows rich access to system properties.-->
<mbean code="org.jboss.varia.property.SystemPropertiesService"
name="jboss:type=Service,name=SystemProperties">
<attribute name="Properties">
[Folder Alias]=[filepath1]
[Properties File Alias]=[filepath2]
</attribute>
</mbean>
filepath2 にあるプロパティ ファイルのスニペット
[JNDI data source name]=java:/[JNDI data source name]
このデータ ソースの JNDI xml ファイルは、次のように設定されます。
<datasources>
<local-tx-datasource>
<jndi-name>[JNDI data source name here]</jndi-name>
<connection-url>jdbc:teradata://[url]/database=[database name]</connection-url>
<driver-class>com.teradata.jdbc.TeraDriver</driver-class>
<user-name>[user name]</user-name>
<password>[password]</password>
<!-- sql to call on an existing pooled connection when it is obtained from pool -->
<check-valid-connection-sql>SELECT 1+1</check-valid-connection-sql>
</local-tx-datasource>
</datasources>
解決策がどこにあるのかについての私の考え
上記のコードが探しているプロパティを JBoss なしで利用できるようにするために @BeforeClass メソッドでできることはありますか? java.util.Properties クラスの setProperty メソッドを何らかの形で使用しているのでしょうか。また、構成設定の重複を減らすために、可能であれば JBoss が読み取るのと同じ JNDI xml ファイルを使用したいと考えています。
これまでのところ、私の調査はすべて「Spring を使用する」というアドバイスで終わっていますが、まだワームの缶を開ける準備ができていないと思います。私は JBoss の専門家ではありませんが、有益な回答を得るために JBoss セットアップの詳細が必要な場合は、それらを入手するために最善を尽くします。
Stackoverflow 調査の参考文献:
spring を使用した junit での Jndi ルックアップ
コンテナー外の JNDI データ ソース
その他の調査の参考文献:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Properties.html
http:/ /docs.oracle.com/javase/jndi/tutorial/basics/prepare/initial.html