jmsvendoradapter.java
来自「Java有关XML编程需要用到axis 的源代码 把里面bin下的包导入相应」· Java 代码 · 共 324 行
JAVA
324 行
/* * Copyright 2001, 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.axis.components.jms;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.jms.InvalidDestinationException;import javax.jms.JMSException;import javax.jms.JMSSecurityException;import javax.jms.Message;import javax.jms.Queue;import javax.jms.QueueConnectionFactory;import javax.jms.QueueSession;import javax.jms.Topic;import javax.jms.TopicConnectionFactory;import javax.jms.TopicSession;import org.apache.axis.MessageContext;import org.apache.axis.client.Call;import org.apache.axis.transport.jms.JMSConstants;import org.apache.axis.transport.jms.JMSURLHelper;/** * SPI Interface that all JMSVendorAdaptors must implement. Allows for * ConnectionFactory creation and Destination lookup * * @author Jaime Meritt (jmeritt@sonicsoftware.com) * @author Ray Chun (rchun@sonicsoftware.com) */public abstract class JMSVendorAdapter{ public static final int SEND_ACTION = 0; public static final int CONNECT_ACTION = 1; public static final int SUBSCRIBE_ACTION = 2; public static final int RECEIVE_ACTION = 3; public static final int ON_EXCEPTION_ACTION = 4; public abstract QueueConnectionFactory getQueueConnectionFactory(HashMap cfProps) throws Exception; public abstract TopicConnectionFactory getTopicConnectionFactory(HashMap cfProps) throws Exception; // let adapters add vendor-specific properties or override standard ones public abstract void addVendorConnectionFactoryProperties(JMSURLHelper jmsurl, HashMap cfProps); // let adapters match connectors using vendor-specific connection factory properties public abstract boolean isMatchingConnectionFactory(javax.jms.ConnectionFactory cf, JMSURLHelper jmsurl, HashMap cfProps); // returns <adapter> in 'org.apache.axis.components.jms.<adapter>VendorAdapter' public String getVendorId() { String name = this.getClass().getName(); // cut off the trailing 'VendorAdapter' if (name.endsWith(JMSConstants.ADAPTER_POSTFIX)) { int index = name.lastIndexOf(JMSConstants.ADAPTER_POSTFIX); name = name.substring(0,index); } // cut off the leading 'org.apache.axis.components.jms.' int index = name.lastIndexOf("."); if (index > 0) name = name.substring(index+1); return name; } /** * Creates a JMS connector property table using values supplied in * the endpoint address. Properties are translated from the short form * in the endpoint address to the long form (prefixed by "transport.jms.") * * @param jmsurl the endpoint address * @return the set of properties to be used for instantiating the JMS connector */ public HashMap getJMSConnectorProperties(JMSURLHelper jmsurl) { HashMap connectorProps = new HashMap(); // the JMS URL may be useful when matching connectors connectorProps.put(JMSConstants.JMS_URL, jmsurl); // JMSConstants.CLIENT_ID, String clientID = jmsurl.getPropertyValue(JMSConstants._CLIENT_ID); if (clientID != null) connectorProps.put(JMSConstants.CLIENT_ID, clientID); // JMSConstants.CONNECT_RETRY_INTERVAL, String connectRetryInterval = jmsurl.getPropertyValue(JMSConstants._CONNECT_RETRY_INTERVAL); if (connectRetryInterval != null) connectorProps.put(JMSConstants.CONNECT_RETRY_INTERVAL, connectRetryInterval); // JMSConstants.INTERACT_RETRY_INTERVAL, String interactRetryInterval = jmsurl.getPropertyValue(JMSConstants._INTERACT_RETRY_INTERVAL); if (interactRetryInterval != null) connectorProps.put(JMSConstants.INTERACT_RETRY_INTERVAL, interactRetryInterval); // JMSConstants.DOMAIN String domain = jmsurl.getPropertyValue(JMSConstants._DOMAIN); if (domain != null) connectorProps.put(JMSConstants.DOMAIN, domain); // JMSConstants.NUM_RETRIES String numRetries = jmsurl.getPropertyValue(JMSConstants._NUM_RETRIES); if (numRetries != null) connectorProps.put(JMSConstants.NUM_RETRIES, numRetries); // JMSConstants.NUM_SESSIONS String numSessions = jmsurl.getPropertyValue(JMSConstants._NUM_SESSIONS); if (numSessions != null) connectorProps.put(JMSConstants.NUM_SESSIONS, numSessions); // JMSConstants.TIMEOUT_TIME, String timeoutTime = jmsurl.getPropertyValue(JMSConstants._TIMEOUT_TIME); if (timeoutTime != null) connectorProps.put(JMSConstants.TIMEOUT_TIME, timeoutTime); return connectorProps; } /** * * Creates a connection factory property table using values supplied in * the endpoint address * * @param jmsurl the endpoint address * @return the set of properties to be used for instantiating the connection factory */ public HashMap getJMSConnectionFactoryProperties(JMSURLHelper jmsurl) { HashMap cfProps = new HashMap(); // hold on to the original address (this will be useful when the JNDI vendor adapter // matches connectors) cfProps.put(JMSConstants.JMS_URL, jmsurl); // JMSConstants.DOMAIN String domain = jmsurl.getPropertyValue(JMSConstants._DOMAIN); if (domain != null) cfProps.put(JMSConstants.DOMAIN, domain); // allow vendors to customize the cf properties table addVendorConnectionFactoryProperties(jmsurl, cfProps); return cfProps; } public Queue getQueue(QueueSession session, String name) throws Exception { return session.createQueue(name); } public Topic getTopic(TopicSession session, String name) throws Exception { return session.createTopic(name); } public boolean isRecoverable(Throwable thrown, int action) { if(thrown instanceof RuntimeException || thrown instanceof Error || thrown instanceof JMSSecurityException || thrown instanceof InvalidDestinationException) return false; if(action == ON_EXCEPTION_ACTION) return false; return true; } public void setProperties(Message message, HashMap props) throws JMSException { Iterator iter = props.keySet().iterator(); while (iter.hasNext()) { String key = (String)iter.next(); String value = (String)props.get(key); message.setStringProperty(key, value); } } /** * Set JMS properties in the message context. * * TODO: just copy all properties that are not used for the JMS connector * or connection factory */ public void setupMessageContext(MessageContext context, Call call, JMSURLHelper jmsurl) { Object tmp = null; String jmsurlDestination = null; if (jmsurl != null) jmsurlDestination = jmsurl.getDestination(); if (jmsurlDestination != null) context.setProperty(JMSConstants.DESTINATION, jmsurlDestination); else { tmp = call.getProperty(JMSConstants.DESTINATION); if (tmp != null && tmp instanceof String) context.setProperty(JMSConstants.DESTINATION, tmp); else context.removeProperty(JMSConstants.DESTINATION); } String delivMode = null; if (jmsurl != null) delivMode = jmsurl.getPropertyValue(JMSConstants._DELIVERY_MODE); if (delivMode != null) { int mode = JMSConstants.DEFAULT_DELIVERY_MODE; if (delivMode.equalsIgnoreCase(JMSConstants.DELIVERY_MODE_PERSISTENT)) mode = javax.jms.DeliveryMode.PERSISTENT; else if (delivMode.equalsIgnoreCase(JMSConstants.DELIVERY_MODE_NONPERSISTENT)) mode = javax.jms.DeliveryMode.NON_PERSISTENT; context.setProperty(JMSConstants.DELIVERY_MODE, new Integer(mode)); } else { tmp = call.getProperty(JMSConstants.DELIVERY_MODE); if(tmp != null && tmp instanceof Integer) context.setProperty(JMSConstants.DELIVERY_MODE, tmp); else context.removeProperty(JMSConstants.DELIVERY_MODE); } String prio = null; if (jmsurl != null) prio = jmsurl.getPropertyValue(JMSConstants._PRIORITY); if (prio != null) context.setProperty(JMSConstants.PRIORITY, Integer.valueOf(prio)); else { tmp = call.getProperty(JMSConstants.PRIORITY); if(tmp != null && tmp instanceof Integer) context.setProperty(JMSConstants.PRIORITY, tmp); else context.removeProperty(JMSConstants.PRIORITY); } String ttl = null; if (jmsurl != null) ttl = jmsurl.getPropertyValue(JMSConstants._TIME_TO_LIVE); if (ttl != null) context.setProperty(JMSConstants.TIME_TO_LIVE, Long.valueOf(ttl)); else { tmp = call.getProperty(JMSConstants.TIME_TO_LIVE); if(tmp != null && tmp instanceof Long) context.setProperty(JMSConstants.TIME_TO_LIVE, tmp); else context.removeProperty(JMSConstants.TIME_TO_LIVE); } String wait = null; if (jmsurl != null) wait = jmsurl.getPropertyValue(JMSConstants._WAIT_FOR_RESPONSE); if (wait != null) context.setProperty(JMSConstants.WAIT_FOR_RESPONSE, Boolean.valueOf(wait)); else { tmp = call.getProperty(JMSConstants.WAIT_FOR_RESPONSE); if(tmp != null && tmp instanceof Boolean) context.setProperty(JMSConstants.WAIT_FOR_RESPONSE, tmp); else context.removeProperty(JMSConstants.WAIT_FOR_RESPONSE); } setupApplicationProperties(context, call, jmsurl); } public void setupApplicationProperties(MessageContext context, Call call, JMSURLHelper jmsurl) { //start with application properties from the URL Map appProps = new HashMap(); if (jmsurl != null && jmsurl.getApplicationProperties() != null) { for(Iterator itr=jmsurl.getApplicationProperties().iterator(); itr.hasNext();) { String name = (String)itr.next(); appProps.put(name,jmsurl.getPropertyValue(name)); } } //next add application properties from the message context Map ctxProps = (Map)context.getProperty(JMSConstants.JMS_APPLICATION_MSG_PROPS); if (ctxProps != null) { appProps.putAll(ctxProps); } //finally add the properties from the call Map callProps = (Map)call.getProperty(JMSConstants.JMS_APPLICATION_MSG_PROPS); if (callProps != null) { appProps.putAll(callProps); } //now tore these properties within the context context.setProperty(JMSConstants.JMS_APPLICATION_MSG_PROPS,appProps); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?