#author("2021-05-17T05:46:29+00:00","","")
#author("2022-12-22T03:53:35+00:00","","")
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。

*WebSphere のJNDIの設定方法(特にデータソース) [#rcbc59a7]
#contents

**Java上のコーディング [#e75b1cb8]
 (DataSource) ctx.lookup("java:comp/env/jdbc/DataSourceUserProfile");
のようにして、"java:comp/env/" をつけるようにしてください。((ローカルルックアップとかいうらしい))
これを
 (DataSource) ctx.lookup("jdbc/DataSourceUserProfile");
と書くと、サーバのデータソース名を直接指定したことになる(??)
実際、java:comp/env をつけた場合は、下記のバインディングという作業をしないとエラーが発生したのに対し、つけない場合はエラーが発生しなかった。


**ejb-jar.xml or web.xml に追加 [#w4ee9989]

コード中で上のようにルックアップしているものをすべて、列挙する必要があります。
 <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標準のやりかたです。


**バインディング [#wee1cb61]
上記のローカルルックアップしている名前(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バインディングへのマップをおこないます。~
なんだそうです。


**メモ。 [#yc89662a]

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

-JDBCドライバ
|実装クラス名|org.postgresql.jdbc2.optional.ConnectionPool|
|クラスパス|pg74.214.jdbc3.jar|

-DataSource
|データソースのヘルパークラス名|com.ibm.websphere.rsadapter.ConnectJDBCDataStoreHelper|


***起動するといろいろエラーが。。 [#g499e030]
:org.postgresql.util.PSQLException: The user property is missing. It is mandatory. が表示される|データソースからgetConnectionするときに、userid,passwordを指定する方のメソッドを使用する、もしくはデータソースのプロパティに
|BGCOLOR(#CCFFCC):LEFT:key|BGCOLOR(#CCFFCC):LEFT:value|
|LEFT:user|LEFT:ユーザID|
|LEFT:password|LEFT:パスワード|
を指定する。
:java.lang.reflect.InvocationTargetException: org.postgresql.util.PSQLException: Transaction isolation level 4 is not supported.が表示される|




----
この記事は
#vote(おもしろかった[28],そうでもない[10])
#vote(おもしろかった[29],そうでもない[10])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS