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

This sample shows how to use the Document-Literal style binding over a JMS 
transport using the pub/sub 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_pubsub 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_pubsub directory, first create the target
directory build/classes and then generate code from the WSDL file.

For UNIX:
  mkdir -p build/classes

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

For Windows:
  mkdir build\classes
    (Use backslashes.)

  wsdl2java -d build\classes -compile .\wsdl\jms_greeter.wsdl
    (Use either forward or backslashes.)

Now compile the 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
---------------------------

The location of <activemq.home.dir> depends on whether you have installed the
binary or source release.  

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

For UNIX (must 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 (may use either forward or back slashes):
  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 demo, you need to set QPID_HOME in your environment and 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="topic"
         jndiConnectionFactoryName="local"
         jndiDestinationName="direct">
         <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@pdartix30.boston.amer.iona.com1167022402426/test?brokerlist='tcp://localhost:5672'"/>
         <jms:JMSNamingProperty name="topic.direct" value="topic://topictest"/>
     </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.
   