blob: da4349ba86ffd1152659e51330cef7364c0083ee [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.qpid.transport.network;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.qpid.framing.ProtocolVersion;
import org.apache.qpid.transport.TransportException;
public class Transport
{
public static final String QPID_TRANSPORT_PROPNAME = "qpid.transport";
public static final String QPID_TRANSPORT_V0_8_PROPNAME = "qpid.transport.v0_8";
public static final String QPID_TRANSPORT_V0_9_PROPNAME = "qpid.transport.v0_9";
public static final String QPID_TRANSPORT_V0_9_1_PROPNAME = "qpid.transport.v0_9_1";
public static final String QPID_TRANSPORT_V0_10_PROPNAME = "qpid.transport.v0_10";
public static final String QPID_BROKER_TRANSPORT_PROPNAME = "qpid.broker.transport";
// Can't reference the class directly here, as this would preclude the ability to bundle transports separately.
private static final String IO_TRANSPORT_CLASSNAME = "org.apache.qpid.transport.network.io.IoNetworkTransport";
public static final String TCP = "tcp";
private final static Map<ProtocolVersion,String> OUTGOING_PROTOCOL_TO_IMPLDEFAULTS_MAP;
static
{
final Map<ProtocolVersion,String> map = new HashMap<ProtocolVersion, String>();
map.put(ProtocolVersion.v8_0, IO_TRANSPORT_CLASSNAME);
map.put(ProtocolVersion.v0_9, IO_TRANSPORT_CLASSNAME);
map.put(ProtocolVersion.v0_91, IO_TRANSPORT_CLASSNAME);
map.put(ProtocolVersion.v0_10, IO_TRANSPORT_CLASSNAME);
OUTGOING_PROTOCOL_TO_IMPLDEFAULTS_MAP = Collections.unmodifiableMap(map);
}
public static IncomingNetworkTransport getIncomingTransportInstance()
{
return (IncomingNetworkTransport) loadTransportClass(
System.getProperty(QPID_BROKER_TRANSPORT_PROPNAME, IO_TRANSPORT_CLASSNAME));
}
public static OutgoingNetworkTransport getOutgoingTransportInstance(
final ProtocolVersion protocolVersion)
{
final String overrride = getOverrideClassNameFromSystemProperty(protocolVersion);
final String networkTransportClassName;
if (overrride != null)
{
networkTransportClassName = overrride;
}
else
{
networkTransportClassName = OUTGOING_PROTOCOL_TO_IMPLDEFAULTS_MAP.get(protocolVersion);
}
return (OutgoingNetworkTransport) loadTransportClass(networkTransportClassName);
}
private static NetworkTransport loadTransportClass(final String networkTransportClassName)
{
if (networkTransportClassName == null)
{
throw new IllegalArgumentException("transport class name must not be null");
}
try
{
final Class<?> clazz = Class.forName(networkTransportClassName);
return (NetworkTransport) clazz.newInstance();
}
catch (InstantiationException e)
{
throw new TransportException("Unable to instantiate transport class " + networkTransportClassName, e);
}
catch (IllegalAccessException e)
{
throw new TransportException("Access exception " + networkTransportClassName, e);
}
catch (ClassNotFoundException e)
{
throw new TransportException("Unable to load transport class " + networkTransportClassName, e);
}
}
private static String getOverrideClassNameFromSystemProperty(final ProtocolVersion protocolVersion)
{
final String protocolSpecificSystemProperty;
if (ProtocolVersion.v0_10.equals(protocolVersion))
{
protocolSpecificSystemProperty = QPID_TRANSPORT_V0_10_PROPNAME;
}
else if (ProtocolVersion.v0_91.equals(protocolVersion))
{
protocolSpecificSystemProperty = QPID_TRANSPORT_V0_9_1_PROPNAME;
}
else if (ProtocolVersion.v0_9.equals(protocolVersion))
{
protocolSpecificSystemProperty = QPID_TRANSPORT_V0_9_PROPNAME;
}
else if (ProtocolVersion.v8_0.equals(protocolVersion))
{
protocolSpecificSystemProperty = QPID_TRANSPORT_V0_8_PROPNAME;
}
else
{
throw new IllegalArgumentException("Unknown ProtocolVersion " + protocolVersion);
}
return System.getProperty(protocolSpecificSystemProperty, System.getProperty(QPID_TRANSPORT_PROPNAME));
}
}