How to Use JMS with PHP
How to Install and Configure PHPMQ
This section describes how to install and configure all of the components so that PHP scripts will run under PHPMQ.
Step 1. Installing and Configuring the MantaRay Message Layer
Download and unzip the MantaRay messaging layer.
Enable the RMI API in the MantaRay configuration:
- Enable the RMI API by setting
enable_rmi_api to true in the default_config.params configuration file.
- Enable the creation of an RMI registry by setting
create_rmi_registry to true in the default_config.params configuration file, unless you are using an external RMI registry.
- Set
rmi_registry_port to the port that the RMI registry will listen to, in the default_config.params configuration file.
- Set
rmi_registry_host_name to the IP address or hostname of the computer where the RMI registry is located (if the registry is local, use localhost).
There are security considerations that need to be taken into account in order for the RMI API to work. Refer to
jGuru: Remote Method Invocation: Introduction,
and the security policy at Tom Valesky's "How to Create an RMI System."
Step 2. Installing and Configuring PHP
Download and install PHP version 4.3.8.
Enable the PHP/Java extension by adding these lines in php.ini:
extension=php_java.dll
[Java]
java.class.path = "./extensions/php_java.jar;\
../mantaray/manta.jar;../phpmq/phpmq.jar"
java.home = "./j2sdk1.4.2_03/jre"
java.library = "./j2sdk1.4.2_03/jre/bin/client/jvm.dll"
java.library.path = "./extensions"
Editor's note: The java.class.path has been reformatted for this web page--it should all be on one line.
Most PHP scripts run over Apache and enable a dynamic user interface with an HTTP browser.
Note that in order for the PHP/Java extension to work on Apache, you need to either run the PHP as a CGI or to run the PHP on a prefork-compiled Apache. To run PHP as a CGI on Apache, add these lines to the Apache httpd.conf configuration file:
ScriptAlias /php/ "./phpInstalledDirectory/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php.exe"
Step 3. Running the MantaRay Layer
Start MantaRay by running java org.mr.MantaStandAlone or by running standalone.bat.
Step 4. Running the PHP Script and Creating an Instance of the Messaging API
To create an instance of the PHP messaging API, a PHP script should include messaging.php, like this:
<?php
include('./libraries/messaging.php');
$msg = new messaging('//localhost',10005);
...>
The parameters passed at instantiation are the host name and port number of the MantaRay RMI Registry.
Step 5. Using the PHPMQ Messaging API
After an instance of the messaging API has been created, developers can start working with the functions provided by the messaging API. These functions are discussed in the next section.
Messaging API Functions
The PHPMQ messaging API includes the following functions:
function enqueue($userKey, $queueName, $message)
Sends $message (string) to a queue with the name $queueName (string). $userKey (string) is the identifier used by the messaging bus.
function dequeue($userKey, $queueName)
Returns a string message dequeued from the queue with the name $queueName (string). $userKey (string) is the identifier used by the messaging bus.
function getQueues()
Returns an array of strings that are the names of queues available on the message bus.
function getTopics()
Returns an array of strings that are the names of topics available on the message bus.
function subscribe($userKey $topicName, $messagesToCash)
Adds a listener to a given $topicName (string). The listener will receive up to $messagesToCash (number) messages. $userId (string) is the identifier used by the messaging bus; use this identifier to get messages with getMessageFromTopic(....).
function getMessageFromTopic($userKey, $topicName)
Gets the messages gathered by the listener on a given $topicName (string). $userKey (string) is the identifier used by the messaging bus used when invoking subscribe(...).
function publishMessage($userKey, $topicName, $msg)
Publishes a $msg (string) to a topic with name $topicName (string). $userKey (string) is the identifier used by the messaging bus.
In the PHPMQ download package, there are several example applications that use both queues and topics.
Conclusion
The ability of languages to cooperate is very important, but in many cases is still lacking or hard to implement. As a community, we should strive to always use the right tool for the task and ensure that these tools communicate with each other seamlessly.
PHPMQ is an example of how two languages can empower each other: using PHPMQ gives the PHP developer a window to the back-end world and gives the Java developer the freedom to use an easy and fast web development tool as his front-end tier (instead of the JSP/servlet approach that is more difficult to work with). With PHPMQ, you can have a long-lived Java application maintaining a session and keeping persistent data for the short-lived PHP scripts.
Related Links
- PHPMQ project
- MantaRay project
- MantaRay home page
- PHP
- Java
- PHP/Java extension
- jGuru: Remote Method Invocation: Introduction
- "How to Create an RMI System"
Amir Shevat
is a senior software developer with eight years of experience in computing.
Return to ONJava.com.