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

Webコンテナ設定

Author:Scott Stark <Scott.Stark@jboss.org>

jboss-web.xmlとは何か?

Webアプリケーションをデプロイするには、標準web.xmlディスクリプタを使って(ほとんど)何から何まで設定しなければなりません。このファイルは、warアーカイブのWEB-INFディレクトリ内にバンドルされます。 このファイルの内容とシンタクスはservlet 2.2仕様書で定義されています。

その仕様書の重要なポイントはこのファイルにベンダー固有の設定を追加することを許していないということです。 web.xmlが大半のアプリケーションにとって十分であっても、デプロイメント記述にJBoss固有の情報を追加したいというケースもあるかもしれません。 これをおこなうにはWEB-INFディレクトリにjboss-web.xmlという名前の別のファイルを与えます。

次からのセクションはjboss-web.xmlファイルの最も一般的な使い方を扱います。 もっと詳細を知りたければ、このマニュアルのファイルセクションでjboss-web.dtdからDTDを取得してください。 そのDTDの図表示は図 7.2. jboss-web.xml DTDで与えられます。

図 7.2. jboss-web.xml DTD

リソース参照の宣言

リソース参照はリソース ファクトリ バインディングにリンクされます。 リソース参照は、サーブレット/JSPページ開発者が、リソースのデプロイ時のバインディングに依存しないENC(訳注:Environment Naming Context)からの相対名を定義できるようにします。 jboss-web.xmlディスクリプタは、そのデプロイメント記述で設定されているように、開発者が定義したリソース名からリソース ファクトリへの実際のJNDIバインディングへのマップをおこないます。 JDBC、MailならびにJMSリソースを参照するweb.xmlデスクリプタとそれに相当するjboss-web.xmlディスクリプタの例はこのようになります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
    <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>AServlet</servlet-class>
    </servlet>

    <!-- 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>
    <!-- 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>

</web-app>

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <resource-ref>
        <res-ref-name>jdbc/DefaultDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <jndi-name>java:/DefaultDS</jndi-name>
    </resource-ref>
    <resource-ref>
        <res-ref-name>mail/DefaultMail</res-ref-name>
        <res-type>javax.mail.Session</res-type>
        <jndi-name>java:/Mail</jndi-name>
    </resource-ref>
    <resource-ref>
        <res-ref-name>jms/QueFactory</res-ref-name>
        <res-type>javax.jms.QueueConnectionFactory</res-type>
        <jndi-name>QueueConnectionFactory</jndi-name>
    </resource-ref>
</jboss-web>

EJB参照の宣言

EJB参照(servlet 2.2仕様書、9.9, p45)は、サーブレットがBean Bのメソッドを呼び出すときにおこなわれます。この呼び出しはこのようになります。

public class AServlet extends HttpServlet
{
   ...
   protected void service(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException
   {
      ...
      InitialContext ctx = new InitialContext();  
      BHome home = (BHome) ctx.lookup("java:comp/env/ejb/myBean");
      B bean = home.create(pk);
      ...
    }
}

これを呼び出せるようにするには、サーブレットはデプロイメント記述でEJBへの参照を宣言しなければなりません。これはweb.xmlファイルの<ejb-ref>タグでおこなわれます。 内部参照と外部参照という二つのタイプの参照があります。

内部EJB参照

EJB参照は、サーブレットがBean Bと同じアプリケーションユニットにあるとき内部参照と呼ばれます。 これはサーブレットとEJBが物理的に同じearにパッケージされていることを意味します。 この場合、<ejb-link>タグを設定し、その値はBean Bの<ejb-name>に一致させなければなりません。 jboss-web.xmlファイルには何も設定する必要はありません。 web.xmlはこのようになります:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>AServlet</servlet-class>
    </servlet>

    <ejb-ref>
        <ejb-ref-name>ejb/BHome</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <home>BHome</home>
        <remote>B</remote>
        <ejb-link>Bean B</ejb-link>
    </ejb-ref>

</web-app>

これが動作するのはそのEJBがBHomeインタフェースのデフォルトバインディングを使っている場合だけですので注意してください。 つまり、Bがデプロイされたejb-jarは、デフォルトバインディングを変更するためにjboss.xmlデスクリプタを使用していないということです。 もしBがJNDIバインディングのデフォルトの場所を変更していないなら、そのBeanは次のセクションで説明されているように外部Beanとして扱われる必要があります。

外部EJB参照

EJB参照は、Bean Bが別のアプリケーションユニットから参照されるとき外部参照と呼ばれ、それは別のサーバにさえデプロイされるかもしれません。外部EJB参照は、同じアプリケーションユニットでもEJBからJNDIへの標準的でないバインディングのことも指します。 この場合、これらのBeanは同じファイルでカバーされないので、 web.xmlの標準<ejb-link>タグを信用してはいけません。 代わりに、jboss-web.xmlでBean Bの完全JNDI名を与えなければなりません。 完全名はこのような形式です。

protocol://host:1234/name/in/other/server

2つのXMLファイルの<ejb-ref-name>タグは一致しなければならないことに注意してください。

これは外部EJB参照を定義したweb.xmlとjboss-web.xmlの例です。

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>AServlet</servlet-class>
    </servlet>

    <ejb-ref>
        <ejb-ref-name>ejb/BHome</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <home>BHome</home>
        <remote>B</remote>
    </ejb-ref>
    <ejb-ref>
        <ejb-ref-name>ejb/RemoteBHome</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <home>BHome</home>
        <remote>B</remote>
    </ejb-ref>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <!-- A reference to an EJB in the same server with a custom JNDI binding -->
    <ejb-ref>
        <ejb-ref-name>ejb/BHome</ejb-ref-name>
        <jndi-name>someapp/ejbs/beanB</jndi-name>
    </ejb-ref>
    <!-- A reference to an EJB in an external server -->
    <ejb-ref>
        <ejb-ref-name>ejb/RemoteBHome</ejb-ref-name>
        <jndi-name>jnp://otherserver/application/beanB</jndi-name>
    </ejb-ref>
</jboss-web>

重要な注意: これはJBossにBean Bを探す場所を教えます。 あなたはBean Bが何であるかも教えなければなりません: 別アプリケーションへの外部EJB参照の場合、Bean Bのホームとリモートインタフェースをサーブレットのwarに必ず含めてください。

セキュリティドメインの宣言

jboss-web.xmlディスクリプタの最後の要素はsecurity-domainです。 これはWebクライアントの認証と認可をおこなうのに使われるセキュリティマネージャの実装のJNDI名を定義します。 この要素は、org.jboss.web.AbstractWebContainerの統合ポイントとそのセキュリティインタフェースを使うことで、JBossサーバに統合されたWebコンテナと一緒に使った場合だけ動作します。 現在、contributeされたTomcatとJettyの両方のWebコンテナがこれをサポートします。 security-domain要素を持つjboss-webの例はこのようになります。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <!-- Use the JaasSecurityMgr other security domain for authentication
      and authorization of secured web content.
     -->
    <security-domain>java:/jaas/other</security-domain>
</jboss-web>

セキュリティの設定の詳細は、JAAS HowToとJBossSXの章を参照してください。

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

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