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 + -
显示快捷键?