jmstransport.java

来自「Java有关XML编程需要用到axis 的源代码 把里面bin下的包导入相应」· Java 代码 · 共 263 行

JAVA
263
字号
/* * 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.transport.jms;import org.apache.axis.AxisEngine;import org.apache.axis.AxisFault;import org.apache.axis.MessageContext;import org.apache.axis.client.Call;import org.apache.axis.client.Transport;import org.apache.axis.components.jms.JMSVendorAdapter;import org.apache.axis.components.jms.JMSVendorAdapterFactory;import org.apache.axis.components.logger.LogFactory;import org.apache.axis.utils.Messages;import org.apache.commons.logging.Log;import java.util.HashMap;/** * JMSTransport is the JMS-specific implemenation of org.apache.axis.client.Transport. *   It implements the setupMessageContextImpl() function to set JMS-specific message *   context fields and transport chains. * * There are two *   Connector and connection factory *   properties are passed in during instantiation and are in turn passed through *   when creating a connector. * * @author Jaime Meritt  (jmeritt@sonicsoftware.com) * @author Richard Chung (rchung@sonicsoftware.com) * @author Dave Chappell (chappell@sonicsoftware.com) * @author Ray Chun (rchun@sonicsoftware.com) */public class JMSTransport extends Transport{    protected static Log log =            LogFactory.getLog(JMSTransport.class.getName());    private static HashMap vendorConnectorPools = new HashMap();    private HashMap defaultConnectorProps;    private HashMap defaultConnectionFactoryProps;    static    {        // add a shutdown hook to close JMS connections        Runtime.getRuntime().addShutdownHook(            new Thread()            {                public void run()                {                    JMSTransport.closeAllConnectors();                }            }        );    }    public JMSTransport()    {        transportName = "JMSTransport";    }    // this cons is provided for clients that instantiate the JMSTransport directly    public JMSTransport(HashMap connectorProps,                        HashMap connectionFactoryProps)    {        this();        defaultConnectorProps = connectorProps;        defaultConnectionFactoryProps = connectionFactoryProps;    }    /**     * Set up any transport-specific derived properties in the message context.     * @param context the context to set up     * @param message the client service instance     * @param engine the engine containing the registries     * @throws AxisFault if service cannot be found     */    public void setupMessageContextImpl(MessageContext context,                                        Call message,                                        AxisEngine engine)        throws AxisFault    {        if (log.isDebugEnabled()) {            log.debug("Enter: JMSTransport::setupMessageContextImpl");        }        JMSConnector connector = null;        HashMap connectorProperties = null;        HashMap connectionFactoryProperties = null;        JMSVendorAdapter vendorAdapter = null;        JMSURLHelper jmsurl = null;        // a security context is required to create/use JMSConnectors        String username = message.getUsername();        String password = message.getPassword();        // the presence of an endpoint address indicates whether the client application        //  is instantiating the JMSTransport directly (deprecated) or indirectly via JMS URL        String endpointAddr = message.getTargetEndpointAddress();        if (endpointAddr != null)        {            try            {                // performs minimal validation ('jms:/destination?...')                jmsurl = new JMSURLHelper(new java.net.URL(endpointAddr));                // lookup the appropriate vendor adapter                String vendorId = jmsurl.getVendor();                if (vendorId == null)                    vendorId = JMSConstants.JNDI_VENDOR_ID;                if (log.isDebugEnabled())                    log.debug("JMSTransport.setupMessageContextImpl(): endpt=" + endpointAddr +                              ", vendor=" + vendorId);                vendorAdapter = JMSVendorAdapterFactory.getJMSVendorAdapter(vendorId);                if (vendorAdapter == null)                {                    throw new AxisFault("cannotLoadAdapterClass:" + vendorId);                }                // populate the connector and connection factory properties tables                connectorProperties = vendorAdapter.getJMSConnectorProperties(jmsurl);                connectionFactoryProperties = vendorAdapter.getJMSConnectionFactoryProperties(jmsurl);            }            catch (java.net.MalformedURLException e)            {                log.error(Messages.getMessage("malformedURLException00"), e);                throw new AxisFault(Messages.getMessage("malformedURLException00"), e);            }        }        else        {            // the JMSTransport was instantiated directly, use the default adapter            vendorAdapter = JMSVendorAdapterFactory.getJMSVendorAdapter();            if (vendorAdapter == null)            {                throw new AxisFault("cannotLoadAdapterClass");            }            // use the properties passed in to the constructor            connectorProperties = defaultConnectorProps;            connectionFactoryProperties = defaultConnectionFactoryProps;        }        try        {            connector = JMSConnectorManager.getInstance().getConnector(connectorProperties, connectionFactoryProperties,                                                           username, password, vendorAdapter);        }        catch (Exception e)        {            log.error(Messages.getMessage("cannotConnectError"), e);            if(e instanceof AxisFault)                throw (AxisFault)e;            throw new AxisFault("cannotConnect", e);        }        // store these in the context for later use        context.setProperty(JMSConstants.CONNECTOR, connector);        context.setProperty(JMSConstants.VENDOR_ADAPTER, vendorAdapter);        // vendors may populate the message context        vendorAdapter.setupMessageContext(context, message, jmsurl);        if (log.isDebugEnabled()) {            log.debug("Exit: JMSTransport::setupMessageContextImpl");        }    }    /**     * Shuts down the connectors managed by this JMSTransport.     */    public void shutdown()    {        if (log.isDebugEnabled()) {            log.debug("Enter: JMSTransport::shutdown");        }        closeAllConnectors();        if (log.isDebugEnabled()) {            log.debug("Exit: JMSTransport::shutdown");        }    }    /**     * Closes all JMS connectors     */    public static void closeAllConnectors()    {        if (log.isDebugEnabled()) {            log.debug("Enter: JMSTransport::closeAllConnectors");        }        JMSConnectorManager.getInstance().closeAllConnectors();        if (log.isDebugEnabled()) {            log.debug("Exit: JMSTransport::closeAllConnectors");        }    }    /**     * Closes JMS connectors that match the specified endpoint address     *     * @param endpointAddr the JMS endpoint address     * @param username     * @param password     */    public static void closeMatchingJMSConnectors(String endpointAddr, String username, String password)    {        if (log.isDebugEnabled()) {            log.debug("Enter: JMSTransport::closeMatchingJMSConnectors");        }        try        {            JMSURLHelper jmsurl = new JMSURLHelper(new java.net.URL(endpointAddr));            String vendorId = jmsurl.getVendor();            JMSVendorAdapter vendorAdapter = null;            if (vendorId == null)                vendorId = JMSConstants.JNDI_VENDOR_ID;            vendorAdapter = JMSVendorAdapterFactory.getJMSVendorAdapter(vendorId);            // the vendor adapter may not exist            if (vendorAdapter == null)                return;            // determine the set of properties to be used for matching the connection            HashMap connectorProps = vendorAdapter.getJMSConnectorProperties(jmsurl);            HashMap cfProps = vendorAdapter.getJMSConnectionFactoryProperties(jmsurl);            JMSConnectorManager.getInstance().closeMatchingJMSConnectors(connectorProps, cfProps,                                                                         username, password,                                                                         vendorAdapter);        }        catch (java.net.MalformedURLException e)        {            log.warn(Messages.getMessage("malformedURLException00"), e);        }        if (log.isDebugEnabled()) {            log.debug("Exit: JMSTransport::closeMatchingJMSConnectors");        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?