<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 16949 -->
<sect1 id="zend.queue.framework">
    <title>フレームワーク</title>

    <para>
        <classname>Zend_Queue</classname>は、
        待ち行列サービスの詳細を隠す代理です。
        待ち行列サービスは、<classname>Zend_Queue_Adapter_&lt;service&gt;</classname>によって表現されます。
        たとえば、<classname>Zend_Queue_Adapter_Db</classname>は、
        メッセージを格納・読み出しするためにデータベーステーブルを使う待ち行列です。
    </para>

    <para>
        下記は、待ち行列システムのためにデータベーステーブルを利用する例です:
    </para>

    <programlisting language="php"><![CDATA[
$options = array(
    'name'          => 'queue1',
    'driverOptions' => array(
        'host'      => '127.0.0.1',
        'port'      => '3306',
        'username'  => 'queue',
        'password'  => 'queue',
        'dbname'    => 'queue',
        'type'      => 'pdo_mysql'
    )
);

// データベース待ち行列を作成します。
// Zend_Queue はクラス名として Zend_Queue_Adapter_ の後に 'Db' を付加します。
$queue = Zend_Queue('Db', $options);
]]></programlisting>

    <para>
        <classname>Zend_Queue</classname>コンストラクタは<classname>Zend_Queue_Adapter_Db</classname>を作成して、
        構成設定値でアダプタを初期化します。
    </para>

    <para>
        各々のアダプタに認められた構成設定値は、
        <ulink url="zend.queue.adapters">アダプタの注意</ulink>で示されます
    </para>

    <para>
        <classname>Zend_Queue</classname>は
        クラス<classname>Zend_Queue_Message_Iterator</classname>を用いてメッセージを返します。
        そして、それは<acronym>SPL</acronym> <classname>Iterator</classname>及び<classname>Countable</classname>の実装です。
        <classname>Zend_Queue_Message_Iterator</classname>は、
        <classname>Zend_Queue_Message</classname>オブジェクトの配列を含みます。
    </para>

    <programlisting language="php"><![CDATA[
$messages = $queue->receive(5);
foreach ($messages as $i => $message) {
    echo "$i) Message => ", $message->body, "\n";
}
]]></programlisting>

    <para>
        投げられるどんな例外も、クラス<classname>Zend_Queue_Exception</classname>です。
    </para>

    <sect2 id="zend.queue.framework.basics">
        <title>導入</title>

        <para>
            <classname>Zend_Queue</classname>は、
            アダプタを表現する代理クラスです。
        </para>

        <para>
            <methodname>send()</methodname>や
            <methodname>count($queue)</methodname>、そして
            <methodname>receive()</methodname>メソッドは、
            待ち行列と相互に作用するために、それぞれのアダプタによって使用されます。
        </para>

        <para>
            <methodname>createQueue()</methodname>及び
            <methodname>deleteQueue()</methodname>メソッドは待ち行列を管理するために使われます。
        </para>
    </sect2>

    <sect2 id="zend.queue.framework.support">
        <title>アダプタの間の互換性</title>

        <para>
            <classname>Zend_Queue</classname>によってサポートされる待ち行列サービスは、
            同じ関数をサポートするとは限りません。
            例えば、<classname>Zend_Queue_Adapter_Array</classname>及び
            <classname>Zend_Queue_Adapter_Db</classname>は全ての関数をサポートしますが、
            一方、<classname>Zend_Queue_Adapter_Activemq</classname>は
            待ち行列の一覧や削除、そしてメッセージのカウントをサポートしません。
        </para>

        <para>
            <methodname>Zend_Queue::isSupported()</methodname>または
            <methodname>Zend_Queue::getCapabilities()</methodname>を使って
            どんな関数がサポートされるか判定できます。
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis><methodname>create()</methodname></emphasis> - 待ち行列を作成
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>delete()</methodname></emphasis> - 待ち行列を削除
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>send()</methodname></emphasis> - メッセージを送信
                </para>

                <para>
                    <methodname>send()</methodname>はアダプタ全てで利用可能なわけではありません;
                    <classname>Zend_Queue_Adapter_Null</classname>は<methodname>send()</methodname>をサポートしません。
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>receive()</methodname></emphasis> - メッセージを受信
                </para>

                <para>
                    <methodname>receive()</methodname>はアダプタ全てで利用可能なわけではありません;
                    <classname>Zend_Queue_Adapter_Null</classname>は<methodname>receive()</methodname>をサポートしません。
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>deleteMessage()</methodname></emphasis> - メッセージを削除
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>count()</methodname></emphasis> - 待ち行列内のメッセージ数をカウント
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>isExists()</methodname></emphasis> - 待ち行列が存在するかチェック
                </para>
            </listitem>
        </itemizedlist>

        <para>
            <methodname>receive()</methodname>メソッドは、
            待ち行列と相互に作用するために、それぞれのアダプタによって使用されます。
        </para>

        <para>
            <methodname>createQueue()</methodname>及び
            <methodname>deleteQueue()</methodname>メソッドは待ち行列を管理するために使われます。
        </para>
    </sect2>
</sect1>
