JMS HelloWorld Sample
=====================
This sample demonstrates a simple webapp containing a hello world  style client
and service using the JMS binding for request-response style messaging. 

The README in the samples directory (the directory above this) provides 
general instructions about building and running samples. Take a look there 
first. 

As this sample provides a web app there is a manual step where the WAR file
that contains the sample is copied to your web app container. If you just want 
to give this sample a go deploy the WAR file (target/sample-helloworld-jms-webapp.war )
to you web application server. 

Once the web app is deployed use your browser to visit the following URL;

http://localhost:8080/sample-helloworld-jms-webapp/

The port and hostname will of course vary depending on your local installation. 

Configuring the JMS resources
-----------------------------

The sample requires JMS resources be manually configured in the server environment, these are: 

- a JMS connection factory named "ConnectionFactory"
- a JMS queue named "HelloWorldService"

See the following for how to define these resources depending on the application server being used:

Tuscany with embedded ActiveMQ broker
-------------------------------------


Apache Tomcat
-------------

No configuration is necessary for Tomcat as the sample WAR includes everything pre-configured to run 
an ActiveMQ embedded JMS broker and to configure the JMS resources in JNDI.

The JNDI resources are configured in the META-INF/comtext.xml file, for more information on running
ActiveMQ in Tomcat see: http://activemq.apache.org/tomcat.html


Apache Geronimo
---------------

For Apache Geronimo 2.0.1 (2.0.2 fails to define JMS resources for me)

Logon to the Geronimo Server Console (http://localhost:8080/console, uid system, pswd manager)

In the Console Navigation on the left under Services click JMS Resources

At the bottom of the JMS Resources panel click under Create a new JMS Resource Group click For ActiveMQ

In Resource Group Name enter "MyRGN" and click next

At JMS Resource Group click Add Connection Factory

For JMS Factory Type choose javax.jms.ConnectionFactory and click Next

In Connection Factory Name enter "ConnectionFactory" and click Next

Click Add destination

For JMS Destination Type choose javax.jms.Queue and click Next	
	
Enter "HelloWorldService" for both Message Destination Name and PhysicalName and click Next 	

Click Deploy Now

Thats it, you're done.


WebSphere 
---------

To define the JMS resources in a new WebSphere Application Server 6.1 installation:

1) First define a Service integration bus:

Logon to the WebSphere Integrated Solutions Console (http://localhost:9060/ibm/console)

On the Left hand menu expand Service integration, and click on Buses.

In the Buses panel click on New

Enter a name for the bus, eg MyBus, and click Next, and then click Finish and Save the changes.

In the Buses panel click on MyBus

Find the Topology secion and click on Bus members

Click on Add, leave the defaults and click Next, Next, Next, Finish, and Save the changes.

Restart WebSphere and when back up logon back on to the Integrated Solutions Console
 
2) Now define the JMS rescources

On the Left hand menu expand Resources, and JMS and click on Connection Facotories. 

In the Connection factories panel click New.

Leave the Default messaging provider and click OK

Enter "ConnectionFactory" in the Name and JNDI name and in the Bus name in the Connection pane choose MyBus and click OK

On the Left hand menu in JMS click on Queues 

In the Queues panel click New, accept the defaults and click OK

Enter "HelloWorldService" for the Name and JNDI name and in the Bus name in the Connection pane choose MyBus,
and then in the Queue name drop down list choose "Create SIB destination"

In the Set queue attributes panel enter "HelloWorldService" for the Identifier and click Next, Next, and Finish

That should take you back to the Queues panel where you can click OK to create the new JMS queue.

Save the changes

Restart WebSphere and you're done.



Others...
---------



 