<document>
<localtoc/> <deftable>
File Description
resin-web.xml configuration
PHP script displaying the advertisement.
Java listener that fills the advertisement queue.
</deftable>

Quercus offers a simplified messaging interface built upon JMS. This functionality makes it possible to send and receive messages using either the Resin JMS implementation or any other messaging service with a JMS implementation. Many features of JMS are designed for message-driven services which make sense in the Java world, but are not appropriate for PHP. This tutorial focuses receiving messages in a non-blocking way.

This example uses two queues: an "ad queue" and a "control queue". The PHP script removes advertisements from the ad queue using the `poll()` method. This method is non-blocking - if there are no advertisements, the method will return `FALSE` instead of waiting for a new advertisement. Whenever the PHP script removes an advertisement from the ad queue, it signals a Java message driven bean (MDB) to add another ad by sending an empty message to the control queue.

$ad_queue = java_bean("AdQueue"); $control_queue = java_bean("ControlQueue"); if (! $ad_queue) { echo "Unable to get ad queue!\n"; } elseif (! $control_queue) { echo "Unable to get control queue!\n"; } else { $ad = $ad_queue->poll(); if ($ad == null) { echo "No ads available on the queue\n"; } else { echo "$ad"; } if (! $control_queue->offer(0)) { echo "Unable to send control message\n"; } }

The programming model of the Quercus JMS interface is first to get access to the queue using `java_bean` to get the named queue. To create a `JMSQueue` object, pass in the name of the JMS queue to be used. Since the JMS Queue implements the `BlockingQueue` API, the PHP script can use `offer()` and `poll()`. The example above shows how to use both methods.

JMS requires that two resources be set up: A `ConnectionFactory` and a `Queue`. Both are configured in . The `ConnectionFactory` is used to connect to all the `Queue`s and only one of them needs to be set up.

<web-app xmlns="http://caucho.com/ns/resin"> <jms-connection-factory uri="resin:"/> </web-app>

This example uses two queues, `AdQueue` and `ControlQueue`.

<web-app xmlns="http://caucho.com/ns/resin"> <jms-queue name="AdQueue" uri="memory:"/> <jms-queue name="ControlQueue" uri="memory:"/> </web-app>

The complete configuration is in .

</document>