Example description
-------------------

The object of this example is to show how Message driven beans may
be involved in global transactions as well as Entity beans

In this sample appli:

	- StockBean is an entity bean CMP that handles a stock table
	  a Stock item is composed with a Stockid (String) which is the primary key
	  and a Quantity (int)
	  the method decreaseQuantity(int qty) decrease the quantity for the
	  corresponding stockid but may throw a RemoteException "Negative stock"

	- StockHandlerBean is a Message Driven Bean that receives Map messages:
		"CustomerId", String
		"ProductId", String
		"Quantity", int

	  the onMessage method will run in the scope of a transaction started
	  by the the container in the receipt of a message on the
	  topic (StockHandlerTopic)
          it will send a Text message on a Queue (OrderQueue) and decrease
	  the stock quantity for the Stock element identified by the "ProductId".
          If it catches a RemoteException on the decreaseQuantity method it will call
	  the setRollbackOnly method of the MessageDrivenContext linked to the
	  instance in this case the container transaction will be rolled back.

	- OrderBean is another Message Driven Bean listening on the OrderQueue Queue
	  on receipt of a Text message on this queue it will write the corresponding
          String as a new line in a file (order.txt)

        - EnvBean is a stateless session bean used for creating the stock table
	  in the database and for deleting this table

	- SampleAppliClient is a java application that sends n messages to the
	  topic StockHandlerTopic for decreasing several Stock items these
	  n messages doesn't cause the raise of Remote Exception negative stock
          and sends one message on the Stock id "00000" that must cause
	  a rollback of the transaction.
	  At the end it verifies the number of messages received by the
	  Order message driven bean by counting the nb of lines in the
	  order.txt file (it must be equal to n) and verifies that the
	  stock quantity for "00000" has not changed and all the other must
          be equal to 1.


Compiling the example :
---------------------

ant -find build.xml install

Running this example :
---------------------
You can use the provided run.sh (Unix) or run.bat (Windows) scripts to execute the
whole example or run it step by step.

	jonas start
    	jonas admin -a sampleappli.jar
	jclient -cp $JONAS_BASE/ejbjars/sampleappli.jar:$JONAS_ROOT/examples/classes sampleappli.SampleAppliClient
	jonas stop

Note :
Running this example will lead to a normal exception in the JOnAS server :

	System Exception in business method:
java.rmi.RemoteException: Negative stock
	at sampleappli.StockBean.decreaseQuantity(StockBean.java:199)
	...

