
- はじめに
- アプリケーション・コンポーネントのネームスペース
- リソースの定義
- データソース リソース
- メッセージング・コネクタ・ファクトリ リソース
- メッセージング・デスティネーション リソース
- メール・セッション リソース
- コネクション・ファクトリ リソース
- 管理対象オブジェクト リソース
はじめに
データソースやJMSといったリソースの(アプリケーションサーバに依存しない) Jakarta EE 仕様内の定義方法まとめです。
アプリケーション・コンポーネントのネームスペース
リソースを定義する際には、そのスコープを考慮する必要があります。最初にアプリケーション・コンポーネントのスコープについて見ておきましょう。
アプリケーション・コンポーネントは4つの名前空間があり、それぞれ異なるスコープが定義されています。
java:comp- enterprise bean などのコンポーネント毎の名前空間で、コンポーネントを跨いで共有されない
- ただし、Webモジュール内のコンポーネントは独自の名前空間は持たず、共有される。これは歴史的な互換性維持のための仕様であり、Webモジュールでは
java:compとjava:moduleは区別されない
java:module- モジュール内のすべてのコンポーネントで共有される
- 例えば、単一の enterprise bean モジュール内の enterprise bean や、web モジュール内の全てのコンポーネントで共有される
java:app- 単一のアプリケーション(ear などの単一のデプロイ単位)内のコンポーネントで共有される
java:global- アプリケーションサーバにデプロイされた全てのアプリケーションで共有される
- サーバインスタンスで共有(複数サーバから成るクラスタ間を含む)
リソース参照およびリソース定義のJNDI名前空間のデフォルト値は、 java:comp/env です。一部のコンテキストは java:comp や java:module 名前空間で定義することができないものがあり、その場合はデプロイエラーとなります。
application.xml 記述子で宣言する環境項目は、java:app または java:global の JNDI 名を指定する必要があります(java:app/env/myString または java:global/someValue など)。
リソース定義で使用するJNDI名は、上記コンポーネントのネームスペースを把握した上で設定してください。多くの場合 java:app で定義することになるでしょう。
リソースの定義
代表的なリソースは、web.xml や ejb-jar.xml、application.xml、application-client.xml といったデプロイメント記述子で定義できる他、以下のアノテーションを利用して定義できます。
@DataSourceDefinition: data-source 要素@JMSConnectionFactoryDefinition: jms-connection-factory 要素@JMSDestinationDefinition: jms-destination 要素@MailSessionDefinition: mail-session 要素@ConnectionFactoryDefinition: connection-factory 要素@AdministeredObjectDefinition: administered-object 要素
これらのアノテーションで定義したリソース定義は、アプリケーションのデプロイ時に、デプロイメント記述子で上書きすることができるため、開発時に便利です。
アノテーションは、サーブレットや enterprise bean などのコンテナ管理クラスに付与することで有効化されます。
上記アノテーションは、いずれも、末尾に s を付けたアノテーションで、リソースを複数定義することもできます(例えば @DataSourceDefinitions など)
データソース リソース
デプロイメント記述子で以下の例のように定義できます。
<data-source> <name>java:app/MyDataSource</name> <class-name>com.example.MyDataSource</class-name> <server-name>myserver.com</server-name> <port-number>6689</port-number> <database-name>myDatabase</database-name> <user>lance</user> <password>secret</password> </data-source>
@DataSourceDefinition アノテーションを使用して定義することもできます。
@DataSourceDefinition( name="java:app/MyDataSource", className="com.example.MyDataSource", portNumber=6689, serverName="myserver.com", user="lance", password="secret")
persistence.xml を含めた定義例は以下を参照してください(Jakarta EE の場合は、javax -> jakarta へのネームスペースの読み替えが必要です)。
Jakarta EE Platform 仕様では、デフォルトのデータソース提供が課せられています。
ですので、データソース定義をせずとも、デフォルトのデータソースに java:comp/DefaultDataSource というJNDI名でアクセスすることができます。
メッセージング・コネクタ・ファクトリ リソース
デプロイメント記述子で以下の例のように定義できます。
<jms-connection-factory> <name>java:app/MyJMSCF</name> <interface-name>jakarta.jms.QueueConnectionFactory</interface-name> <resource-adapter>myJMSRA</resource-adapter> </jms-connection-factory>
@JMSConnectionFactoryDefinition アノテーションを使用して定義することもできます。
@JMSConnectionFactoryDefinition( name="java:app/MyJMSCF", interfaceName="jakarta.jms.QueueConnectionFactory", resourceAdapter="myJMSRA")
Jakarta EE Platform 仕様では、デフォルトのメッセージング・コネクタ・ファクトリ提供が課せられています。
ですので、データソース定義をせずとも、デフォルトのメッセージング・コネクタ・ファクトリに *java:comp/DefaultJMSConnectionFactory* というJNDI名でアクセスすることができます。
メッセージング・デスティネーション リソース
デプロイメント記述子で以下の例のように定義できます。
<jms-destination> <name>java:app/MyJMSDestination</name> <interface-name>jakarta.jms.Queue</interface-name> <resource-adapter>myJMSRA</resource-adapter> <destination-name>myQueue1</destination-name> </jms-destination>
@JMSDestinationDefinition アノテーションを使用して定義することもできます。
@JMSDestinationDefinition( name="java:app/MyJMSQueue", interfaceName="jakarta.jms.Queue", destinationName="myQueue1")
メール・セッション リソース
デプロイメント記述子で以下の例のように定義できます。
<mail-session> <name>java:app/mail/MySession</name> <store-protocol>imap</store-protocol> <transport-protocol>smtp</transport-protocol> <host>somewhere.myco.com</host> <user>linda</user> <password>secret</password> <from>some.body@myco.com</from> </mail-session>
@MailSessionDefinition アノテーションを使用して定義することもできます。
@MailSessionDefinition( name="java:app/mail/MySession", host="somewhere.myco.com", from="some.body@myco.com")
コネクション・ファクトリ リソース
デプロイメント記述子で以下の例のように定義できます。
<connection-factory> <name>java:app/myConnectionFactory</name> <interface-name>com.eis.ConnectionFactory</interface-name> <resource-adapter>MyEISRA</resource-adapter> </connection-factory>
@ConnectionFactoryDefinition アノテーションを使用して定義することもできます。
@ConnectionFactoryDefinition( name="java:app/myConnectionFactory", interfaceName="com.eis.ConnectionFactory", resourceAdapter="MyESRA")
管理対象オブジェクト リソース
リソースアダプタ固有の情報を管理する管理対象オブジェクトは、デプロイメント記述子で以下の例のように定義できます。
<administered-object> <name>java:app/MyAdminObject</name> <class-name>com.extraServices.AdminObject</class-name> <resource-adapter>myESRA</resource-adapter> </administered-object>
@AdministeredObjectDefinition アノテーションを使用して定義することもできます。
@AdministeredObjectDefinition( name="java:app/myAdminObject", className="com.extraServices.AdminObject", resourceAdapter="myESRA")

