Top / WebSphere / WASとJNDI

WebSphere のJNDIの設定方法(特にデータソース)

Java上のコーディング

(DataSource) ctx.lookup("java:comp/env/jdbc/DataSourceUserProfile");

のようにして、"java:comp/env/" をつけるようにしてください。*1 これを

(DataSource) ctx.lookup("jdbc/DataSourceUserProfile");

と書くと、サーバのデータソース名を直接指定したことになる(??) 実際、java:comp/env をつけた場合は、下記のバインディングという作業をしないとエラーが発生したのに対し、つけない場合はエラーが発生しなかった。

ejb-jar.xml or web.xml に追加

コード中で上のようにルックアップしているものをすべて、列挙する必要があります。

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

WSADならGUIでもできます。

web.xml >> 参照 >> リソース

を編集してください。 ここまでは、すべて、J2EE標準のやりかたです。

バインディング

上記のローカルルックアップしている名前(jdbc/DataSourceUserProfile?)を実際のDatasourceのJNDI名と対応させなければいけません。 これをしないと、

[03/05/19 21:04:34:027 JST] 1d728bcb Helpers       W NMSV0605W: コンテキスト "java:" から
名前 "comp/env/jdbc/DataSourceUserProfile" でルックアップされた参照オブジェクトが
JNDI Naming Manager に送信され、例外が発生しました。 参照データは次のとおりです:
参照ファクトリー・クラス名: com.ibm.ws.util.ResRefJndiLookupObjectFactory
参照ファクトリー・クラスの場所の URL: <null>
Reference Class Name: java.lang.Object
Type: ResRefJndiLookupInfo
Content: com.ibm.ws.util.ResRefJndiLookupInfo@38e08bcb
ResRefJndiLookupInfo: Look up Name="jdbc/DataSourceUserProfile";JndiLookupInfo:
jndiName=""; providerURL=""; initialContextFactory=""

という例外が発生しました。

このbindingの方法は、J2EEのSpec外ですので、各ApplicationServer?によって異なります。 WebSphereなら、このbinding情報は,WebApplication?の場合は

WEB-INF/ibm-web-bnd.xmi

に保存されます。普通はAATなり、WSADなり、または、deploy時にbinding情報をいろいろ聞かれるのでその情報を元に自動的につくられます。

WSADをつかっているのなら、web.xml のエディタ上でもつくれます。

web.xml >> 参照 >> リソース >> WebSphere バインディング

の個所を編集すると、WEB-INF/ibm-web-bnd.xmiがつくられます。

http://neverbird.sourceforge.jp/manual/fancy/ch07s02.html に参考になる情報があります。


http://neverbird.sourceforge.jp/manual/fancy/ch07s22.html によると、ローカルルックアップの意図は、
リソース参照は、サーブレット/JSPページ開発者が、リソースのデプロイ時のバインディングに依存しないENC(訳注:Environment Naming Context)からの相対名を定義できるようにします。 jboss-web.xmlディスクリプタは、そのデプロイメント記述で設定されているように、開発者が定義したリソース名からリソース ファクトリへの実際のJNDIバインディングへのマップをおこないます。
なんだそうです。

メモ。

PostgreSQLでエラーにならなかった設定。

  • JDBCドライバ
    実装クラス名org.postgresql.jdbc2.optional.ConnectionPool?
    クラスパスpg74.214.jdbc3.jar
  • DataSource?
    データソースのヘルパークラス名com.ibm.websphere.rsadapter.ConnectJDBCDataStoreHelper?

起動するといろいろエラーが。。

org.postgresql.util.PSQLException: The user property is missing. It is mandatory. が表示される
データソースからgetConnectionするときに、userid,passwordを指定する方のメソッドを使用する、もしくはデータソースのプロパティに
keyvalue
userユーザID
passwordパスワード
を指定する。
java.lang.reflect.InvocationTargetException?: org.postgresql.util.PSQLException: Transaction isolation level 4 is not supported.が表示される

この記事は

選択肢 投票
おもしろかった 26  
そうでもない 9  

Top / WebSphere / WASとJNDI

現在のアクセス:41176


*1 ローカルルックアップとかいうらしい

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-06-10 (火) 21:56:13 (1084d)