Author: dblevins
Date: Wed May 19 01:28:59 2010
New Revision: 945989
URL: http://svn.apache.org/viewvc?rev=945989&view=rev
Log:
OPENEJB-1281: Preconfigured failover with JNDI provider url such as
"failover:ejbd://foo:4201,ejbd://bar:4201"
Added:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/FailoverConnectionFactory.java
(with props)
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java
(contents, props changed)
- copied, changed from r943838,
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClusterMetaData.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RandomConnectionStrategy.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RoundRobinConnectionStrategy.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/StickyConnectionStrategy.java
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClusterMetaData.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClusterMetaData.java?rev=945989&r1=945988&r2=945989&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClusterMetaData.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClusterMetaData.java
Wed May 19 01:28:59 2010
@@ -56,6 +56,10 @@ public class ClusterMetaData implements
return version;
}
+ public void setConnectionStrategy(String connectionStrategy) {
+ this.connectionStrategy = connectionStrategy;
+ }
+
public String getConnectionStrategy() {
return connectionStrategy;
}
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java?rev=945989&r1=945988&r2=945989&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
Wed May 19 01:28:59 2010
@@ -37,6 +37,7 @@ public class ConnectionManager {
factories.register("https", httpFactory);
factories.register("multicast", new MulticastConnectionFactory());
+ factories.register("failover", new FailoverConnectionFactory());
strategies.register("sticky", new StickyConnectionStrategy());
strategies.register("random", new RandomConnectionStrategy());
Added:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/FailoverConnectionFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/FailoverConnectionFactory.java?rev=945989&view=auto
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/FailoverConnectionFactory.java
(added)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/FailoverConnectionFactory.java
Wed May 19 01:28:59 2010
@@ -0,0 +1,92 @@
+/**
+ * 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.openejb.client;
+
+import java.net.URI;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This factory supports the following URI format
+ *
+ * failover:[strategy:]urlList
+ *
+ * Where strategy and urlList are variables
+ *
+ * strategy = the ConnectionStrategy name, such as "sticky", "round-robin",
+ * or "random". This parameter is optional.
+ *
+ * urlList = a comma separated list connection URIs. There must be a
+ * ConnectionFactory installed for the associated URI.
+ *
+ * Some examples might be:
+ *
+ * - failover:ejbd://foo:4201,ejbd://bar:4201
+ * - failover:random:ejbd://foo:4201,ejbd://bar:4201
+ * -
failover:round-robin:ejbd://foo:4201,ejbds://bar:4201,multicast://239.255.2.3:6142
+ *
+ * The final URI being the most clever in that it will sequentially go
+ * through the list, first attempting a couple hard-coded addresses before
+ * finally resorting to multicast in an attempt to discover a server.
+ *
+ * @version $Rev$ $Date$
+ */
+public class FailoverConnectionFactory implements ConnectionFactory {
+
+ public Connection getConnection(URI failoverUri) throws IOException {
+
+ // URI can be in the following formats:
+ //
+ // failover:ejbd://foo:4201,ejbd://bar:4202
+ // failover:sticky:ejbd://foo:4201,ejbd://bar:4202
+
+ // trim off the "failover:"
+ String remainder = failoverUri.getSchemeSpecificPart();
+
+ URI uri = URI.create(remainder);
+
+ String strategy = uri.getScheme();
+ String servers = uri.getSchemeSpecificPart();
+
+ if (servers.startsWith("//")) {
+ strategy = "default";
+ servers = remainder;
+ }
+
+ List<URI> list = new ArrayList<URI>();
+
+ for (String server : servers.split(",")) {
+ list.add(URI.create(server));
+ }
+
+ URI[] uris = list.toArray(new URI[0]);
+
+ ClusterMetaData data = new ClusterMetaData(0, uris);
+ data.setConnectionStrategy(strategy);
+
+ return ConnectionManager.getConnection(data, new ServerMetaData(),
null);
+ }
+
+
+ public static void main(String[] args) throws IOException {
+ FailoverConnectionFactory factory = new FailoverConnectionFactory();
+
+ URI uri = URI.create("failover:ejbd://foo:4201,ejbd://bar:4202");
+ Connection connection = factory.getConnection(uri);
+ }
+}
Propchange:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/FailoverConnectionFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RandomConnectionStrategy.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RandomConnectionStrategy.java?rev=945989&r1=945988&r2=945989&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RandomConnectionStrategy.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RandomConnectionStrategy.java
Wed May 19 01:28:59 2010
@@ -66,7 +66,7 @@ public class RandomConnectionStrategy im
}
}
- if (available.size() == 0 && !failed.contains(server.getLocation())){
+ if (available.size() == 0 && server.getLocation() != null &&
!failed.contains(server.getLocation())){
return connect(cluster, server.getLocation());
}
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RoundRobinConnectionStrategy.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RoundRobinConnectionStrategy.java?rev=945989&r1=945988&r2=945989&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RoundRobinConnectionStrategy.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RoundRobinConnectionStrategy.java
Wed May 19 01:28:59 2010
@@ -76,7 +76,7 @@ public class RoundRobinConnectionStrateg
remaining.removeAll(failed);
- if (remaining.size() == 0 && !failed.contains(server.getLocation())){
+ if (remaining.size() == 0 && server.getLocation() != null &&
!failed.contains(server.getLocation())){
return connect(cluster, server.getLocation());
}
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/StickyConnectionStrategy.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/StickyConnectionStrategy.java?rev=945989&r1=945988&r2=945989&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/StickyConnectionStrategy.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/StickyConnectionStrategy.java
Wed May 19 01:28:59 2010
@@ -67,7 +67,7 @@ public class StickyConnectionStrategy im
remaining.removeAll(failed);
- if (remaining.size() == 0 && !failed.contains(server.getLocation())){
+ if (remaining.size() == 0 && server.getLocation() != null &&
!failed.contains(server.getLocation())){
return connect(cluster, server.getLocation());
}
Copied:
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java
(from r943838,
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java?p2=openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java&p1=openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java&r1=943838&r2=945989&rev=945989&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java
(original)
+++
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java
Wed May 19 01:28:59 2010
@@ -46,7 +46,7 @@ import java.util.concurrent.atomic.Atomi
/**
* @version $Rev$ $Date$
*/
-public class DynamicConnectionStrategyTest extends TestCase {
+public class FailoverConnectionFactoryTest extends TestCase {
public void test() throws Exception {
@@ -80,7 +80,7 @@ public class DynamicConnectionStrategyTe
Properties props = new Properties();
props.put("java.naming.factory.initial",
"org.apache.openejb.client.RemoteInitialContextFactory");
- props.put("java.naming.provider.url", "ejbd://127.0.0.1:" + port);
+ props.put("java.naming.provider.url",
"failover:sticky:ejbd://agwdt:9999,ejbd://127.0.0.1:" + port);
Context context = new InitialContext(props);
Widget remote = (Widget) context.lookup("WidgetBeanRemote");
Propchange:
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native