<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 24249 -->
<sect1 id="zend.queue.adapters">
    <title>アダプタ</title>

    <para>
        <classname>Zend_Queue</classname>は、
        インターフェース<classname>Zend_Queue_Adapter_AdapterInterface</classname>を実装する
        すべての待ち行列をサポートします。
        以下のメッセージ待ち行列サービスがサポートされます:
    </para>

    <itemizedlist>
        <listitem>
            <para>
                <ulink url="http://activemq.apache.org/">Apache ActiveMQ</ulink>.
            </para>
        </listitem>

        <listitem>
            <para>
                <classname>Zend_Db</classname>を経たデータベースによる待ち行列
            </para>
        </listitem>

        <listitem>
            <para>
                <classname>Memcache</classname>による
                <ulink url="http://memcachedb.org/memcacheq/">MemcacheQ</ulink>待ち行列
            </para>
        </listitem>

        <listitem>
            <para>
                <ulink url="http://www.zend.co.jp/product/zendplatform.html">Zend Platform</ulink>
                のジョブキュー。
            </para>
        </listitem>

        <listitem>
            <para>
                内部配列。ユニットテストに役立ちます。
            </para>
        </listitem>
    </itemizedlist>

    <note id="zend.queue.adapters.limitations">
        <title>限定事項</title>

        <para>
            メッセージ・トランザクション処理は、サポートされません。
        </para>
    </note>

    <sect2 id="zend.queue.adapters.configuration">
        <title>固有のアダプタ - 設定の構成</title>

        <para>
            デフォルトの設定が示される場合は、パラメータは任意です。
            デフォルトの設定が指定されない場合は、パラメータが必要です。
        </para>

        <sect3 id="zend.queue.adapters.configuration.activemq">
            <title>Apache ActiveMQ - Zend_Queue_Adapter_Activemq</title>

            <para>
                ここでリストされたオプションは、既知の必須条件です。
                すべてのメッセージ発信サーバが、
                ユーザー名またはパスワードを必要とするというわけではありません。
            </para>

            <itemizedlist>
                <listitem>
                    <para>
                         <emphasis>$options['name'] = '/temp/queue1';</emphasis>
                    </para>

                    <para>
                        これは、使い始めたい待ち行列の名前です。（必須）
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>$options['driverOptions']['host'] = 'host.domain.tld';</emphasis>
                    </para>

                    <para>
                        <emphasis>$options['driverOptions']['host'] = '127.0.0.1';</emphasis>
                    </para>

                    <para>
                        ホストをIPアドレスまたはホスト名にセットするかもしれません。
                    </para>

                    <para>
                        ホストのデフォルトの設定は '127.0.0.1' です。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>$options['driverOptions']['port'] = 61613;</emphasis>
                    </para>

                    <para>ポートのデフォルトの設定は 61613 です。</para>
                </listitem>

                <listitem>
                    <para>
                         <emphasis>$options['driverOptions']['username'] = 'username';</emphasis>
                    </para>

                    <para>
                        一部のメッセージ発信サーバのために選択できます。
                        メッセージ発信サーバのためのマニュアルを読んでください。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>$options['driverOptions']['password'] = 'password';</emphasis>
                    </para>

                    <para>
                        一部のメッセージ発信サーバのために選択できます。
                        メッセージ発信サーバのためのマニュアルを読んでください。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>$options['driverOptions']['timeout_sec'] = 2;</emphasis>
                    </para>

                    <para>
                        <emphasis>$options['driverOptions']['timeout_usec'] = 0;</emphasis>
                    </para>

                    <para>
                        これは、<classname>Zend_Queue_Adapter_Activemq</classname>がメッセージを返さない前に
                        ソケットで読み取り活動を待つ時間です。
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>

        <sect3 id="zend.queue.adapters.configuration.Db">
            <title>Db - Zend_Queue_Adapter_Db</title>

            <para>
                ドライバオプションは、多少の必須のオプションのためにチェックされます。
                （例えば<emphasis>type</emphasis>、<emphasis>host</emphasis>、<emphasis>username</emphasis>、
                <emphasis>password</emphasis>と<emphasis>dbname</emphasis>）
                <varname>$options['driverOptions']</varname>でパラメータとして、
                <methodname>Zend_DB::factory()</methodname>のために付加パラメータに沿って渡すかもしれません。
                ここでは一覧に示されていませんが、
                渡すことができる付加的なオプションは<emphasis>port</emphasis>でしょう。
            </para>

            <programlisting language="php"><![CDATA[
$options = array(
    'driverOptions' => array(
        'host'      => 'db1.domain.tld',
        'username'  => 'my_username',
        'password'  => 'my_password',
        'dbname'    => 'messaging',
        'type'      => 'pdo_mysql',
        'port'      => 3306, // optional parameter.
    ),
    'options' => array(
        // 更新のためにZend_Db_Selectを使います。
        // 全てのデータベースがこのフィーチャをサポートできるわけではありません。
        Zend_Db_Select::FOR_UPDATE => true
    )
);

// データベース待ち行列を作成
$queue = new Zend_Queue('Db', $options);
]]></programlisting>

            <itemizedlist>
                <listitem>
                    <para>
                         <emphasis>$options['name'] = 'queue1';</emphasis>
                    </para>

                    <para>
                        これは、使い始めたい待ち行列の名前です。（必須）
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>$options['driverOptions']['type'] = 'Pdo';</emphasis>
                    </para>

                    <para>
                        <emphasis>type</emphasis>は、
                        <methodname>Zend_Db::factory()</methodname>を
                        使ってもらいたいアダプタです。
                        これは、<methodname>Zend_Db::factory()</methodname>
                        クラス・メソッド呼び出しの最初のパラメータです。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>$options['driverOptions']['host'] = 'host.domain.tld';</emphasis>
                    </para>

                    <para>
                        <emphasis>$options['driverOptions']['host'] = '127.0.0.1';</emphasis>
                    </para>

                    <para>ホストをIPアドレスまたはホスト名にセットするかもしれません。</para>

                    <para>ホストのデフォルトの設定は '127.0.0.1' です。</para>
                </listitem>

                <listitem>
                    <para>
                         <emphasis>$options['driverOptions']['username'] = 'username';</emphasis>
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>$options['driverOptions']['password'] = 'password';</emphasis>
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>$options['driverOptions']['dbname'] = 'dbname';</emphasis>
                    </para>

                    <para>
                        必須のテーブルを作成したデータベース名。
                        下記の注意部分を見てください。
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>

        <sect3 id="zend.queue.adapters.configuration.memcacheq">
            <title>MemcacheQ - Zend_Queue_Adapter_Memcacheq</title>

            <itemizedlist>
                <listitem>
                    <para>
                         <emphasis>$options['name'] = 'queue1';</emphasis>
                    </para>

                    <para>
                        これは、使い始めたい待ち行列の名前です。（必須）
                    </para>
                </listitem>

                <listitem>
                    <para>
                         <emphasis>$options['driverOptions']['host'] = 'host.domain.tld';</emphasis>
                    </para>

                    <para>
                         <emphasis>$options['driverOptions']['host'] = '127.0.0.1;'</emphasis>
                    </para>

                    <para>ホストをIPアドレスまたはホスト名にセットするかもしれません。</para>

                    <para>ホストのデフォルトの設定は '127.0.0.1' です。</para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>$options['driverOptions']['port'] = 22201;</emphasis>
                    </para>

                    <para>ポートのデフォルトの設定は 22201 です。</para>
                </listitem>
            </itemizedlist>
        </sect3>

        <sect3 id="zend.queue.adapters.configuration.platformjq">
            <title>Zend Platform ジョブキュー - Zend_Queue_Adapter_PlatformJobQueue</title>

            <itemizedlist>
                <listitem>
                    <para>
                         <emphasis>$options['daemonOptions']['host'] = '127.0.0.1:10003';</emphasis>
                    </para>

                    <para>
                        利用したい Zend Platform ジョブキューデーモンに対応するホスト名とポート。（必須）
                    </para>
                </listitem>

                <listitem>
                    <para>
                         <emphasis>$options['daemonOptions']['password'] = '1234';</emphasis>
                    </para>

                    <para>
                        Zend Platform ジョブキューデーモンにアクセスするために必要なパスワード。（必須）
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>

        <sect3 id="zend.queue.adapters.configuration.array">
            <title>配列 - Zend_Queue_Adapter_Array</title>

            <itemizedlist>
                <listitem>
                    <para>
                         <emphasis>$options['name'] = 'queue1';</emphasis>
                    </para>

                    <para>
                        これは、使い始めたい待ち行列の名前です。（必須）
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>
    </sect2>

    <sect2 id="zend.queue.adapters.notes">
        <title>アダプタ固有の注意</title>

        <para>下記のアダプタには注意があります:</para>

        <sect3 id="zend.queue.adapters.notes.activemq">
            <title>Apache ActiveMQ</title>

            <para>
                <classname>Zend_Queue_Adapter_Activemq</classname>のための可視性期間は利用できません。
            </para>

            <para>
                ApacheのActiveMQが複数のサブスクリプションをサポートするのに対して、
                <classname>Zend_Queue</classname>はそうしません。
                それぞれのサブスクリプションのために
                新しい<classname>Zend_Queue</classname>オブジェクトを作成しなければなりません。
            </para>

            <para>
                ActiveMQの待ち行列または項目の名前は下記のうちの一つで始めなくてはいけません:
            </para>

            <itemizedlist>
                <listitem>
                    <para>
                        <filename>/queue/</filename>
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <filename>/topic/</filename>
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <filename>/temp-queue/</filename>
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <filename>/temp-topic/</filename>
                    </para>
                </listitem>
            </itemizedlist>

            <para>
                例えば: <filename>/queue/testing</filename>
            </para>

            <para>
                下記の関数はサポートされません:
            </para>

            <itemizedlist>
                <listitem>
                    <para>
                         <methodname>create()</methodname> - 待ち行列の作成。
                         この関数を呼ぶと例外を発生します。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>delete()</methodname> - 待ち行列の削除。
                         この関数を呼ぶと例外を発生します。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>getQueues()</methodname> - 待ち行列の一覧。
                         この関数を呼ぶと例外を発生します。
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>

        <sect3 id="zend.queue.adapters.notes.zend_db">
            <title>Zend_Db</title>

            <para>
                データベース<emphasis>CREATE TABLE ( ... )</emphasis> <acronym>SQL</acronym>
                文が<filename>Zend/Queue/Adapter/Db/mysql.sql</filename>にあります。
            </para>
        </sect3>

        <sect3 id="zend.queue.adapters.notes.memcacheQ">
            <title>MemcacheQ</title>

            <para>
                Memcacheは<ulink
                    url="http://www.danga.com/memcached/">http://www.danga.com/memcached/</ulink>
                からダウンロードできます。
            </para>

            <para>
                MemcacheQは<ulink
                    url="http://memcachedb.org/memcacheq/">http://memcachedb.org/memcacheq/</ulink>
                からダウンロードできます。
            </para>

            <itemizedlist>
                <listitem>
                    <para>
                        <methodname>deleteMessage()</methodname> - 
                        メッセージは、待ち行列から受信と同時に削除されます。
                        この関数を呼んでも効果がありません。
                        この関数を呼ぶとエラーを発生します。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>count()</methodname>または<methodname>count($adapter)</methodname>
                        - MemcacheQは、待ち行列で件数を数えるためのメソッドをサポートしません。
                        この関数を呼ぶとエラーを発生します。
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>

        <sect3 id="zend.queue.adapters.notes.platformjq">
            <title>Zend Platform ジョブキュー</title>

            <para>
                ジョブキューは、企業ソリューション商品 Zend Platform のフィーチャーです。
                それは伝統的なメッセージキューではなく、その代わりに渡したいパラメータと一緒に、
                実行するスクリプトを待ち行列に入れることができます。
                <ulink url="http://www.zend.co.jp/product/zendplatform.html">zend.co.jpウェブサイト</ulink>
                でジョブ・キューについてもっと知ることができます。
            </para>

            <para>
                以下は、このアダプターの動作が標準的な提供物と相違するメソッドの一覧です:
            </para>

            <itemizedlist>
                <listitem>
                    <para>
                        <methodname>create()</methodname> - Zend Platformには、
                        個別のキューの概念がありません。
                        その代わりに、管理者が実行段階ジョブにスクリプトを与えることができます。
                        新しいスクリプトを加えることは管理画面に制限されるので、
                        このメソッドは、単にアクションが禁じられていることを示す例外を投げます。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>isExists()</methodname> - <methodname>create()</methodname>
                        と同様に、ジョブキューには命名されたキューの概念がないので、
                        このメソッドは呼び出されると例外を投げます。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>delete()</methodname> - <methodname>create()</methodname>
                        と同様に、管理画面以外ではジョブキューのスクリプトの削除はできません。
                        このメソッドは、例外を発生します。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>getQueues()</methodname> - Zend Platformは、
                        <acronym>API</acronym> によってスクリプトを取り扱う、タスク生成されたジョブを参照できません。
                        このメソッドは、例外を投げます。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>count()</methodname> - ジョブキューで現在アクティブなジョブの
                        数を返します。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>send()</methodname> - このメソッドは、恐らく最も他のアダプターと
                        異なるメソッドの一つです。<varname>$message</varname>引数は３種類のどれか１つで、
                        渡された値によって異なる動作をします。
                    </para>

                    <itemizedlist>
                        <listitem>
                            <para>
                                <acronym>string</acronym> - 実行するジョブキューに登録されるスクリプト名
                                このように渡されると、引数はスクリプトに与えられません。
                            </para>
                        </listitem>

                        <listitem>
                            <para>
                                <acronym>array</acronym> - <classname>ZendApi_Job</classname>オブジェクトを
                                設定する配列。これらは、以下を含むかもしれません。
                            </para>

                            <itemizedlist>
                                <listitem>
                                    <para>
                                        <varname>script</varname> - 実行するジョブキュースクリプト名
                                        （必須）
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <varname>priority</varname> - キューに名前を登録するときに使う
                                        ジョブ優先順位
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <varname>name</varname> - ジョブを記述する短い文字列
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <varname>predecessor</varname> - これが始まるであろう前に
                                        実行されなければいけない、これがそれによって左右される
                                        ジョブのID
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <varname>preserved</varname> - ジョブ・キュー・ヒストリの
                                        内部でジョブを保持するべきかどうか。デフォルトはoff。
                                        保持するためには、 <constant>TRUE</constant> を渡します。
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <varname>user_variables</varname> - ジョブの実行中に、
                                        （命名された引数と同様に）保持したい変数すべての連想配列
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <varname>interval</varname> - ジョブは、しばしば数秒単位で、
                                        実行しなければならないでしょう。デフォルトは0で、
                                        一度だけ実行されることを示します。
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <varname>end_time</varname> - 期限満了時刻。それを過ぎると
                                        ジョブは動作しません。もしジョブが一回だけ実行するよう設定
                                        されているか、または<varname>end_time</varname>を過ぎると、
                                        ジョブは実行されません。ジョブが一定間隔ごとに実行するように
                                        設定されている場合、<varname>end_time</varname>を過ぎると
                                        実行されません。
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <varname>schedule_time</varname> - いつジョブを実行させるべきかを
                                        示す<acronym>UNIX</acronym>タイムスタンプ。デフォルトは0で、
                                        ジョブはできるだけ早く実行しなければならないことを示します。
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <varname>application_id</varname> - ジョブのアプリケーション識別子。
                                        デフォルトは <constant>NULL</constant> で、キューがアプリケーションIDを割り当てられたら、
                                        アプリケーションIDがキューによって自動的に割り当てられることを
                                        示します。
                                    </para>
                                </listitem>
                            </itemizedlist>

                            <para>
                                前述のように、<varname>script</varname>引数のみ必須です。他のすべては、
                                どのように、そして、いつジョブを走らせるべきかというような、
                                よりきめ細かい詳細を渡すために利用します。
                            </para>
                        </listitem>

                        <listitem>
                            <para>
                                <classname>ZendApi_Job</classname> - 結局、
                                単に<classname>ZendApi_Job</classname>のインスタンスを渡すかもしれません。
                                そして、それはPlatformのジョブキューに一緒に渡されます。
                            </para>
                        </listitem>
                    </itemizedlist>

                    <para>
                        <methodname>send()</methodname>は、インスタンスの全てで
                        <classname>Zend_Queue_Message_PlatformJob</classname>オブジェクトを返します。
                        そして、ジョブキューと通信するために使う<classname>ZendApi_Job</classname>
                        オブジェクトへのアクセスを提供します。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>receive()</methodname> - ジョブキューから実行中のジョブのリストを
                        取得します。返されたセットの各々のジョブは、
                        <classname>Zend_Queue_Message_PlatformJob</classname>のインスタンスです。
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>deleteMessage()</methodname> - このアダプターはジョブキューだけで
                        機能するので、このメソッドは、与えられた<varname>$message</varname>が
                        <classname>Zend_Queue_Message_PlatformJob</classname>のインスタンスであること
                        を期待します。
                        さもなければ例外を発生します。
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>

        <sect3 id="zend.queue.adapters.notes.array">
            <title>配列 (内部)</title>

            <para>
                配列待ち行列はローカルメモリ上の<acronym>PHP</acronym> <methodname>array()</methodname>です。
                <classname>Zend_Queue_Adapter_Array</classname>はユニットテスト用に適しています。
            </para>
        </sect3>
    </sect2>
</sect1>
