<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 16700 -->
<!-- Reviewed: no -->
<sect1 id="zend.queue.custom">
    <title>Anpassen von Zend_Queue</title>

    <sect2 id="zend.queue.custom.adapter">
        <title>Erstellung eigener Adapter</title>

        <para>
            <classname>Zend_Queue</classname> akzeptiert jeden Adapter der
            <classname>Zend_Queue_Adapter_AdapterAbstract</classname> implementiert. Man kann
            eigene Adapter erstellen indem einer der existierenden Adapter, oder die abstrakte
            Klasse <classname>Zend_Queue_Adapter_AdapterAbstract</classname> erweitert wird.
            Es wird empfohlen <classname>Zend_Queue_Adapter_Array</classname> anzuschauen da
            dieser Adapter in seiner Konzeption der einfachste ist.
        </para>

        <programlisting language="php"><![CDATA[
class Custom_DbForUpdate extends Zend_Queue_Adapter_Db
{
    /**
     * @see Code in tests/Zend/Queue/Custom/DbForUpdate.php
     *
     * Custom_DbForUpdate verwendet SELECT ... FOR UPDATE um seine Zeilen zu
     * finden. Das ist besser um die gewünschten Zeilen zu erstellen als der
     * existierende Code.
     *
     * Trotzdem haben nicht alle Datenbanken SELECT ... FOR UPDATE als Feature.
     *
     * Notiz: Das wurde später konvertiert um eine Option für
     * Zend_Queue_Adapter_Db zu sein.
     *
     * Dieser Code ist trotzdem ein gutes Beispiel.
     */
}

$options = array(
    'name'          => 'queue1',
    'driverOptions' => array(
        'host'      => '127.0.0.1',
        'port'      => '3306',
        'username'  => 'queue',
        'password'  => 'queue',
        'dbname'    => 'queue',
        'type'      => 'pdo_mysql'
    )
);

$adapter = new Custom_DbForUpdate($options);
$queue = Zend_Queue($adapter, $options);
]]></programlisting>

        <para>
            Man kann den Adapter auch im Betrieb ändern.
        </para>

        <programlisting language="php"><![CDATA[
$adapter = new MyCustom_Adapter($options);
$queue   = Zend_Queue($options);
$queue->setAdapter($adapter);
echo "Adapter: ", get_class($queue->getAdapter()), "\n";
]]></programlisting>

        <para>or</para>

        <programlisting language="php"><![CDATA[
$options = array(
    'name'           => 'queue1',
    'namespace'      => 'Custom',
    'driverOptions'  => array(
        'host'       => '127.0.0.1',
        'port'       => '3306',
        'username'   => 'queue',
        'password'   => 'queue',
        'dbname'     => 'queue',
        'type'       => 'pdo_mysql'
    )
);
$queue = Zend_Queue('DbForUpdate', $config); // loads Custom_DbForUpdate
]]></programlisting>
    </sect2>

    <sect2 id="zend.queue.custom.message">
        <title>Eine eigene Nachrichtenklasse erstellen</title>

        <para>
            <classname>Zend_Queue</classname> akzeptiert auch eigene Nachrichten Klassen. Unsere
            Variablen beginnen mit einem Unterstrich. Zum Beispiel:
        </para>

        <programlisting language="php"><![CDATA[
class Zend_Queue_Message
{
    protected $_data = array();
}
]]></programlisting>

        <para>
            Man kann die bestehende Nachrichten Klasse erweitern. Siehe den Beispielcode in
            <filename>tests/Zend/Queue/Custom/Message.php</filename>.
        </para>
    </sect2>

    <sect2 id="zend.queue.custom-iterator">
        <title>Erstellen einer eigenen Nachrichten Iterator Klasse</title>

        <para>
            <classname>Zend_Queue</classname> akzeptiert auch eine eigene Nachrichten Iterator
            Klasse. Diese Nachrichten Iterator Klasse wird verwendet um Nachrichten von
            <methodname>Zend_Queue_Adapter_Abstract::recieve()</methodname> zurckzugeben.
            <methodname>Zend_Queue_Abstract::receive()</methodname> sollte immer eine Controller
            Klasse zurückgeben so wie <classname>Zend_Queue_Message_Iterator</classname> selbst
            wenn nur eine Nachricht vorhanden ist.
        </para>

        <para>
            Siehe den Beispiel Dateinamen in
            <filename>tests/Zend/Queue/Custom/Messages.php</filename>.
        </para>
    </sect2>

    <sect2 id="zend.queue.custom.queue">
        <title>Erstellen einer eigenen Queue Klasse</title>

        <para>
            <classname>Zend_Queue</classname> kann auch sehr einfach überladen werden.
        </para>

        <para>
            Siehe den Beispiel Dateinamen in
            <filename>tests/Zend/Queue/Custom/Queue.php</filename>.
        </para>
    </sect2>
</sect1>
