You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2006/03/28 18:29:44 UTC
svn commit: r389536 - in /incubator/activemq/trunk/activemq-core/src:
main/java/org/apache/activemq/transport/tcp/
main/resources/META-INF/services/org/apache/activemq/transport/
test/java/org/apache/activemq/transport/tcp/ test/resources/
Author: jstrachan
Date: Tue Mar 28 08:29:41 2006
New Revision: 389536
URL: http://svn.apache.org/viewcvs?rev=389536&view=rev
Log:
moved the SSL transport into the main core module and switched to using our own TCP transport by default (as well as refactoring to make the [Server]SocketFactory objects pluggable
Added:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/SslTransportFactory.java (with props)
incubator/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/transport/activeiossl
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java (with props)
incubator/activemq/trunk/activemq-core/src/test/resources/client.keystore (with props)
incubator/activemq/trunk/activemq-core/src/test/resources/server.keystore (with props)
Modified:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportFactory.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportServer.java
incubator/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/transport/ssl
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/InactivityMonitorTest.java
Added: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/SslTransportFactory.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/SslTransportFactory.java?rev=389536&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/SslTransportFactory.java (added)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/SslTransportFactory.java Tue Mar 28 08:29:41 2006
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005-2006 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.activemq.transport.tcp;
+
+import javax.net.ServerSocketFactory;
+import javax.net.SocketFactory;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocketFactory;
+
+/**
+ * An implementation of the TCP Transport using SSL
+ *
+ * @version $Revision: $
+ */
+public class SslTransportFactory extends TcpTransportFactory {
+
+ public SslTransportFactory() {
+ }
+
+ protected ServerSocketFactory createServerSocketFactory() {
+ return SSLServerSocketFactory.getDefault();
+ }
+
+ protected SocketFactory createSocketFactory() {
+ return SSLSocketFactory.getDefault();
+ }
+
+}
Propchange: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/SslTransportFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java?rev=389536&r1=389535&r2=389536&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java Tue Mar 28 08:29:41 2006
@@ -38,6 +38,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.net.SocketFactory;
+
/**
* An implementation of the {@link Transport} interface using raw tcp/ip
*
@@ -76,24 +78,25 @@
* @throws IOException
* @throws UnknownHostException
*/
- public TcpTransport(WireFormat wireFormat, URI remoteLocation) throws UnknownHostException, IOException {
+ public TcpTransport(WireFormat wireFormat, SocketFactory socketFactory, URI remoteLocation) throws UnknownHostException, IOException {
this(wireFormat);
- this.socket = createSocket(remoteLocation);
+ this.socket = createSocket(socketFactory, remoteLocation);
}
/**
* Connect to a remote Node - e.g. a Broker
*
* @param wireFormat
+ * @param socketFactory
* @param remoteLocation
* @param localLocation -
* e.g. local InetAddress and local port
* @throws IOException
* @throws UnknownHostException
*/
- public TcpTransport(WireFormat wireFormat, URI remoteLocation, URI localLocation) throws UnknownHostException, IOException {
+ public TcpTransport(WireFormat wireFormat, SocketFactory socketFactory, URI remoteLocation, URI localLocation) throws UnknownHostException, IOException {
this(wireFormat);
- this.socket = createSocket(remoteLocation, localLocation);
+ this.socket = createSocket(socketFactory, remoteLocation, localLocation);
}
/**
@@ -229,10 +232,10 @@
* @throws UnknownHostException
* @throws IOException
*/
- protected Socket createSocket(URI remoteLocation) throws UnknownHostException, IOException {
+ protected Socket createSocket(SocketFactory socketFactory, URI remoteLocation) throws UnknownHostException, IOException {
String host = resolveHostName(remoteLocation.getHost());
socketAddress = new InetSocketAddress(host, remoteLocation.getPort());
- Socket sock = new Socket();
+ Socket sock = socketFactory.createSocket();
return sock;
}
@@ -246,11 +249,11 @@
* @throws IOException
* @throws UnknownHostException
*/
- protected Socket createSocket(URI remoteLocation, URI localLocation) throws IOException, UnknownHostException {
+ protected Socket createSocket(SocketFactory socketFactory, URI remoteLocation, URI localLocation) throws IOException, UnknownHostException {
String host = resolveHostName(remoteLocation.getHost());
SocketAddress sockAddress = new InetSocketAddress(host, remoteLocation.getPort());
SocketAddress localAddress = new InetSocketAddress(InetAddress.getByName(localLocation.getHost()), localLocation.getPort());
- Socket sock = new Socket();
+ Socket sock = socketFactory.createSocket();
initialiseSocket(sock);
sock.bind(localAddress);
sock.connect(sockAddress);
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportFactory.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportFactory.java?rev=389536&r1=389535&r2=389536&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportFactory.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportFactory.java Tue Mar 28 08:29:41 2006
@@ -48,7 +48,8 @@
try {
Map options = new HashMap(URISupport.parseParamters(location));
- TcpTransportServer server = new TcpTransportServer(location);
+ ServerSocketFactory serverSocketFactory = createServerSocketFactory();
+ TcpTransportServer server = new TcpTransportServer(location, serverSocketFactory);
server.setWireFormatFactory(createWireFormatFactory(options));
IntrospectionSupport.setProperties(server, options);
@@ -99,20 +100,22 @@
URI localLocation=null;
String path=location.getPath();
// see if the path is a local URI location
- if(path!=null&&path.length()>0){
- int localPortIndex=path.indexOf(':');
- try{
- Integer.parseInt(path.substring((localPortIndex+1),path.length()));
- String localString=location.getScheme()+ ":/" + path;
- localLocation=new URI(localString);
- }catch(Exception e){
- log.warn("path isn't a valid local location for TcpTransport to use",e);
+ if (path != null && path.length() > 0) {
+ int localPortIndex = path.indexOf(':');
+ try {
+ Integer.parseInt(path.substring((localPortIndex + 1), path.length()));
+ String localString = location.getScheme() + ":/" + path;
+ localLocation = new URI(localString);
+ }
+ catch (Exception e) {
+ log.warn("path isn't a valid local location for TcpTransport to use", e);
}
}
- if(localLocation!=null){
- return new TcpTransport(wf,location,localLocation);
+ SocketFactory socketFactory = createSocketFactory();
+ if (localLocation != null) {
+ return new TcpTransport(wf, socketFactory, location, localLocation);
}
- return new TcpTransport(wf,location);
+ return new TcpTransport(wf, socketFactory, location);
}
protected ServerSocketFactory createServerSocketFactory() {
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportServer.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportServer.java?rev=389536&r1=389535&r2=389536&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportServer.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportServer.java Tue Mar 28 08:29:41 2006
@@ -38,6 +38,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.net.ServerSocketFactory;
+
/**
* A TCP based implementation of {@link TransportServer}
*
@@ -54,16 +56,9 @@
private int minmumWireFormatVersion;
private boolean trace;
- /**
- * Constructor
- *
- * @param location
- * @throws IOException
- * @throws URISyntaxException
- */
- public TcpTransportServer(URI location) throws IOException, URISyntaxException {
+ public TcpTransportServer(URI location, ServerSocketFactory serverSocketFactory) throws IOException, URISyntaxException {
super(location);
- serverSocket = createServerSocket(location);
+ serverSocket = createServerSocket(location, serverSocketFactory);
serverSocket.setSoTimeout(2000);
updatePhysicalUri(location);
}
@@ -194,16 +189,16 @@
* @throws UnknownHostException
* @throws IOException
*/
- protected ServerSocket createServerSocket(URI bind) throws UnknownHostException, IOException {
+ protected ServerSocket createServerSocket(URI bind, ServerSocketFactory factory) throws UnknownHostException, IOException {
ServerSocket answer = null;
String host = bind.getHost();
host = (host == null || host.length() == 0) ? "localhost" : host;
InetAddress addr = InetAddress.getByName(host);
if (host.trim().equals("localhost") || addr.equals(InetAddress.getLocalHost())) {
- answer = new ServerSocket(bind.getPort(), backlog);
+ answer = factory.createServerSocket(bind.getPort(), backlog);
}
else {
- answer = new ServerSocket(bind.getPort(), backlog, addr);
+ answer = factory.createServerSocket(bind.getPort(), backlog, addr);
}
return answer;
}
Added: incubator/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/transport/activeiossl
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/transport/activeiossl?rev=389536&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/transport/activeiossl (added)
+++ incubator/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/transport/activeiossl Tue Mar 28 08:29:41 2006
@@ -0,0 +1 @@
+class=org.apache.activemq.transport.activeio.ActiveIOTransportFactory
Modified: incubator/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/transport/ssl
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/transport/ssl?rev=389536&r1=389535&r2=389536&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/transport/ssl (original)
+++ incubator/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/transport/ssl Tue Mar 28 08:29:41 2006
@@ -1 +1 @@
-class=org.apache.activemq.transport.activeio.ActiveIOTransportFactory
+class=org.apache.activemq.transport.tcp.SslTransportFactory
Modified: incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/InactivityMonitorTest.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/InactivityMonitorTest.java?rev=389536&r1=389535&r2=389536&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/InactivityMonitorTest.java (original)
+++ incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/InactivityMonitorTest.java Tue Mar 28 08:29:41 2006
@@ -29,6 +29,8 @@
import org.apache.activemq.transport.TransportListener;
import org.apache.activemq.transport.TransportServer;
+import javax.net.SocketFactory;
+
import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicBoolean;
import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicInteger;
@@ -146,7 +148,7 @@
//
// Manually create a client transport so that it does not send KeepAlive packets.
// this should simulate a client hang.
- clientTransport = new TcpTransport(new OpenWireFormat(), new URI("tcp://localhost:61616"));
+ clientTransport = new TcpTransport(new OpenWireFormat(), SocketFactory.getDefault(), new URI("tcp://localhost:61616"));
clientTransport.setTransportListener(new TransportListener() {
public void onCommand(Command command) {
clientReceiveCount.incrementAndGet();
Added: incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java?rev=389536&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java (added)
+++ incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java Tue Mar 28 08:29:41 2006
@@ -0,0 +1,51 @@
+/**
+ *
+ * Copyright 2005-2006 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.activemq.transport.tcp;
+
+import org.apache.activemq.transport.TransportBrokerTestSupport;
+
+import junit.framework.Test;
+import junit.textui.TestRunner;
+
+public class SslTransportBrokerTest extends TransportBrokerTestSupport {
+
+ protected String getBindLocation() {
+ return "ssl://localhost:0";
+ }
+
+ protected void setUp() throws Exception {
+ System.setProperty("javax.net.ssl.trustStore", "src/test/resources/client.keystore");
+ System.setProperty("javax.net.ssl.trustStorePassword", "password");
+ System.setProperty("javax.net.ssl.trustStoreType", "jks");
+ System.setProperty("javax.net.ssl.keyStore", "src/test/resources/server.keystore");
+ System.setProperty("javax.net.ssl.keyStorePassword", "password");
+ System.setProperty("javax.net.ssl.keyStoreType", "jks");
+ //System.setProperty("javax.net.debug", "ssl,handshake,data,trustmanager");
+
+ MAX_WAIT = 2000;
+ super.setUp();
+ }
+
+ public static Test suite() {
+ return suite(SslTransportBrokerTest.class);
+ }
+
+ public static void main(String[] args) {
+ TestRunner.run(suite());
+ }
+
+}
Propchange: incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/tcp/SslTransportBrokerTest.java
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/activemq/trunk/activemq-core/src/test/resources/client.keystore
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/test/resources/client.keystore?rev=389536&view=auto
==============================================================================
Binary file - no diff available.
Propchange: incubator/activemq/trunk/activemq-core/src/test/resources/client.keystore
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/activemq/trunk/activemq-core/src/test/resources/client.keystore
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: incubator/activemq/trunk/activemq-core/src/test/resources/server.keystore
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/test/resources/server.keystore?rev=389536&view=auto
==============================================================================
Binary file - no diff available.
Propchange: incubator/activemq/trunk/activemq-core/src/test/resources/server.keystore
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/activemq/trunk/activemq-core/src/test/resources/server.keystore
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream