JMS Messaging in Quercus - Receiving messages
Resin 3.0

Features
Installation
Configuration
Web Applications
IOC/AOP
Resources
JSP
Quercus
Servlets and Filters
Databases
Admin (JMX)
CMP
EJB
Amber
EJB 3.0
Security
XML and XSLT
XTP
JMS
Performance
Protocols
Third-party
Troubleshooting/FAQ

Config
SwiftMQ
Tutorials

Simple Listener
JCA Listener
JMS in Quercus - Sending messages
JMS in Quercus - Receiving messages
JMS in Quercus - Sending messages
Tutorials
Performance

Find this tutorial in: /usr/local/resin/webapps/resin-doc/jms/tutorial/php-queue-receive
Try the Tutorial

  1. Files in this tutorial
  2. Using JMS in Quercus
  3. Receiving JMS messages from a PHP script
  4. Configuring JMS for PHP and Java

Files in this tutorial

WEB-INF/resin-web.xml resin-web.xml configuration
display-ad.php PHP script displaying the advertisement.
WEB-INF/classes/example/AdProducer.java Java listener that fills the advertisement queue.
WEB-INF/adproducer.ejb EJB Message bean configuration.

Using JMS in Quercus

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.

Receiving JMS messages from a PHP script

This example uses two queues: an "ad queue" and a "control queue". The PHP script removes advertisements from the ad queue using the receive() 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 = new JMSQueue("jms/AdQueue");
$control_queue = new JMSQueue("jms/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->receive();

  if ($ad == null) {
    echo "No ads available on the queue\n";
  } else {
    echo "$ad";
  }

  if (! $control_queue->send(0)) {
    echo "Unable to send control message\n";
  }
}

The programming model of the Quercus JMS interface is first to create a connection to a queue by instantiating a JMSQueue object. To create a JMSQueue object, pass in the JNDI name of the JMS queue to be used. JMSQueue objects have two methods: send() and receive(). The example above shows how to use both methods.

Configuring JMS for PHP and Java

JMS requires that two resources be set up: A ConnectionFactory and a Queue. Both are configured in WEB-INF/resin-web.xml. The ConnectionFactory is used to connect to all the Queues and only one of them needs to be set up. The default JNDI name is jms/ConnectionFactory - Quercus automatically uses this connection factory. Another connection factory may be used by setting the PHP ini variable jms.connection_factory.

  <resource jndi-name="jms/ConnectionFactory"
    type='com.caucho.jms.ConnectionFactoryImpl' />

This example uses two queues, jms/AdQueue and jms/ControlQueue.

  <resource jndi-name="jms/AdQueue"
    type='com.caucho.jms.memory.MemoryQueue' />

  <resource jndi-name="jms/ControlQueue"
    type='com.caucho.jms.memory.MemoryQueue' />

The complete configuration is in WEB-INF/resin-web.xml.

Try the Tutorial


JMS in Quercus - Sending messages
Tutorials
Performance
Copyright © 1998-2006 Caucho Technology, Inc. All rights reserved.
Resin® is a registered trademark, and HardCoretm and Quercustm are trademarks of Caucho Technology, Inc.