<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 16641 -->
<!-- Reviewed: no -->
<sect1 id="zend.queue.adapters">
    <title>Adapter</title>

    <para>
        <classname>Zend_Queue</classname> unterstützt alle Queue die das Interface
        <classname>Zend_Queue_Adapter_AdapterInterface</classname> implementieren. Die folgenden
        Nachrichten Queue Services werden unterstützt:
    </para>

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

        <listitem>
            <para>
                Eine Datenbank verwendende Queue über <classname>Zend_Db</classname>.
            </para>
        </listitem>

        <listitem>
            <para>
                Eine <ulink url="http://memcachedb.org/memcacheq/">MemcacheQ</ulink> verwendende
                Queue über <classname>Memcache</classname>.
            </para>
        </listitem>

        <listitem>
            <para>
                Ein lokales Array. Nützlich für Unit Tests.
            </para>
        </listitem>
    </itemizedlist>

    <note id="zend.queue.adapters.limitations">
        <title>Einschränkungen</title>

        <para>
            Das Transaction Handling für Nachrichten wird nicht unterstützt.
        </para>
    </note>

    <sect2 id="zend.queue.adapters.configuration">
        <title>Spezielle Adapter - Konfigurations Optionen</title>

        <para>
            Wenn eine Standardeinstellung angezeigt wird, dann ist der Parameter optional.
            Wenn keine Standardeinstellung spezifiziert ist dann wird der Parameter benötigt.
        </para>

        <sect3 id="zend.queue.adapters.configuration.Apachemq">
            <title>ApacheMQ - Zend_Queue_Adapter_Apachemq</title>

            <para>
                Hier aufgeführte Optionen sind bekannte Notwendigkeiten. Nicht alle Nachrichten
                Server benötigen username oder password.
            </para>

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

                    <para>
                        Das ist der Name der Queue die man anfangen will zu verwenden. (Benötigt)
                    </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>
                        Man kann host auf eine IP Adresse oder einen Hostnamen setzen.
                    </para>

                    <para>
                        Der Standardwert für host ist '127.0.0.1'.
                    </para>
                </listitem>

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

                    <para>Die Standardeinstellung für port ist 61613.</para>
                </listitem>

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

                    <para>
                        Optional für einige Nachrichten Server. Lesen Sie das Handbuch für Ihren
                        Nachrichten Server.
                    </para>
                </listitem>

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

                    <para>
                        Optional für einige Nachrichten Server. Lesen Sie das Handbuch für Ihren
                        Nachrichten Server.
                    </para>
                </listitem>

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

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

                    <para>
                        Das ist die Menge an Zeit die
                        <classname>Zend_Queue_Adapter_Activemq</classname> für einen Lesezugriff
                        auf einem Socket wartet bevor keine Nachricht zurückgegeben wird.
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>

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

            <para>
                Optionen des Treibers werden für wenige benötigte Optionen geprüft so wie
                <emphasis>type</emphasis>, <emphasis>host</emphasis>,
                <emphasis>username</emphasis>, <emphasis>password</emphasis> und
                <emphasis>dbname</emphasis>. Man kann zusätzliche Parameter für
                <methodname>Zend_DB::factory()</methodname> als Paramerter in
                <varname>$options['driverOptions']</varname> übergeben. Ein Beispiel für eine
                zusätzliche Option die hier nicht aufgeführt ist, aber übergeben werden könnte ist
                <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, // Optionaler Parameter
    ),
    'options' => array(
        // Verwenden von Zend_Db_Select für das Update, nicht alle Datenbanken
        // unterstützen dieses Feature.
        Zend_Db_Select::FOR_UPDATE => true
    )
);

