RESTEAsyシリーズChapter 3 Installation/Clonfigurationインストール/構成

11870 ワード


RESTEAsyのインストールと構成の違いは、実行している環境によって異なります. JBoss AS 6-M 4(milestone 4)以降を実行している場合は、resteasyは完全に統合され、バインドされているので、少量の作業を行うだけです.異なる分散環境で実行している場合は、手動でインストールと構成が必要です.
 
3.1独立したResteasy
 
JBoss AS 6の外でresteasyを使用する場合は、resteasy.RESTeasyがWARファイルを配備しているので、サーブレットコンテナに依存するように手動でステップを組んで構成する必要があります.Mavenを使用してWARファイルを構築することを強くお勧めします.RESTEAsyは複数の異なるモジュールに分割されています.Mavenプロジェクトの例を見ることができます.この例はexamples/ディレクトリにあります.
 
また、RESTeasyをダウンロードして解凍すると、RESTeasyに必要なライブラリを含むlib/ディレクトリが表示されます.それらをあなたの/WEB-INF/libディレクトリにコピーします.JAX-RS注記付きのclassソースファイルとプロバイダを1つ以上のjarパッケージに入れて/WEB-INF/libに入れたり、元のclassファイルを/WEB-INF/classesに入れたりします.
 
RESTeasyは、WARファイルにサーブレット実装として配備されます.ダウンロードしたRESTeasyサンプルアイテムのWEB-INF/web.xmlを開くと、次のように表示されます.
 
<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <servlet-name>Resteasy</servlet-name>
        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.restfully.shop.services.ShoppingApplication</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Resteasy</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

 このResteasyのservletは、RESTeasyのいくつかの基本コンポーネントの初期化を担当します.
 
 
3.2. コンフィギュレーションスイッチ
Resteasy受信構成オプションは要素から来ています. 
 
表3.1
構成パラメータ名
デフォルト
説明
resteasy.servlet.mapping.prefix
no default
Resteasyのservlet-mapping構成のurl-patternが/*でない場合
resteasy.scan
false
WEB-INF/libディレクトリのjarファイルとWEB-INF/classesディレクトリの下に@ProviderとJAX-RS注記(@Path,@GET,@POST etc.)を識別するクラスリソースファイルを自動的にスキャンして登録します.
resteasy.scan.providers
false
@Providerクラスファイルをスキャンして登録
resteasy.scan.resources
false
JAX-RS系ソースファイルのスキャン
resteasy.providers
no default
@Providerの完全なクラス名を示すカンマで区切られたリストを登録します.
resteasy.use.builtin.providers
true
デフォルト登録の有無にかかわらず、@Providerクラスを内蔵します.(1.0-beta-5以降でのみ使用可能)
resteasy.resources
no default
JAX-RSを示す完全なクラス名のリストをカンマで区切って登録します
resteasy.jndi.resources
no default
登録したいJAX-RSリソース、カンマで区切られた参照オブジェクトのJNDI名
javax.ws.rs.Application
no default
仕様の移植可能な方法を起動するためのアプリケーションクラスの完全な名前
resteasy.media.type.mappings
no default
Replaces the need for an Accept header by mapping file name extensions (like .xml or .txt) to a media type. Used when the client is unable to use a Accept header to choose a representation (i.e. a browser). See JAX-RS Content Negotiation chapter for more details.
resteasy.language.mappings
no default
Replaces the need for an Accept-Language header by mapping file name extensions (like .en or .fr) to a language. Used when the client is unable to use a Accept-Language header to choose a language (i.e. a browser). See JAX-RS Content Negotiation chapter for more details
resteasy.document.expand.entity.references
true
Expand external entities in org.w3c.dom.Document files 
 
 
RESTEAsyで構成されているservlet-mappingのurl-patternに/*ではないマッピングがある場合は、RESTEAsyのservlet mapping接頭辞変数を設定する必要があります.
例ではurl-patternが次の場合です.
 
<servlet-mapping>
    <servlet-name>Resteasy</servlet-name>
    <url-pattern>/restful-services/*</url-pattern>
</servlet-mapping>

 ではResteasy-servlet.mappingのプレフィックスは次のとおりです.
 
<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/restful-services</param-value>
</context-param>

 
3.3. javax.ws.rs.core.Application
JAvax.ws.rs.core.Applicationクラスは標準的なJAX-RSクラスで、導入で情報を提供することができます.これは、すべてのJAX-RSルートリソースとプロバイダをリストした簡単なクラスです.
 
/**
* Defines the components of a JAX-RS application and supplies additional
* metadata. A JAX-RS application or implementation supplies a concrete
* subclass of this abstract class.
*/
public abstract class Application {
    private static final Set<Object> emptySet = Collections.emptySet();


    /**
    * Get a set of root resource and provider classes. The default lifecycle
    * for resource class instances is per-request. The default lifecycle for
    * providers is singleton.
    * <p/>
    * <p>Implementations should warn about and ignore classes that do not
    * conform to the requirements of root resource or provider classes.
    * Implementations should warn about and ignore classes for which
    * {@link #getSingletons()} returns an instance. Implementations MUST
    * NOT modify the returned set.</p>
    *
    * @return a set of root resource and provider classes. Returning null
    * is equivalent to returning an empty set.
    */
    public abstract Set<Class<?>> getClasses();


