JMS Transport Demo using Document-Literal Style
===============================================

This sample demonstrates how to use the Document-Literal style binding over a 
JMS Transport using the queue mechanism.

Please review the README in the samples directory before continuing.

This demo uses ActiveMQ as the JMS implementation for illustration purposes 
only. Other JMS implementations such as Apache Qpid could also be used in the 
same way. For details on how to use this demo on non-ActiveMQ implementations 
check "Using other JMS implementations" below.

Prerequisite
------------

$SUBSTITUTE_PREREQ$


Building and running the demo using ant
---------------------------------------

From the samples/jms_queue directory, use the following commands to build and 
run the demo on either UNIX or Windows:

  ant build
  ant jmsbroker.start 
  ant server 
  ant client
    

To remove the code generated from the WSDL file and the .class files, run:

  ant clean



Building the demo using wsdl2java and javac
-------------------------------------------

From the samples/jms_queue directory, first create the target
directory build/classes and then generate code from the WSDL file.

For UNIX:

  mkdir -p build/classes

  $THE_TOOL$ wsdl2java -d build/classes -compile ./wsdl/jms_greeter.wsdl

For Windows:

  mkdir build\classes
    Must use back slashes.

  $THE_TOOL$ wsdl2java -d build\classes -compile .\wsdl\jms_greeter.wsdl
    May use either forward or back slashes.

Now compile the provided client and server applications with the commands:

For UNIX:  
  
  export CLASSPATH=$CLASSPATH:./build/classes
  javac -d build/classes src/demo/jms_greeter/client/*.java
  javac -d build/classes src/demo/jms_greeter/server/*.java

For Windows:

  set classpath=%classpath%;.\build\classes
  javac -d build\classes src\demo\jms_greeter\client\*.java
  javac -d build\classes src\demo\jms_greeter\server\*.java



Running the demo using java
---------------------------

From the samples/jms_queue directory run the commands, entered on a
single command line:

For UNIX (use forward slashes):
    java -Djava.util.logging.config.file=$$SUBSTITUTE_HOME$/etc/logging.properties
         demo.jms_greeter.server.Server &

    java -Djava.util.logging.config.file=$$SUBSTITUTE_HOME$/etc/logging.properties
         demo.jms_greeter.client.Client ./wsdl/jms_greeter.wsdl

The server process starts in the background.  After running the client,
use the kill command to terminate the server process.

For Windows (use either forward or backslashes):
  start 
    java -Djava.util.logging.config.file=%$SUBSTITUTE_HOME$%\etc\logging.properties
         demo.jms_greeter.server.Server

    java -Djava.util.logging.config.file=%$SUBSTITUTE_HOME$%\etc\logging.properties
         demo.jms_greeter.client.Client .\wsdl\jms_greeter.wsdl

A new command windows opens for the server process. After running the client, 
terminate the server process by issuing Ctrl-C in its command window.


Stop ActiveMQ JMS Broker by issuing Ctrl-C in its command window.


Using other JMS implementations:
-------------------------------

Using it with Apache Qpid:  
-------------------------
Before running the run, you will have to set QPID_HOME in your environment, 
and also have to start the Qpid broker. 

The following changes are needed to the demo to make it work for Apache Qpid.

1. Changes to wsdl/jms_greeter.wsdl
   
   Replace the jms:address element under wsdl:port with:                

      <jms:address
          destinationStyle="queue"
          jndiConnectionFactoryName="local"
          jndiDestinationName="dq">
          <jms:JMSNamingProperty name="java.naming.factory.initial" 
               value="org.apache.qpid.jndi.PropertiesFileInitialContextFactory"/>
          <jms:JMSNamingProperty name="java.naming.provider.url" 
               value="tcp://localhost:5672"/>
          <jms:JMSNamingProperty name="connectionfactory.local" 
               value="amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'"/>
          <jms:JMSNamingProperty name="queue.dq" value="queue://queuetest"/>
      </jms:address>

2. Changes to build.xml.
   
   Replace
   
    <condition property="activemq.home" value="${env.ACTIVEMQ_HOME}">
        <isset property="env.ACTIVEMQ_HOME"/>
    </condition>
    <fail message="this sample need to use activemq, please setup  ACTIVEMQ_HOME in your environment"
        unless="activemq.home"/>
    <condition property="activemq.version" value="${env.ACTIVEMQ_VERSION}">
	<isset property="env.ACTIVEMQ_VERSION"/>
    </condition>
    <fail message="this sample need to use activemq, please setup ACTIVEMQ_VERSION in your envrionment"
        unless="activemq.version"/>
    <property name="thirdparty.classpath" location="${activemq.home}/incubator-activemq-${activemq.version}.jar"/>
 
   with

   <condition property="qpid.home" value="${env.QPID_HOME}">
        <isset property="env.QPID_HOME"/>
    </condition>

    <fail message="this sample need to use qpid, please setup QPID_HOME in your environment"
        unless="qpid.home"/>

    <property name="thirdparty.classpath" location="${qpid.home}/lib/qpid-incubating.jar"/>    

   Remove the target jmsbroker.start from build.xml. This is only a helper 
   function to start the Active MQ broker, and is not required if the broker can 
   be started through the scripts.

3. Remove the file, EmbeddedBroker.java from under the directory 
   src/demo/jms_greeter/broker. This is only a helper function and need not be 
   used, as long as the broker is started through the scripts.
   
