デプロイメント記述子におけるJava型とリソース型の対応
Java EEのデプロイメント記述子(application.xml
やweb.xml
)でresource-ref
やらresource-env-ref
やらenv-entry
など、リソースを指定するタグがいくつかあります。それぞれいったい何が違うのでしょうか。
リソース型の選択方法
JSR-250によれば、参照するJavaのデータ型によってリソースを指定するタグを使い分けるそうです。
Javaのデータ型とリソース型の対応は以下のようになります。(JSR-250表2-4)
Java型 | 対応するリソース型 |
---|---|
java.lang.String | env-entry |
java.lang.Character | env-entry |
java.lang.Integer | env-entry |
java.lang.Boolean | env-entry |
java.lang.Double | env-entry |
java.lang.Byte | env-entry |
java.lang.Short | env-entry |
java.lang.Long | env-entry |
java.lang.Float | env-entry |
javax.xml.rpc.Service | service-ref |
javax.xml.ws.Service | service-ref |
javax.jws.WebService | service-ref |
javax.sql.DataSource | resource-ref |
javax.jms.ConnectionFactory | resource-ref |
javax.jms.QueueConnectionFactory | resource-ref |
javax.jms.TopicConnectionFactory | resource-ref |
javax.mail.Session | resource-ref |
java.net.URL | resource-ref |
javax.resource.cci.ConnectionFactory | resource-ref |
org.omg.CORBA_2_3.ORB | resource-ref |
リソースアダプターで定義されたそれ以外のconnection factory | resource-ref |
javax.jms.Queue | message-destination-ref |
javax.jms.Topic | message-destination-ref |
javax.resource.cci.InteractionSpec | resource-env-ref |
javax.transaction.UserTransaction | resource-env-ref |
その他すべて | resource-env-ref |
javax.sql.DataSource
やjavax.jms.QueueConnectionFactory
はresource-ref
になりますが、javax.jms.Queue
はmessage-destination-ref
になります。
単なる文字列をリソースとしてlookupしたい場合はenv-entry
を使います。
おまけ
例えば、デプロイメント記述子で以下のように指定すると
<env-entry> <env-entry-name>java:app/env/foo</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>bar</env-entry-value> </env-entry>
以下のJavaコードで"bar"
が取得できます。
@Resource(lookup = "java:app/env/foo") private String foo; // barが設定される
便利ですね。