サラリーマン技術者の調査レポート

日々の業務で気付いた当たり障りのない技術的なあれこれを綴ります。

デプロイメント記述子におけるJava型とリソース型の対応

Java EEのデプロイメント記述子(application.xmlweb.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.DataSourcejavax.jms.QueueConnectionFactoryresource-refになりますが、javax.jms.Queuemessage-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が設定される

便利ですね。