Author: bdekruijff at gmail.com
Date: Fri Dec 31 17:15:19 2010
New Revision: 554
Log:
[sandbox] updated to match fabric refactor
Added:
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/shell/FabricManagerCommand.java
Modified:
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/internal/RemotableServiceImpl.java
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/osgi/Activator.java
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/service/FabricTestServiceImpl.java
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/shell/FabricTestCommand.java
Modified:
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/internal/RemotableServiceImpl.java
==============================================================================
---
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/internal/RemotableServiceImpl.java
(original)
+++
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/internal/RemotableServiceImpl.java
Fri Dec 31 17:15:19 2010
@@ -21,6 +21,9 @@
public class RemotableServiceImpl implements RemotableService,
NonRemotableService {
+ public void start() {
+ }
+
public String hello(String name) {
System.err.println("Saying hi to " + name);
return "Hi " + name;
Modified:
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/osgi/Activator.java
==============================================================================
---
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/osgi/Activator.java
(original)
+++
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/osgi/Activator.java
Fri Dec 31 17:15:19 2010
@@ -17,9 +17,11 @@
*/
package org.amdatu.core.fabrictest.osgi;
+import org.amdatu.core.fabric.FabricManagerService;
import org.amdatu.core.fabrictest.FabricTestService;
import org.amdatu.core.fabrictest.RemotableService;
import org.amdatu.core.fabrictest.service.FabricTestServiceImpl;
+import org.amdatu.core.fabrictest.shell.FabricManagerCommand;
import org.amdatu.core.fabrictest.shell.FabricTestCommand;
import org.apache.felix.dm.DependencyActivatorBase;
import org.apache.felix.dm.DependencyManager;
@@ -36,10 +38,21 @@
createComponent()
.setImplementation(new FabricTestServiceImpl())
.setInterface(FabricTestService.class.getName(), null)
+
.add(createServiceDependency().setService(FabricManagerService.class).setRequired(false))
.add(createServiceDependency().setService(LogService.class).setRequired(false)));
manager.add(
createComponent()
+ .setImplementation(new FabricManagerCommand())
+ .setInterface(Command.class.getName(), null)
+ .add(
+
createServiceDependency().setService(FabricManagerService.class).setRequired(false))
+ .add(
+
createServiceDependency().setService(LogService.class).setRequired(false)
+ ));
+
+ manager.add(
+ createComponent()
.setImplementation(new FabricTestCommand())
.setInterface(Command.class.getName(), null)
.add(
Modified:
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/service/FabricTestServiceImpl.java
==============================================================================
---
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/service/FabricTestServiceImpl.java
(original)
+++
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/service/FabricTestServiceImpl.java
Fri Dec 31 17:15:19 2010
@@ -32,6 +32,7 @@
public class FabricTestServiceImpl implements FabricTestService {
private final Map<String, Component> m_serviceComponents = new
HashMap<String, Component>();
+
private volatile DependencyManager m_dependencyManager;
public void stop() {
@@ -57,7 +58,10 @@
.createComponent()
.setInterface(new String[] { RemotableService.class.getName(),
NonRemotableService.class.getName() },
props).setImplementation(new RemotableServiceImpl());
-
+
+ serviceComponent =
serviceComponent.add(m_dependencyManager.createServiceDependency()
+ .setService(DistributionService.class).setRequired(true));
+
m_dependencyManager.add(serviceComponent);
m_serviceComponents.put("c1", serviceComponent);
}
Added:
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/shell/FabricManagerCommand.java
==============================================================================
--- (empty file)
+++
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/shell/FabricManagerCommand.java
Fri Dec 31 17:15:19 2010
@@ -0,0 +1,342 @@
+/*
+ Copyright (C) 2010 Amdatu.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.amdatu.core.fabrictest.shell;
+
+import java.io.PrintStream;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+
+import org.amdatu.core.fabric.FabricManagerService;
+import org.amdatu.core.fabric.cluster.ClusterMemberService;
+import
org.amdatu.core.fabric.cluster.service.tribes.TribesClusterMemberServiceImpl;
+import org.apache.felix.shell.Command;
+
+public final class FabricManagerCommand implements Command {
+
+ private volatile FabricManagerService m_fabricManagerService;
+
+ public String getName() {
+ return "fman";
+ }
+
+ public String getShortDescription() {
+ return "Fabric Manager command";
+ }
+
+ public String getUsage() {
+ return "Usage: fman <create|remove>
<cluster|servicegroup|discovery|distribution|fabric> [...]\n";
+ }
+
+ public void execute(String s, PrintStream out, PrintStream err) {
+
+ if (m_fabricManagerService == null) {
+ out.println("FabricManagerService unavailable");
+ return;
+ }
+
+ StringTokenizer st = new StringTokenizer(s, " ");
+ st.nextToken(); // ignore command itself
+ if (st.countTokens() == 0) {
+ out.print(getUsage());
+ return;
+ }
+
+ String command = st.nextToken();
+ if (command.equals("create")) {
+ executeCreateCommand(rejoinRemainingTokens(st), out, err);
+ return;
+ }
+ if (command.equals("remove")) {
+ executeRemoveCommand(rejoinRemainingTokens(st), out, err);
+ return;
+ }
+ out.print(getUsage());
+ }
+
+ private void executeCreateCommand(String s, PrintStream out, PrintStream
err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() < 1) {
+ out.print("fman create <cluster|discovery|distribution> [...]\n");
+ return;
+ }
+
+ String command = st.nextToken();
+ if (command.equals("cluster")) {
+ executeClusterMemberCreateCommand(rejoinRemainingTokens(st), out,
err);
+ return;
+ }
+ if (command.equals("discovery")) {
+ executeDiscoveryCreateCommand(rejoinRemainingTokens(st), out, err);
+ return;
+ }
+ if (command.equals("distribution")) {
+ executeDistributionCreateCommand(rejoinRemainingTokens(st), out,
err);
+ return;
+ }
+ if (command.equals("fabric")) {
+ executeFabricCreateCommand(rejoinRemainingTokens(st), out, err);
+ return;
+ }
+ if (command.equals("servicegroup")) {
+ executeServiceGroupCreateCommand(rejoinRemainingTokens(st), out,
err);
+ return;
+ }
+ out.print("fman create <cluster|discovery|distribution> [...]\n");
+ return;
+ }
+
+ private void executeRemoveCommand(String s, PrintStream out, PrintStream
err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() < 2) {
+ out.print("fman remove <cluster|discovery|distribution>
<fabricId>\n");
+ return;
+ }
+
+ String command = st.nextToken();
+ if (command.equals("cluster")) {
+ executeClusterMemberRemoveCommand(rejoinRemainingTokens(st), out,
err);
+ return;
+ }
+ if (command.equals("discovery")) {
+ executeDiscoveryRemoveCommand(rejoinRemainingTokens(st), out, err);
+ return;
+ }
+ if (command.equals("distribution")) {
+ executeDistributionRemoveCommand(rejoinRemainingTokens(st), out,
err);
+ return;
+ }
+ if (command.equals("fabric")) {
+ executeFabricRemoveCommand(rejoinRemainingTokens(st), out, err);
+ return;
+ }
+ if (command.equals("servicegroup")) {
+ executeServiceGroupRemoveCommand(rejoinRemainingTokens(st), out,
err);
+ return;
+ }
+ out.print("fman remove <cluster|discovery|distribution>\n");
+ return;
+ }
+
+ private void executeClusterMemberCreateCommand(String s, PrintStream out,
PrintStream err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() < 1) {
+ out.print("fman create cluster <clusterGroup> <clusterMember>
[options]\n");
+ return;
+ }
+ String clusterGroupId = st.nextToken();
+ String clusterMemberId = st.nextToken();
+
+ int argc = st.countTokens();
+ String[] args = new String[argc];
+ int index = 0;
+ while (st.hasMoreTokens()) {
+ args[index++] = st.nextToken();
+ }
+
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ props.put(ClusterMemberService.CLUSTER_CLUSTERGROUP_PROP,
clusterGroupId);
+ props.put(ClusterMemberService.CLUSTER_CLUSTERMEMBER_PROP,
clusterMemberId);
+ props.put(TribesClusterMemberServiceImpl.CLUSTER_TRIBES_ARGS_PROP,
args);
+ if (m_fabricManagerService.createClusterMember(clusterGroupId,
clusterMemberId, props)) {
+ out.println("New cluster created: " + clusterGroupId + "/" +
clusterMemberId);
+ return;
+ }
+ out.println("Failed to create cluster: " + clusterGroupId + "/" +
clusterMemberId);
+ }
+
+ private void executeClusterMemberRemoveCommand(String s, PrintStream out,
PrintStream err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() != 1) {
+ out.print("fman remove cluster <clusterGroup> <clusterMember>\n");
+ }
+ String clusterGroupId = st.nextToken();
+ String clusterMemberId = st.nextToken();
+
+ if (m_fabricManagerService.removeClusterMember(clusterGroupId,
clusterMemberId)) {
+ out.println("Cluster removed: " + clusterGroupId + "/" +
clusterMemberId);
+ return;
+ }
+ out.println("Failed to remove cluster: " + clusterGroupId + "/" +
clusterMemberId);
+
+ }
+
+ private void executeFabricCreateCommand(String s, PrintStream out,
PrintStream err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() < 3) {
+ out.print("fman create fabric <clusterGroup> <clusterMember>
<serviceGroup> [options]\n");
+ return;
+ }
+ String clusterGroupId = st.nextToken();
+ String clusterMemberId = st.nextToken();
+ String serviceGroupId = st.nextToken();
+
+ int argc = st.countTokens();
+ String[] args = new String[argc];
+ int index = 0;
+ while (st.hasMoreTokens()) {
+ args[index++] = st.nextToken();
+ }
+
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ props.put(ClusterMemberService.CLUSTER_CLUSTERGROUP_PROP,
clusterGroupId);
+ props.put(ClusterMemberService.CLUSTER_CLUSTERMEMBER_PROP,
clusterMemberId);
+ props.put(TribesClusterMemberServiceImpl.CLUSTER_TRIBES_ARGS_PROP,
args);
+ if (m_fabricManagerService.createClusterMember(clusterGroupId,
clusterMemberId, props)
+ &&
m_fabricManagerService.createDistribution(clusterGroupId, serviceGroupId)
+ &&
m_fabricManagerService.createDiscovery(clusterGroupId, serviceGroupId)) {
+ out.println("New fabric created: " + clusterGroupId + "/" +
clusterMemberId + "/" + serviceGroupId);
+ return;
+ }
+ m_fabricManagerService.removeDiscovery(clusterGroupId, serviceGroupId);
+ m_fabricManagerService.removeDistribution(clusterGroupId,
serviceGroupId);
+ m_fabricManagerService.removeClusterMember(clusterGroupId,
clusterMemberId);
+ out.println("Failed to create fabric: " + clusterGroupId + "/" +
clusterMemberId + "/" + serviceGroupId);
+ }
+
+ private void executeFabricRemoveCommand(String s, PrintStream out,
PrintStream err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() != 3) {
+ out.print("fman remove fabric <clusterGroup> <clusterMember>
<serviceGroup>\n");
+ return;
+ }
+ String clusterGroupId = st.nextToken();
+ String clusterMemberId = st.nextToken();
+ String serviceGroupId = st.nextToken();
+
+ if (m_fabricManagerService.removeDiscovery(clusterGroupId,
serviceGroupId)
+ &&
m_fabricManagerService.removeDistribution(clusterGroupId, serviceGroupId)
+ &&
m_fabricManagerService.removeClusterMember(clusterGroupId, clusterMemberId)) {
+ out.println("Fabric removed: " + clusterGroupId + "/" +
clusterMemberId + "/" + serviceGroupId);
+ return;
+ }
+ m_fabricManagerService.removeDiscovery(clusterGroupId, serviceGroupId);
+ m_fabricManagerService.removeDistribution(clusterGroupId,
serviceGroupId);
+ m_fabricManagerService.removeClusterMember(clusterGroupId,
clusterMemberId);
+ }
+
+ private void executeServiceGroupCreateCommand(String s, PrintStream out,
PrintStream err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() != 2) {
+ out.print("fman create servicegroup <clusterGroup>
<serviceGroup>\n");
+ return;
+ }
+ String clusterGroupId = st.nextToken();
+ String serviceGroupId = st.nextToken();
+
+ if (m_fabricManagerService.createDistribution(clusterGroupId,
serviceGroupId)
+ &&
m_fabricManagerService.createDiscovery(clusterGroupId, serviceGroupId)) {
+ out.println("Servicegroup created: " + clusterGroupId + "/" +
serviceGroupId);
+ return;
+ }
+ m_fabricManagerService.removeDiscovery(clusterGroupId, serviceGroupId);
+ m_fabricManagerService.removeDistribution(clusterGroupId,
serviceGroupId);
+ out.println("Failed to create servicegroup: " + clusterGroupId + "/" +
serviceGroupId);
+ }
+
+ private void executeServiceGroupRemoveCommand(String s, PrintStream out,
PrintStream err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() != 2) {
+ out.print("fman remove servicegroup <clusterGroup>
<serviceGroup>\n");
+ return;
+ }
+ String clusterGroupId = st.nextToken();
+ String serviceGroupId = st.nextToken();
+
+ if (m_fabricManagerService.removeDiscovery(clusterGroupId,
serviceGroupId)
+ &&
m_fabricManagerService.removeDistribution(clusterGroupId, serviceGroupId)) {
+ out.println("Servicegroup removed: " + clusterGroupId + "/" +
serviceGroupId);
+ return;
+ }
+ m_fabricManagerService.removeDiscovery(clusterGroupId, serviceGroupId);
+ m_fabricManagerService.removeDistribution(clusterGroupId,
serviceGroupId);
+ }
+
+ private void executeDiscoveryCreateCommand(String s, PrintStream out,
PrintStream err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() != 2) {
+ out.print("fman create discovery <clusterGroup> <serviceGroup>");
+ return;
+ }
+ String clusterGroupId = st.nextToken();
+ String serviceGroupId = st.nextToken();
+
+ if (m_fabricManagerService.createDiscovery(clusterGroupId,
serviceGroupId)) {
+ out.println("New discovery created: " + clusterGroupId + "/" +
serviceGroupId);
+ return;
+ }
+ out.println("Failed to create discovery: " + clusterGroupId + "/" +
serviceGroupId);
+ }
+
+ private void executeDiscoveryRemoveCommand(String s, PrintStream out,
PrintStream err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() != 3) {
+ out.print("fman remove discovery <clusterGroup> <serviceGroup>");
+ }
+ String clusterGroupId = st.nextToken();
+ String serviceGroupId = st.nextToken();
+
+ if (m_fabricManagerService.removeDiscovery(clusterGroupId,
serviceGroupId)) {
+ out.println("Discovery removed: " + clusterGroupId + "/" +
serviceGroupId);
+ return;
+ }
+ out.println("Failed to remove discovery: " + clusterGroupId + "/" +
serviceGroupId);
+
+ }
+
+ private void executeDistributionCreateCommand(String s, PrintStream out,
PrintStream err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() != 3) {
+ out.print("fman create distribution <clusterGroup>
<serviceGroup>");
+ return;
+ }
+ String clusterGroupId = st.nextToken();
+ String serviceGroupId = st.nextToken();
+
+ if (m_fabricManagerService.createDistribution(clusterGroupId,
serviceGroupId)) {
+ out.println("New distribution created: " + clusterGroupId + "/" +
serviceGroupId);
+ return;
+ }
+ out.println("Failed to create distribution: " + clusterGroupId + "/" +
serviceGroupId);
+ }
+
+ private void executeDistributionRemoveCommand(String s, PrintStream out,
PrintStream err) {
+ StringTokenizer st = new StringTokenizer(s, " ");
+ if (st.countTokens() != 3) {
+ out.print("fman remove distribution <clusterGroup>
<serviceGroup>");
+ }
+ String clusterGroupId = st.nextToken();
+ String serviceGroupId = st.nextToken();
+
+ if (m_fabricManagerService.removeDiscovery(clusterGroupId,
serviceGroupId)) {
+ out.println("Distribution removed: " + clusterGroupId + "/" +
serviceGroupId);
+ return;
+ }
+ out.println("Failed to remove distribution: " + clusterGroupId + "/" +
serviceGroupId);
+ }
+
+ private static String rejoinRemainingTokens(StringTokenizer st) {
+ StringBuilder sb = new StringBuilder();
+ while (st.hasMoreTokens()) {
+ sb.append(st.nextToken());
+ if (st.hasMoreTokens()) {
+ sb.append(" ");
+ }
+ }
+ return sb.toString();
+ }
+}
Modified:
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/shell/FabricTestCommand.java
==============================================================================
---
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/shell/FabricTestCommand.java
(original)
+++
sandbox/bdekruijff/fabrictest/src/main/java/org/amdatu/core/fabrictest/shell/FabricTestCommand.java
Fri Dec 31 17:15:19 2010
@@ -22,10 +22,8 @@
import java.util.Random;
import java.util.StringTokenizer;
import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.amdatu.core.fabrictest.FabricTestService;
@@ -77,8 +75,6 @@
public void execute(String s, PrintStream out, PrintStream err) {
- String serviceName = FabricTestService.class.getName();
-
StringTokenizer st = new StringTokenizer(s, " ");
st.nextToken(); // ignore command itself
@@ -104,14 +100,13 @@
Random r = new Random();
String[] names = new String[] { "Bram", "Ivo", "Mark", "Marcel",
"Angelo", "Martijn", "Hans" };
- for (int i = 0; i < 1000; i++) {
+ for (int i = 0; i < 100; i++) {
for (String name : names) {
m_remotableServicesLock.readLock().lock();
try {
if (m_remotableServices.size() > 0) {
int q = r.nextInt(m_remotableServices.size());
- String anwser =
m_remotableServices.get(q).hello(name);
- out.println("got: " + anwser);
+ m_remotableServices.get(q).hello(name);
}
}
finally {
@@ -131,7 +126,7 @@
String[] names = new String[] { "Bram", "Ivo", "Mark", "Marcel",
"Angelo", "Martijn", "Hans" };
m_remotableServicesLock.readLock().lock();
try {
- for (int i = 0; i < 1000; i++) {
+ for (int i = 0; i < 100; i++) {
for (String name : names) {
if (m_remotableServices.size() > 0) {
int q = r.nextInt(m_remotableServices.size());
@@ -147,19 +142,10 @@
ExecutorService exe = Executors.newFixedThreadPool(4);
long startTime = System.currentTimeMillis();
try {
- List<Future<String>> helloFutures =
exe.invokeAll(helloCallables);
+ exe.invokeAll(helloCallables);
exe.shutdown();
-
- for (Future<String> helloFuture : helloFutures) {
- out.println("got: " + helloFuture.get());
- }
}
catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- catch (ExecutionException e) {
- // TODO Auto-generated catch block
e.printStackTrace();
}
out.println("Benchmark 2: " + (System.currentTimeMillis() -
startTime) + " ms");