001: /*
002: * ====================================================================
003: *
004: * XFLOW - Process Management System
005: * Copyright (C) 2003 Rob Tan
006: * All rights reserved.
007: *
008: * Redistribution and use in source and binary forms, with or without
009: * modification, are permitted provided that the following conditions
010: * are met:
011: *
012: * 1. Redistributions of source code must retain the above copyright
013: * notice, this list of conditions, and the following disclaimer.
014: *
015: * 2. Redistributions in binary form must reproduce the above copyright
016: * notice, this list of conditions, and the disclaimer that follows
017: * these conditions in the documentation and/or other materials
018: * provided with the distribution.
019: *
020: * 3. The name "XFlow" must not be used to endorse or promote products
021: * derived from this software without prior written permission. For
022: * written permission, please contact rcktan@yahoo.com
023: *
024: * 4. Products derived from this software may not be called "XFlow", nor
025: * may "XFlow" appear in their name, without prior written permission
026: * from the XFlow Project Management (rcktan@yahoo.com)
027: *
028: * In addition, we request (but do not require) that you include in the
029: * end-user documentation provided with the redistribution and/or in the
030: * software itself an acknowledgement equivalent to the following:
031: * "This product includes software developed by the
032: * XFlow Project (http://xflow.sourceforge.net/)."
033: * Alternatively, the acknowledgment may be graphical using the logos
034: * available at http://xflow.sourceforge.net/
035: *
036: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
037: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
038: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
039: * DISCLAIMED. IN NO EVENT SHALL THE XFLOW AUTHORS OR THE PROJECT
040: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: *
049: * ====================================================================
050: * This software consists of voluntary contributions made by many
051: * individuals on behalf of the XFlow Project and was originally
052: * created by Rob Tan (rcktan@yahoo.com)
053: * For more information on the XFlow Project, please see:
054: * <http://xflow.sourceforge.net/>.
055: * ====================================================================
056: */
057: package xflow.messaging;
058:
059: import java.util.*;
060: import java.io.*;
061: import java.net.*;
062: import javax.jms.*;
063: import javax.naming.*;
064: import org.apache.log4j.Logger;
065:
066: import xflow.common.*;
067:
068: public class JMSPublisher {
069:
070: private static Logger log = Logger.getLogger(JMSPublisher.class);
071:
072: public static void send(String topicName, String smsg, Vector props)
073: throws XflowException {
074:
075: try {
076: InitialContext iniCtx = JMSTopicConnection
077: .getInitialContext();
078: TopicConnection conn = JMSTopicConnection.getConnection();
079: Topic topic = (Topic) iniCtx.lookup(topicName);
080: TopicSession session = conn.createTopicSession(false,
081: TopicSession.AUTO_ACKNOWLEDGE);
082: TopicPublisher pub = session.createPublisher(topic);
083: TextMessage msg = session.createTextMessage(smsg);
084: if (props != null) {
085: for (int i = 0; i < props.size(); i++) {
086: MessageProperty mp = (MessageProperty) props
087: .elementAt(i);
088: msg.setStringProperty(mp.name, mp.value);
089: }
090: }
091: pub.publish(msg);
092: pub.close();
093: log.info("Published message for topic: " + topicName);
094: } catch (Exception e) {
095: e.printStackTrace();
096: throw new XflowException(
097: "Can't publish message on JMS topic: " + topicName);
098: }
099: }
100:
101: public static void send(String topicName, byte[] barr, Vector props)
102: throws XflowException {
103:
104: try {
105: InitialContext iniCtx = JMSTopicConnection
106: .getInitialContext();
107: TopicConnection conn = JMSTopicConnection.getConnection();
108: Topic topic = (Topic) iniCtx.lookup(topicName);
109: TopicSession session = conn.createTopicSession(false,
110: TopicSession.AUTO_ACKNOWLEDGE);
111: TopicPublisher pub = session.createPublisher(topic);
112: BytesMessage msg = session.createBytesMessage();
113: msg.writeBytes(barr);
114: if (props != null) {
115: for (int i = 0; i < props.size(); i++) {
116: MessageProperty mp = (MessageProperty) props
117: .elementAt(i);
118: log.info("Setting message property: " + mp.name
119: + " " + mp.value);
120: msg.setStringProperty(mp.name, mp.value);
121: }
122: }
123: pub.publish(msg);
124: pub.close();
125: log.info("Published message for topic: " + topicName);
126: } catch (Exception e) {
127: e.printStackTrace();
128: throw new XflowException(
129: "Can't publish message on JMS topic: " + topicName);
130: }
131: }
132: }
|