    /**
    * Get a set of root resource and provider instances. Fields and properties
    * of returned instances are injected with their declared dependencies
    * (see {@link Context}) by the runtime prior to use.
    * <p/>
    * <p>Implementations should warn about and ignore classes that do not
    * conform to the requirements of root resource or provider classes.
    * Implementations should flag an error if the returned set includes
    * more than one instance of the same class. Implementations MUST
    * NOT modify the returned set.</p>
    * <p/>
    * <p>The default implementation returns an empty set.</p>
    *
    * @return a set of root resource and provider instances. Returning null
    * is equivalent to returning an empty set.
    */
    public Set<Object> getSingletons() {
        return emptySet;
    }



}

 
アプリケーションでservlet init-paramを設定する必要があります.javax.ws.rs.Applicationは、アプリケーションを実現する完全に条件に合致するクラスです.例:
 
    <servlet>
        <servlet-name>Resteasy</servlet-name>
        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.restfully.shop.services.ShoppingApplication</param-value>
        </init-param>
    </servlet>

 
これらの設定がある場合は、クラスが重複して登録される可能性があるため、自動スキャン機能をオフにする必要があります.
 
3.4. RESTeasyはサーブレットContextListenerとして
RESTEAsyは使用可能 サーブレットContextListener代替 サーブレットは初期化を実行します.カスタムリスナーを作成している場合は、起動時にRESTEAsyと対話する必要がある場合は、それが必要になる可能性があります.この態様の一例は、RESTeasyとSpringの統合にSpringのサーブレットContextListenerが必要である.org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrapクラスは、ResteasyProviderFactoryおよびRegistryのインスタンスを構成するサーブレットContextListenerです.手に入れることができます ResteasyProviderFactoryと Registryの例は ServletContext attributes org.jboss.resteasy.spi.ResteasyProviderFactoryおよびorg.jboss.resteasy.spi.Registry.これらの例があれば RESTEAsyはインタフェースを登録してインタラクティブにプログラミングします.
 
    <web-app>
        <listener>
            <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
        </listener>
        <!-- ** INSERT YOUR LISTENERS HERE!!!! -->
        <servlet>
            <servlet-name>Resteasy</servlet-name>
            <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Resteasy</servlet-name>
            <url-pattern>/resteasy/*</url-pattern>
        </servlet-mapping>
    </web-app>

 
3.5. RESTEAsyはservlet Filterとして
Resteasyがservletとして動作する欠点は、.htmlや.jpegファイルのような静的リソースをJAX-RSサービスと同じディレクトリに持つことができないことです.Resteasyでは、実行の代わりにFilterとして使用できます.JAX-RSリソースリクエストのURLが見つからない場合、Resteasyはベースのservletコンテナに戻ってURLの解析を依頼します.
 
    <web-app>
        <filter>
            <filter-name>Resteasy</filter-name>
            <filter-class>org.jboss.resteasy.plugins.server.servlet.FilterDispatcher</filter-class>
            <init-param>
                <param-name>javax.ws.rs.Application</param-name>
                <param-value>com.restfully.shop.services.ShoppingApplication</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>Resteasy</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>

 
3.6. パッチJBoss AS 7
Resteasyと JBoss AS 7はバンドルされています.アップグレードが必要かもしれません ResteasyのAS 7.Resteasyの配布には、resteasy-jboss-modules-2.3.5.Final.zipという名前のzipファイルがあります.JBoss AS 7のトップディレクトリ(モジュール/ディレクトリ)で、ファイルを解凍し、最新のResteasyと最も偉大なResteasyの後ろにパッチを打つべきです.
 
3.7. JBoss AS 7の構成
 
Resteasyと JBoss AS 7は、Java EE 6をバンドルして完全に統合する必要がある.まず、少なくとも1つの空のweb.xmlファイルを提供する必要があります.もちろん、Web.xmlで任意のカスタムservlet、filter、security constraintを配置することができます.しかし、仕事の最小限のニーズは、空のweb.xmlファイルを作成することです.さらに、resteasyのcontext-paramsは、特定のresteasyプロパティをオン/オフにする場合に使用できます.
 
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"></web-app>

 
私たちは使っていないので jax-rs servletマッピングでは、@ApplicationPath注釈付きのアプリケーションクラスを定義する必要があります.空のクラスと単一のオブジェクトを返すと、WARはJAX-RS注釈リソースと供給クラスをスキャンします.
 
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/root-path")
public class MyApplication extends Application {
}

 
 "Restful Java"O'Reilly workbook AS 7例には既にResteasyの配布がある.ディレクトリexamples/oreilly-workbook-as 7で見つけることができます.
 
3.8. RESTEAsyログ
RESTEAsyはログをサポートし、 JAva.util.logging,Log 4 j,またはSlf 4 j.具体的なフレームワークをどのように選択するかは、次のアルゴリズムによって表されます.
 
log 4 jがアプリケーションのclasspathでlog 4 jを使用する場合 
slf 4 jがアプリケーションのclasspathにある場合、slf 4 j を使用する
JAva.util.loggingはデフォルトで、log 4 jとslf 4 jがclasspathにない場合
servletコンテキストパラメータresteasy.logger.typeがJULを設定すると、LOG 4 JまたはSLF 4 Jのデフォルトの動作が上書きされます. 
ログ・レコード・カテゴリは進行中の作業ですが、最初の設定は問題を解決しやすいはずです.現在、フレームワークでは、次のログ分類が定義されています.
 
表3.2
ぶんかつ
機能
org.jboss.resteasy.core
すべてのRESTEAsyコアアクティビティの実装を記録
org.jboss.resteasy.plugins.providers
すべてのRESTEAsyエンティティのアクティビティの記録
org.jboss.resteasy.plugins.server
すべてのRESTEAsyサーバでアクティブな実装を記録 
org.jboss.resteasy.specimpl
すべてのJAX-RS実装クラスのアクティビティを記録
org.jboss.resteasy.mock
すべてのRESTEAsyシミュレーションフレームワークアクティビティを記録