// Eine Datenbank Queue erstellen.
$queue = Zend_Queue::factory('Db', $options);
]]></programlisting>

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

                    <para>
                        Das ist der Name der Queue die man anfangen will zu verwenden. (Benötigt)
                    </para>
                </listitem>

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

                    <para>
                        <emphasis>type</emphasis> ist der Adapter von dem man will das Ihn
                        <methodname>Zend_Db::factory()</methodname> verwendet. Das ist der erste
                        Parameter für den Aufruf der Klassenmethode
                        <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>
                        Man kann host auf eine IP Adresse oder einen Hostnamen setzen.
                    </para>

                    <para>
                        Der Standardwert für host ist '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>
                        Der Name der Datenbank für die man die benötigten Tabellen erstellt hat.
                        Siehe das unten stehende Notizen Kapitel.
                    </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>
                        Das ist der Name der Queue die man anfangen will zu verwenden. (Benötigt)
                    </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>
                        Man kann host auf eine IP Adresse oder einen Hostnamen setzen.
                    </para>

                    <para>
                        Der Standardwert für host ist '127.0.0.1'.
                    </para>
                </listitem>

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

                    <para>Die Standardeinstellung für port ist 22201.</para>
                </listitem>
            </itemizedlist>
        </sect3>

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

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

                    <para>
                        Das ist der Name der Queue die man anfangen will zu verwenden. (Benötigt)
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>
    </sect2>

    <sect2 id="zend.queue.adapters.notes">
        <title>Hinweise für spezielle Adapter</title>

        <para>Die folgenden Adapter haben Hinweise:</para>

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

            <para>
                Die Dauer der Sichtbarkeit (visibility duration) ist für
                <classname>Zend_Queue_Adapter_ActiveMQ</classname> nicht vorhanden.
            </para>

            <para>
                Wärend Apache's ActiveMQ mehrere Einschreibungen unterstützt, wird das von
                <classname>Zend_Queue</classname> nicht unterstützt. Man muss ein neues
                <classname>Zend_Queue</classname> Objekt für jede individuelle Einschreibung
                erstellen.
            </para>

            <para>
                ActiveMQ Queue oder Topic Namen müssen mit einem der folgenden beginnen:
            </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>
                Zum Beispiel: <filename>/queue/testing</filename>
            </para>

            <para>
                Die folgenden Funktionen werden nicht unterstützt:
            </para>

            <itemizedlist>
                <listitem>
                    <para>
                         <methodname>create()</methodname> - Erstelle eine Queue. Der Aufruf dieser
                         Funktion wird eine Exception werfen.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>delete()</methodname> - Löscht eine Queue. Der Aufruf dieser
                        Funktion wird eine Exception werfen.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>getQueues()</methodname> - Auflisten von Queues. Der Aufruf
                        dieser Funktion wird eine Exception werden.
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>

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

            <para>
                Das Datenbank <acronym>SQL</acronym> Statement
                <emphasis>CREATE TABLE ( ... )</emphasis> kann in
                <filename>Zend/Queue/Adapter/Db/queue.sql</filename> gefunden werden.
            </para>
        </sect3>

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

            <para>
                Memcache kann von <ulink
                    url="http://www.danga.com/memcached/">http://www.danga.com/memcached/</ulink>
                heruntergeladen werden.
            </para>

            <para>
                MemcacheQ kann von <ulink
                    url="http://memcachedb.org/memcacheq/">http://memcachedb.org/memcacheq/</ulink>
                heruntergeladen werden.
            </para>

            <itemizedlist>
                <listitem>
                    <para>
                        <methodname>deleteMessage()</methodname> - Nachrichten werden von der Queue
                        gelöscht nachdem Sie von der Queue empfangen werden. Der Aufruf dieser
                        Funktion hätte keinen Effekt. Der Aufruf dieser Funktion wird keinen Fehler
                        werfen.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <methodname>count()</methodname> oder
                        <methodname>count($adapter)</methodname> - MemcacheQ unterstützt keine
                        Methode für das Zählen der Anzahl an Elementen in einer Queue. Der Aufruf
                        dieser Funktion wird keinen Fehler werfen.
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>

        <sect3 id="zend.queue.adapters.notes.array">
            <title>Array (Lokal)</title>

            <para>
                Die Array Queue ist ein <acronym>PHP</acronym> <methodname>array()</methodname>
                im lokalen Speicher. <classname>Zend_Queue_Adapter_Array</classname> ist gut
                für das Unit Testen.
            </para>
        </sect3>
    </sect2>
</sect1>
