Initial commit

parents
9780596000684
\ No newline at end of file
/*
* Copyright (C) 2000, O'Reilly & Associates, Inc.
* The code in this file may be copied, distributed, and reused,
* provided that you do not remove this copyright notice.
* O'Reilly & Associates assumes no responsibility for damages
* resulting from the use of this code.
*/
package chap5.b2b;
import java.util.StringTokenizer;
import java.util.Properties;
import javax.naming.*;
import javax.jms.TopicConnectionFactory;
import javax.jms.QueueConnectionFactory;
import javax.jms.Topic;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.StreamMessage;
import javax.jms.TextMessage;
public class QRetailer implements javax.jms.MessageListener{
private javax.jms.QueueConnection qConnect = null;
private javax.jms.QueueSession qSession = null;
private javax.jms.QueueSender qSender = null;
private javax.jms.TopicConnection tConnect = null;
private javax.jms.TopicSession tSession = null;
private javax.jms.Topic hotDealsTopic = null;
private javax.jms.TopicSubscriber tsubscriber = null;
private static String uname = null;
public QRetailer( String broker, String username, String password){
try{
TopicConnectionFactory tFactory = null;
QueueConnectionFactory qFactory = null;
InitialContext jndi = null;
uname = username;
Properties env = new Properties();
// ... specify the JNDI properties specific to the JNDI SPI being used
env.put("BROKER", broker);
jndi = new InitialContext(env);
tFactory =
(TopicConnectionFactory)jndi.lookup("TopicConnectionFactory");
qFactory =
(QueueConnectionFactory)jndi.lookup("QueueConnectionFactory");
tConnect =
tFactory.createTopicConnection (username, password);
qConnect =
qFactory.createQueueConnection (username, password);
tConnect.setClientID(username);
qConnect.setClientID(username);
tSession =
tConnect.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
qSession =
qConnect.createQueueSession(false,
javax.jms.Session.AUTO_ACKNOWLEDGE);
hotDealsTopic = (Topic)jndi.lookup("Hot Deals");
hotDealsTopic = tSession.createTopic ("Hot Deals");
tsubscriber = tSession.createDurableSubscriber(hotDealsTopic,
"Hot Deals Subscription");
tsubscriber.setMessageListener(this);
tConnect.start();
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace();
System.exit(1);
}catch(javax.naming.NamingException jne){
jne.printStackTrace(); System.exit(1);
}
}
public void onMessage(javax.jms.Message aMessage){
try{
autoBuy(aMessage);
}catch (java.lang.RuntimeException rte){
rte.printStackTrace();
}
}
private void autoBuy (javax.jms.Message message){
try{
StreamMessage strmMsg = (StreamMessage)message;
String dealDesc = strmMsg.readString();
String itemDesc = strmMsg.readString();
float oldPrice = strmMsg.readFloat();
float newPrice = strmMsg.readFloat();
System.out.println("Received Hot Buy :"+dealDesc);
// if price reduction greater than 10 percent, buy
if (newPrice == 0 || oldPrice / newPrice > 1.1){
int count = (int)(java.lang.Math.random() * (double)1000);
System.out.println ("\nBuying " + count + " " + itemDesc);
TextMessage textMsg = tSession.createTextMessage();
textMsg.setText(count + " " + itemDesc );
textMsg.setIntProperty("QTY", count);
textMsg.setJMSCorrelationID(uname);
Queue buyQueue = (Queue)message.getJMSReplyTo();
qSender = qSession.createSender(buyQueue);
qSender.send( textMsg,
javax.jms.DeliveryMode.PERSISTENT,
javax.jms.Message.DEFAULT_PRIORITY,
1800000);
}else{
System.out.println ("\nBad Deal. Not buying");
}
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace();
}
}
private void exit(String s){
try {
if ( s != null &&
s.equalsIgnoreCase("unsubscribe"))
{
tsubscriber.close();
tSession.unsubscribe("Hot Deals Subscription");
}
tConnect.close();
qConnect.close();
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace();
}
System.exit(0);
}
public static void main(String argv[]) {
String broker, username, password;
if(argv.length == 3){
broker = argv[0];
username = argv[1];
password = argv[2];
}else{
System.out.println("Invalid arguments. Should be: ");
System.out.println
("java QRetailer broker username password");
return;
}
QRetailer retailer = new QRetailer(broker, username, password);
try{
System.out.println("\nRetailer application started.\n");
// Read all standard input and send it as a message.
java.io.BufferedReader stdin =
new java.io.BufferedReader
( new java.io.InputStreamReader( System.in ) );
while ( true ){
String s = stdin.readLine();
if ( s == null )retailer.exit(null);
else if ( s.equalsIgnoreCase("unsubscribe") )
retailer.exit ( s );
}
}catch ( java.io.IOException ioe ){
ioe.printStackTrace();
}
}
}
class InitialContext
{
String mBroker = null;
public InitialContext (Properties env)
{
mBroker = env.getProperty("BROKER");
return;
}
public Object lookup(String str) throws javax.naming.NamingException,
javax.jms.JMSException
{
if ( str.equalsIgnoreCase("Hot Deals") )
return (new progress.message.jclient.Topic(str));
else if ( str.equalsIgnoreCase("Buy Order") )
return (new progress.message.jclient.Topic(str));
else if ( str.equalsIgnoreCase("Reply Q") )
return (new progress.message.jclient.Queue("SampleQ1"));
else if( str.equalsIgnoreCase("TopicConnectionFactory") )
return (new progress.message.jclient.TopicConnectionFactory (mBroker));
else if( str.equalsIgnoreCase("QueueConnectionFactory") )
return (new progress.message.jclient.QueueConnectionFactory (mBroker));
else // its whatever "Chat" topic was passed in on the command line
return (new progress.message.jclient.Topic(str));
}
}
\ No newline at end of file
/*
* Copyright (C) 2000, O'Reilly & Associates, Inc.
* The code in this file may be copied, distributed, and reused,
* provided that you do not remove this copyright notice.
* O'Reilly & Associates assumes no responsibility for damages
* resulting from the use of this code.
*/
package chap5.b2b;
import java.util.StringTokenizer;
import java.util.Properties;
import javax.naming.*;
import javax.jms.TopicConnectionFactory;
import javax.jms.QueueConnectionFactory;
import javax.jms.Topic;
import javax.jms.Queue;
import javax.jms.QueueReceiver;
import javax.jms.Session;
import javax.jms.TextMessage;
public class QWholesaler implements javax.jms.MessageListener{
private javax.jms.TopicConnection tConnect = null;
private javax.jms.TopicSession tSession = null;
private javax.jms.TopicPublisher tPublisher = null;
private javax.jms.QueueConnection qConnect = null;
private javax.jms.QueueSession qSession = null;
private javax.jms.Queue receiveQueue = null;
private javax.jms.Topic hotDealsTopic = null;
private javax.jms.TemporaryTopic buyOrdersTopic = null;
public QWholesaler(String broker, String username, String password){
try{
TopicConnectionFactory tFactory = null;
QueueConnectionFactory qFactory = null;
InitialContext jndi = null;
Properties env = new Properties();
// ... specify the JNDI properties specific to the JNDI SPI being used
env.put("BROKER", broker);
jndi = new InitialContext(env);
tFactory =
(TopicConnectionFactory)jndi.lookup("TopicConnectionFactory");
qFactory =
(QueueConnectionFactory)jndi.lookup("QueueConnectionFactory");
tConnect = tFactory.createTopicConnection (username, password);
qConnect = qFactory.createQueueConnection (username, password);
tSession =
tConnect.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
qSession =
qConnect.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
hotDealsTopic = (Topic)jndi.lookup("Hot Deals");
receiveQueue = (Queue)jndi.lookup("Reply Q");
tPublisher = tSession.createPublisher(hotDealsTopic);
QueueReceiver qReceiver = qSession.createReceiver(receiveQueue);
qReceiver.setMessageListener(this);
((progress.message.jclient.QueueReceiver)qReceiver).setPrefetchThreshold(0);
((progress.message.jclient.QueueReceiver)qReceiver).setPrefetchCount(1);
// Now that setup is complete, start the Connection
qConnect.start();
tConnect.start();
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace(); System.exit(1);
}catch(javax.naming.NamingException jne){
jne.printStackTrace(); System.exit(1);
}
}
private void publishPriceQuotes(String dealDesc, String username,
String itemDesc, float oldPrice,
float newPrice){
try{
javax.jms.StreamMessage message = tSession.createStreamMessage();
message.writeString(dealDesc);
message.writeString(itemDesc);
message.writeFloat(oldPrice);
message.writeFloat(newPrice);
message.setStringProperty("Username", username);
message.setStringProperty("itemDesc", itemDesc);
message.setJMSReplyTo(receiveQueue);
tPublisher.publish(
message,
javax.jms.DeliveryMode.PERSISTENT,
javax.jms.Message.DEFAULT_PRIORITY,
1800000);
}catch ( javax.jms.JMSException jmse ){
jmse.printStackTrace();
}
}
public void onMessage( javax.jms.Message message){
try{
TextMessage textMessage = (TextMessage) message;
String text = textMessage.getText();
System.out.println("Order received - "+text+
" from " + message.getJMSCorrelationID());
}catch (java.lang.Exception rte){
rte.printStackTrace();
}
}
public void exit(){
try{
tConnect.close();
qConnect.close();
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace();
}
System.exit(0);
}
public static void main(String argv[]) {
String broker, username, password;
if(argv.length == 3){
broker = argv[0];
username = argv[1];
password = argv[2];
}else{
System.out.println("Invalid arguments. Should be: ");
System.out.println("java QWholesaler broker username password");
return;
}
QWholesaler wholesaler = new QWholesaler(broker, username, password);
try{
// Read all standard input and send it as a message.
java.io.BufferedReader stdin = new java.io.BufferedReader
(new java.io.InputStreamReader( System.in ) );
System.out.println ("Enter: Item, Old Price, New Price ");
System.out.println("\ne.g. Bowling Shoes, 100.00, 55.00");
while ( true ){
String dealDesc = stdin.readLine();
if(dealDesc != null && dealDesc.length() > 0){
// parse the deal description
StringTokenizer tokenizer =
new StringTokenizer(dealDesc,",") ;
String itemDesc = tokenizer.nextToken();
String temp = tokenizer.nextToken();
float oldPrice =
Float.valueOf(temp.trim()).floatValue();
temp = tokenizer.nextToken();
float newPrice =
Float.valueOf(temp.trim()).floatValue();
wholesaler.publishPriceQuotes(dealDesc,username,
itemDesc, oldPrice,newPrice);
}else{
wholesaler.exit();
}
}
}catch( java.io.IOException ioe ){
ioe.printStackTrace();
}
}
}
class InitialContext
{
String mBroker = null;
public InitialContext (Properties env)
{
mBroker = env.getProperty("BROKER");
return;
}
public Object lookup(String str) throws javax.naming.NamingException,
javax.jms.JMSException
{
if ( str.equalsIgnoreCase("Hot Deals") )
return (new progress.message.jclient.Topic(str));
else if ( str.equalsIgnoreCase("Buy Order") )
return (new progress.message.jclient.Topic(str));
else if ( str.equalsIgnoreCase("Reply Q") )
return (new progress.message.jclient.Queue("SampleQ1"));
else if( str.equalsIgnoreCase("TopicConnectionFactory") )
return (new progress.message.jclient.TopicConnectionFactory (mBroker));
else if( str.equalsIgnoreCase("QueueConnectionFactory") )
return (new progress.message.jclient.QueueConnectionFactory (mBroker));
else // its whatever "Chat" topic was passed in on the command line
return (new progress.message.jclient.Topic(str));
}
}
\ No newline at end of file
/*
* Copyright (C) 2000, O'Reilly & Associates, Inc.
* The code in this file may be copied, distributed, and reused,
* provided that you do not remove this copyright notice.
* O'Reilly & Associates assumes no responsibility for damages
* resulting from the use of this code.
*/
package chap6.b2b;
import java.util.StringTokenizer;
import java.util.Properties;
import javax.naming.*;
import javax.jms.TopicConnectionFactory;
import javax.jms.QueueConnectionFactory;
import javax.jms.Topic;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.StreamMessage;
import javax.jms.TextMessage;
public class QRetailer implements javax.jms.MessageListener{
private javax.jms.QueueConnection qConnect = null;
private javax.jms.QueueSession qSession = null;
private javax.jms.QueueSender qSender = null;
private javax.jms.TopicConnection tConnect = null;
private javax.jms.TopicSession tSession = null;
private javax.jms.TopicPublisher tPublisher = null;
private javax.jms.Topic hotDealsTopic = null;
private javax.jms.TopicSubscriber tSubscriber = null;
private static int msgCount = 0;
public QRetailer( String broker, String username, String password){
try{
TopicConnectionFactory tFactory = null;
QueueConnectionFactory qFactory = null;
InitialContext jndi = null;
Properties env = new Properties();
// ... specify the JNDI properties specific to the JNDI SPI being used
env.put("BROKER", broker);
jndi = new InitialContext(env);
tFactory =
(TopicConnectionFactory)jndi.lookup("TopicConnectionFactory");
qFactory =
(QueueConnectionFactory)jndi.lookup("QueueConnectionFactory");
tConnect = tFactory.createTopicConnection (username, password);
qConnect = qFactory.createQueueConnection (username, password);
tConnect.setClientID(username);
qConnect.setClientID(username);
tSession =
tConnect.createTopicSession(false,Session.CLIENT_ACKNOWLEDGE);
qSession =
qConnect.createQueueSession(false,javax.jms.Session.AUTO_ACKNOWLEDGE);
hotDealsTopic = (Topic)jndi.lookup("Hot Deals");
tSubscriber = tSession.createDurableSubscriber(hotDealsTopic,
"Hot Deals Subscription");
tSubscriber.setMessageListener(this);
tConnect.start();
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace();
System.exit(1);
}catch(javax.naming.NamingException jne){
jne.printStackTrace(); System.exit(1);
}
}
public void onMessage(javax.jms.Message aMessage){
try{
autoBuy(aMessage);
}catch (java.lang.RuntimeException rte){
rte.printStackTrace();
}
}
private void autoBuy (javax.jms.Message message){
int count = 1000;
try{
StreamMessage strmMsg = (StreamMessage)message;
//must reset the message stream so that it can be read from the beginning
if( strmMsg.getJMSRedelivered() )
strmMsg.reset();
String dealDesc = strmMsg.readString();
String itemDesc = strmMsg.readString();
float oldprice = strmMsg.readFloat();
float newprice = strmMsg.readFloat();
System.out.println("Received Hot Buy :"+dealDesc);
if ( saveDesc == null){
if (message.getJMSRedelivered())
processCompensatingTransaction();
processInterimMessages( itemDesc );
return;
}
// if price reduction greater than 10 percent, buy
if ((newprice == 0 || oldprice / newprice > 1.1)){
TextMessage textMsg = tSession.createTextMessage();
textMsg.setText(count + " " + saveDesc + ", "
+ count + " " + itemDesc );
textMsg.setJMSCorrelationID("DurableRetailer");
Queue buyQueue = (Queue)message.getJMSReplyTo();
System.out.println ("\nBuying " + count + " "
+ saveDesc + " " + count + " " + itemDesc);
qSender = qSession.createSender(buyQueue);
qSender.send( textMsg,
javax.jms.DeliveryMode.PERSISTENT,
javax.jms.Message.DEFAULT_PRIORITY,
1800000);
// acknowledge the original message
try{
System.out.println("\nAcknowledging messages");
message.acknowledge();
System.out.println("\nMessage acknowledged");
saveDesc = null;
}catch (javax.jms.JMSException jmse){
System.out.println("\nAcknowledgement failed." +
"\nProcessing compensating transaction for interim messages");
processCompensatingTransaction();
}
}else{
System.out.println ("\nBad Deal. Not buying");
}
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace();
}
}
private String saveDesc = null;
private void processInterimMessages(String itemDesc)
{
saveDesc = itemDesc;
}
private void processCompensatingTransaction()
{
System.out.println("Processing compensating");
saveDesc = null; // null out "saved" work
}
private void exit(String s){
try {
if ( s != null &&
s.equalsIgnoreCase("unsubscribe"))
{
tSubscriber.close();
tSession.unsubscribe("Hot Deals Subscription");
}
tConnect.close();
qConnect.close();
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace();
}
System.exit(0);
}
public static void main(String argv[]) {
String broker, username, password;
if(argv.length == 3){
broker = argv[0];
username = argv[1];
password = argv[2];
}else{
System.out.println("Invalid arguments. Should be: ");
System.out.println
("java QRetailer broker username password");
return;
}
QRetailer retailer = new QRetailer(broker, username, password);
try{
System.out.println("\nRetailer application started.\n");
// Read all standard input and send it as a message.
java.io.BufferedReader stdin =
new java.io.BufferedReader
( new java.io.InputStreamReader( System.in ) );
while ( true ){
String s = stdin.readLine();
if ( s == null )retailer.exit(null);
else if ( s.equalsIgnoreCase("unsubscribe") )
retailer.exit ( s );
}
}catch ( java.io.IOException ioe ){
ioe.printStackTrace();
}
}
}
class InitialContext
{
String mBroker = null;
public InitialContext (Properties env)
{
mBroker = env.getProperty("BROKER");
return;
}
public Object lookup(String str) throws javax.naming.NamingException,
javax.jms.JMSException
{
if ( str.equalsIgnoreCase("Hot Deals") )
return (new progress.message.jclient.Topic(str));
else if ( str.equalsIgnoreCase("Buy Order") )
return (new progress.message.jclient.Topic(str));
else if ( str.equalsIgnoreCase("Reply Q") )
return (new progress.message.jclient.Queue("SampleQ1"));
else if( str.equalsIgnoreCase("TopicConnectionFactory") )
return (new progress.message.jclient.TopicConnectionFactory (mBroker));
else if( str.equalsIgnoreCase("QueueConnectionFactory") )
return (new progress.message.jclient.QueueConnectionFactory (mBroker));
else // its whatever "Chat" topic was passed in on the command line
return (new progress.message.jclient.Topic(str));
}
}
\ No newline at end of file
/*
* Copyright (C) 2000, O'Reilly & Associates, Inc.
* The code in this file may be copied, distributed, and reused,
* provided that you do not remove this copyright notice.
* O'Reilly & Associates assumes no responsibility for damages
* resulting from the use of this code.
*/
package chap6.b2b;
import java.util.StringTokenizer;
import java.util.Properties;
import javax.naming.*;
import javax.jms.TopicConnectionFactory;
import javax.jms.QueueConnectionFactory;
import javax.jms.Topic;
import javax.jms.Queue;
import javax.jms.QueueReceiver;
import javax.jms.Session;
import javax.jms.TextMessage;
public class QWholesaler implements javax.jms.MessageListener{
private javax.jms.TopicConnection tConnect = null;
private javax.jms.TopicSession tSession = null;
private javax.jms.TopicPublisher tPublisher = null;
private javax.jms.QueueConnection qConnect = null;
private javax.jms.QueueSession qSession = null;
private javax.jms.Queue receiveQueue = null;
private javax.jms.Topic hotDealsTopic = null;
private javax.jms.TemporaryTopic buyOrdersTopic = null;
public QWholesaler(String broker, String username, String password){
try{
TopicConnectionFactory tFactory = null;
QueueConnectionFactory qFactory = null;
InitialContext jndi = null;
Properties env = new Properties();
// ... specify the JNDI properties specific to the JNDI SPI being used
env.put("BROKER", broker);
jndi = new InitialContext(env);
tFactory =
(TopicConnectionFactory)jndi.lookup("TopicConnectionFactory");
qFactory =
(QueueConnectionFactory)jndi.lookup("QueueConnectionFactory");
tConnect = tFactory.createTopicConnection (username, password);
qConnect = qFactory.createQueueConnection (username, password);
tSession =
tConnect.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
qSession =
qConnect.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
hotDealsTopic = (Topic)jndi.lookup("Hot Deals");
receiveQueue = (Queue)jndi.lookup("Reply Q");
tPublisher = tSession.createPublisher(hotDealsTopic);
QueueReceiver qReceiver = qSession.createReceiver(receiveQueue);
qReceiver.setMessageListener(this);
// Now that setup is complete, start the Connection
qConnect.start();
tConnect.start();
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace(); System.exit(1);
}catch(javax.naming.NamingException jne){
jne.printStackTrace(); System.exit(1);
}
}
private void publishPriceQuotes(String dealDesc, String username,
String itemDesc, float oldPrice,
float newPrice){
try{
javax.jms.StreamMessage message = tSession.createStreamMessage();
message.writeString(dealDesc);
message.writeString(itemDesc);
message.writeFloat(oldPrice);
message.writeFloat(newPrice);
message.setStringProperty("Username", username);
message.setStringProperty("Itemdesc", itemDesc);
message.setJMSReplyTo(receiveQueue);
tPublisher.publish(
message,
javax.jms.DeliveryMode.PERSISTENT,
javax.jms.Message.DEFAULT_PRIORITY,
1800000);
}catch ( javax.jms.JMSException jmse ){
jmse.printStackTrace();
}
}
public void onMessage( javax.jms.Message message){
try{
TextMessage textMessage = (TextMessage) message;
String text = textMessage.getText();
System.out.println("Order received - "+text+
" from " + message.getJMSCorrelationID());
}catch (java.lang.Exception rte){
rte.printStackTrace();
}
}
public void exit(){
try{
tConnect.close();
qConnect.close();
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace();
}
System.exit(0);
}
public static void main(String argv[]) {
String broker, username, password;
if(argv.length == 3){
broker = argv[0];
username = argv[1];
password = argv[2];
}else{
System.out.println("Invalid arguments. Should be: ");
System.out.println("java QWholesaler broker username password");
return;
}
QWholesaler wholesaler = new QWholesaler(broker, username, password);
try{
// Read all standard input and send it as a message.
java.io.BufferedReader stdin = new java.io.BufferedReader
(new java.io.InputStreamReader( System.in ) );
System.out.println ("Enter: Item, Old Price, New Price ");
System.out.println("\ne.g. Bowling Shoes, 100.00, 55.00");
while ( true ){
String dealDesc = stdin.readLine();
if(dealDesc != null && dealDesc.length() > 0){
// parse the deal description
StringTokenizer tokenizer =
new StringTokenizer(dealDesc,",") ;
String itemDesc = tokenizer.nextToken();
String temp = tokenizer.nextToken();
float oldPrice =
Float.valueOf(temp.trim()).floatValue();
temp = tokenizer.nextToken();
float newPrice =
Float.valueOf(temp.trim()).floatValue();
wholesaler.publishPriceQuotes(dealDesc,username,
itemDesc, oldPrice,newPrice);
}else{
wholesaler.exit();
}
}
}catch( java.io.IOException ioe ){
ioe.printStackTrace();
}
}
}
class InitialContext
{
String mBroker = null;
public InitialContext (Properties env)
{
mBroker = env.getProperty("BROKER");
return;
}
public Object lookup(String str) throws javax.naming.NamingException,
javax.jms.JMSException
{
if ( str.equalsIgnoreCase("Hot Deals") )
return (new progress.message.jclient.Topic(str));
else if ( str.equalsIgnoreCase("Buy Order") )
return (new progress.message.jclient.Topic(str));
else if ( str.equalsIgnoreCase("Reply Q") )
return (new progress.message.jclient.Queue("SampleQ1"));
else if( str.equalsIgnoreCase("TopicConnectionFactory") )
return (new progress.message.jclient.TopicConnectionFactory (mBroker));
else if( str.equalsIgnoreCase("QueueConnectionFactory") )
return (new progress.message.jclient.QueueConnectionFactory (mBroker));
else // its whatever "Chat" topic was passed in on the command line
return (new progress.message.jclient.Topic(str));
}
}
\ No newline at end of file
/*
* Copyright (C) 2000, O'Reilly & Associates, Inc.
* The code in this file may be copied, distributed, and reused,
* provided that you do not remove this copyright notice.
* O'Reilly & Associates assumes no responsibility for damages
* resulting from the use of this code.
*/
package chap6.b2b;
import java.util.StringTokenizer;
import java.util.Properties;
import javax.naming.*;
import javax.jms.TopicConnectionFactory;
import javax.jms.Topic;
import javax.jms.Session;
import javax.jms.StreamMessage;
import javax.jms.TextMessage;
public class Retailer implements javax.jms.MessageListener{
private javax.jms.TopicConnection connect = null;
private javax.jms.TopicSession session = null;
private javax.jms.TopicPublisher publisher = null;
private javax.jms.Topic hotDealsTopic = null;
private javax.jms.TopicSubscriber subscriber = null;
private static boolean inRollback = false;
private static boolean rollbackOnly = false;
public Retailer( String broker, String username, String password){
try{
TopicConnectionFactory factory = null;
InitialContext jndi = null;
Properties env = new Properties();
// ... specify the JNDI properties specific to the JNDI SPI being used
env.put("BROKER",broker);
jndi = new InitialContext(env);
factory =
(TopicConnectionFactory)jndi.lookup("TopicConnectionFactory");
connect = factory.createTopicConnection (username, password);
connect.setClientID(username);
session =
connect.createTopicSession(true,Session.AUTO_ACKNOWLEDGE);
hotDealsTopic = (Topic)jndi.lookup("Hot Deals");
subscriber = session.createDurableSubscriber(hotDealsTopic,
"Hot Deals Subscription");
publisher = session.createPublisher(null);
subscriber.setMessageListener(this);
connect.start();
}catch (javax.jms.JMSException jmse){
jmse.printStackTrace();
System.exit(1);
}catch(javax.naming.NamingException jne){
jne.printStackTrace(); System.exit(1);
}
}
public void onMessage(javax.jms.Message aMessage){
try{
autoBuy(aMessage);
}catch (java.lang.RuntimeException rte){
rte.printStackTrace();
}
}
private void autoBuy (javax.jms.Message message){
int count = 1000;
try{
boolean redelivered = message.getJMSRedelivered();
StreamMessage strmMsg = (StreamMessage)message;
if( redelivered ){
System.out.println("\nMessage redelivered, inRollback: "
+ inRollback + " rollbackOnly: " + rollbackOnly );