001: /*
002: * ChainBuilder ESB
003: * Visual Enterprise Integration
004: *
005: * Copyright (C) 2006 Bostech Corporation
006: *
007: * This program is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU General Public License as published by the
009: * Free Software Foundation; either version 2 of the License, or (at your option)
010: * any later version.
011: *
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
014: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
015: * for more details.
016: *
017: * You should have received a copy of the GNU General Public License along with
018: * this program; if not, write to the Free Software Foundation, Inc.,
019: * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: *
021: *
022: * $Id: CcslDeliveryChannel.java 10894 2007-12-12 22:11:32Z mpreston $
023: */
024: package com.bostechcorp.cbesb.runtime.ccsl.base;
025:
026: import java.util.HashMap;
027:
028: import javax.jbi.messaging.DeliveryChannel;
029: import javax.jbi.messaging.MessageExchange;
030: import javax.jbi.messaging.MessageExchangeFactory;
031: import javax.jbi.messaging.MessagingException;
032: import javax.jbi.servicedesc.ServiceEndpoint;
033: import javax.xml.namespace.QName;
034:
035: import org.apache.commons.logging.Log;
036:
037: import com.bostechcorp.cbesb.runtime.ccsl.lib.DeliveryHandler;
038: import com.bostechcorp.cbesb.runtime.ccsl.lib.MessageExchangeLogger;
039:
040: public class CcslDeliveryChannel implements DeliveryChannel {
041: Log log;
042: DeliveryChannel realDeliveryChannel;
043: CcslComponent ccslComponent;
044: DeliveryHandler deliveryHandler;
045:
046: class FactoryPair {
047: MessageExchangeFactory realMessageExchangeFactory;
048: CcslMessageExchangeFactory ccslMessageExchangeFactory;
049: };
050:
051: FactoryPair defaultFactory;
052:
053: HashMap<QName, FactoryPair> qnameFactoryMap = new HashMap<QName, FactoryPair>();
054: HashMap<ServiceEndpoint, FactoryPair> endpointFactoryMap = new HashMap<ServiceEndpoint, FactoryPair>();
055: HashMap<QName, FactoryPair> serviceQnameFactoryMap = new HashMap<QName, FactoryPair>();
056:
057: CcslDeliveryChannel(CcslComponent comp, DeliveryChannel chan,
058: Log log) {
059: ccslComponent = comp;
060: realDeliveryChannel = chan;
061: this .log = log;
062: deliveryHandler = new DeliveryHandler(ccslComponent.getConfig());
063: }
064:
065: public MessageExchange accept() throws MessagingException {
066: MessageExchange exchange = deliveryHandler
067: .accept(ccslComponent.realComponentContext,
068: realDeliveryChannel);
069: if (log.isDebugEnabled() && exchange != null) {
070: MessageExchangeLogger.outputExchange(log, exchange);
071: }
072: return exchange;
073: }
074:
075: public MessageExchange accept(long arg0) throws MessagingException {
076: MessageExchange exchange = deliveryHandler.accept(
077: ccslComponent.realComponentContext,
078: realDeliveryChannel, arg0);
079: if (log.isDebugEnabled() && exchange != null) {
080: MessageExchangeLogger.outputExchange(log, exchange);
081: }
082: return exchange;
083: }
084:
085: public void close() throws MessagingException {
086: realDeliveryChannel.close();
087: }
088:
089: public MessageExchangeFactory createExchangeFactory() {
090: if (defaultFactory == null) {
091: defaultFactory = new FactoryPair();
092: defaultFactory.realMessageExchangeFactory = realDeliveryChannel
093: .createExchangeFactory();
094: defaultFactory.ccslMessageExchangeFactory = new CcslMessageExchangeFactory(
095: defaultFactory.realMessageExchangeFactory, log);
096: }
097: return defaultFactory.ccslMessageExchangeFactory;
098: }
099:
100: public MessageExchangeFactory createExchangeFactory(QName arg0) {
101: FactoryPair fp = qnameFactoryMap.get(arg0);
102: if (fp == null) {
103: fp = new FactoryPair();
104: qnameFactoryMap.put(arg0, fp);
105: fp.realMessageExchangeFactory = realDeliveryChannel
106: .createExchangeFactory(arg0);
107: fp.ccslMessageExchangeFactory = new CcslMessageExchangeFactory(
108: fp.realMessageExchangeFactory, log);
109: }
110: return fp.ccslMessageExchangeFactory;
111: }
112:
113: public MessageExchangeFactory createExchangeFactory(
114: ServiceEndpoint arg0) {
115: FactoryPair fp = endpointFactoryMap.get(arg0);
116: if (fp == null) {
117: fp = new FactoryPair();
118: endpointFactoryMap.put(arg0, fp);
119: fp.realMessageExchangeFactory = realDeliveryChannel
120: .createExchangeFactory(arg0);
121: fp.ccslMessageExchangeFactory = new CcslMessageExchangeFactory(
122: fp.realMessageExchangeFactory, log);
123: }
124: return fp.ccslMessageExchangeFactory;
125: }
126:
127: public MessageExchangeFactory createExchangeFactoryForService(
128: QName arg0) {
129: FactoryPair fp = serviceQnameFactoryMap.get(arg0);
130: if (fp == null) {
131: fp = new FactoryPair();
132: serviceQnameFactoryMap.put(arg0, fp);
133: fp.realMessageExchangeFactory = realDeliveryChannel
134: .createExchangeFactory(arg0);
135: fp.ccslMessageExchangeFactory = new CcslMessageExchangeFactory(
136: fp.realMessageExchangeFactory, log);
137: }
138: return fp.ccslMessageExchangeFactory;
139: }
140:
141: public void send(MessageExchange exchange)
142: throws MessagingException {
143: if (log.isDebugEnabled() && exchange != null) {
144: MessageExchangeLogger.outputExchange(log, exchange);
145: }
146: deliveryHandler.send(ccslComponent.realComponentContext,
147: realDeliveryChannel, exchange);
148: }
149:
150: public boolean sendSync(MessageExchange exchange)
151: throws MessagingException {
152: if (log.isDebugEnabled() && exchange != null) {
153: MessageExchangeLogger.outputExchange(log, exchange);
154: }
155: return deliveryHandler.sendSync(
156: ccslComponent.realComponentContext,
157: realDeliveryChannel, exchange);
158: }
159:
160: public boolean sendSync(MessageExchange exchange, long arg1)
161: throws MessagingException {
162: if (log.isDebugEnabled() && exchange != null) {
163: MessageExchangeLogger.outputExchange(log, exchange);
164: }
165: return deliveryHandler.sendSync(
166: ccslComponent.realComponentContext,
167: realDeliveryChannel, exchange, arg1);
168: }
169:
170: }
|