[doc] [toc] [previous] [next]

リソース参照の宣言

Author:Vincent Harcq <vincent.harcq@hubmethods.com>

イントロダクション

リソースは主にBMP(Bean Managed Persistence、Bean管理による永続性)エンティティBeanまたはセッションBeanで使用するSQLデータソースオブジェクトにアクセスするために使われます。 データソースオブジェクトは、他のタイプのリソース、たとえばJavaMailセッションのようなリソースにアクセスするのにも使われます。

EJB仕様書はそのようなリソースを定義するデプロイメントのエントリを定義する方法を規定します。 JBossはそのような目的のためのjboss.xmlのエントリを定義します。それは、ejb-jar.xmlで指定されているリソース名からリソースの実際の実装へのポインタとしてみなすことができます。

ejb-jar.xml

EJB仕様書はejb-jar.xmlのデプロイメント記述を使うことで外部"リソース"へのアクセスを容易にします。 タグは<resource-ref>と、それが取る4つの引数<description>, <res-ref-name>, <res-type>そして<res-auth>です。

  • res-ref-name要素はリソースマネージャの接続ファクトリを指定します。

  • res-type要素はデータソースの型を指定します。その型は、データソースによって実装されることが期待されるJavaインタフェース(またはクラス)によって指定されます。

  • res-auth要素は、エンタープライズBeanのコードがリソースマネージャに対してプログラム的に承認をするのか、またはそのBeanのためにコンテナが承認をするのかということを指定します。後者の場合、コンテナはデプロイヤから提供される情報を使います。有効なエントリは"Container"と"Application"です。

Example:

    <!-- JDBC DataSources (java:comp/env/jdbc) -->
    <resource-ref>
        <description>The default DS</description>
        <res-ref-name>jdbc/DefaultDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    <!-- URL Connection Factories (java:comp/env/url) -->
    <resource-ref>
        <description>The default URL</description>
        <res-ref-name>url/defaultUrl</res-ref-name>
        <res-type>java.net.url</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    <!-- JavaMail Connection Factories (java:comp/env/mail) -->
    <resource-ref>
        <description>Default Mail</description>
        <res-ref-name>mail/DefaultMail</res-ref-name>
        <res-type>javax.mail.Session</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    <!-- JMS Connection Factories (java:comp/env/jms) -->
    <resource-ref>
        <description>Default QueueFactory</description>
        <res-ref-name>jms/QueFactory</res-ref-name>
        <res-type>javax.jms.QueueConnectionFactory</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

jboss.xml

jboss.xmlは、res-ref-nameエントリへの参照をリソースの実装へ導きます。 これは<resource-ref>でおこなわれ、それはタグの使われ方によって違った引数を取ります。 <resource-name>, <res-ref-name>, <res-type> そして <jndi-name>です。

  • res-ref-nameは常に設定されていて、ejb-jar.xml内のエントリに相当する値を取ります。

  • jndi-nameはJBossインストレーションにおけるリソースの一般的定義を指します。

  • res-urlはjava.net.URL型のリソースを定義するのに使われ、そのURLを定義します。

  • resource-nameはりソースマネージャへの新しいレベルの間接参照を導入します。

リソースマネージャは <resource-managers>内部でEJB JARのため にグローバルに定義され、<res-name>, <res-url>, <res-jndi-name>そして<res-class>         という違った引数を取ります。

  • res-nameは常に定義されなければならず、resource-refのresource-nameエントリに相当する値を取ります。

  • res-jndi-nameはJBossインストレーションにおけるリソースの一般的定義を指します。

  • res-urlはjava.net.URL型のリソースを定義するのに使われ、そのURLを定義します。

  • res-classは空白またはリソースに関するJavaの型です。

Example:

    <enterprise-beans>
        <session>
            ...
    	    <resource-ref>
                <res-ref-name>jdbc/DefaultDS</res-ref-name>
                <resource-name>DefaultDS</resource-name>
    	    </resource-ref>
    	    <resource-ref>
                <res-ref-name>url/defaultUrl</res-ref-name>
                <res-url>http://www.jboss.org/</res-url>
    	    </resource-ref>
    	    <resource-ref>
                <res-ref-name>url/otherUrl</res-ref-name>
                <resource-name>SourceforgeHomePage</resource-name>
    	    </resource-ref>
    	    <resource-ref>
                <res-ref-name>mail/DefaultMail</res-ref-name>
                <resource-name>DefaultMail</resource-name>
    	    </resource-ref>
    	    <resource-ref>
                <res-ref-name>jms/QueFactory</res-ref-name>
                <jndi-name>QueueConnectionFactory</jndi-name>
    	    </resource-ref>
    	    ...
        </session>
    </enterprise-beans>
    
    <resource-managers>
        <resource-manager res-class="">
            <res-name>DefaultDS</res-name>
            <res-jndi-name>java:/DefaultDS</res-jndi-name>
        </resource-manager>
        <resource-manager res-class="">
            <res-name>DefaultMail</res-name>
            <res-jndi-name>java:/Mail</res-jndi-name>
        </resource-manager>
        <resource-manager res-class="java.net.URL">
            <res-name>otherUrl</res-name>
            <res-url>http://sourceforge.net/</res-url>
        </resource-manager>
    </resource-managers>
この例はすべての場合で必要ではない複雑さを含んでいますので注意してください。リソースマネージャは指定する必要はありません。 JDBCデータソースの単純な例は次の通りです:
    <resource-ref>
    	<res-ref-name>jdbc/DefaultDS</res-ref-name>
    	<jndi-name>java:/DefaultDS</jndi-name>
    </resource-ref>

Beanからリソースにアクセスするには、次のようにしてください。

    InitialContext ic = new InitialContext();
    DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/DefaultDS");
または
    InitialContext ic = new InitialContext();
    DataSource ds = (DataSource) ic.lookup("jdbc/DefaultDS");

JDBCデータソース

JDBCデータソースのために、接続プールにバインドしたJNDI名があります。これはjboss.jcmlで次のように定義されます。

  <mbean code="org.jboss.jdbc.XADataSourceLoader" name="DefaultDomain:service=XADataSource,name=DefaultDS">
    <attribute name="PoolName">DefaultDS</attribute>
    ...
  </mbean>

JavaMailセッション

JavaMailセッションのために、JavaMailセッションにバインドしたJNDI名があります。これはjboss.jcmlで次のように定義されます。

  <mbean code="org.jboss.mail.MailService" name=":service=Mail">
    <attribute name="JNDIName">Mail</attribute>
    ...
  </mbean>

JMS接続ファクトリ

これはJBoss 2.2ではQueueConnectionFactory、JBoss 2.4ならConnectionFactoryです。

その他

あなた自身のリソースをMBeanとして定義して、EJBからそれらを使うことも可能です。 より詳細な例としては、Castorがあります。

[doc] [toc] [previous] [next]

Copyright © 2000 2001 JBoss Organization
Copyright © 2001 2002 日本語訳: Neverbird Project