[jboss-svn-commits] JBL Code SVN: r31965 - in labs/jbossrules/branches/salaboy_ServiceAPIs: drools-services and 19 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Mar 5 15:20:33 EST 2010


Author: salaboy21
Date: 2010-03-05 15:20:31 -0500 (Fri, 05 Mar 2010)
New Revision: 31965

Added:
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/pom.xml
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/LookupCommand.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterCommand.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterRemoteWorkItemHandlerCommand.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/ServiceManagerServerContext.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/StartProcessRemoteCommand.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/GridConnection.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/LocalNodeConnection.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/Node.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/NodeConnection.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/RemoteNodeConnection.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/BlockingGenericIoWriter.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ClientGenericMessageReceiver.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/CollectionClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericConnector.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericIoWriter.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandlerImpl.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/Message.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/MessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ServiceManagerData.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/command/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/command/ServiceManagerClientConnectCommand.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBaseProviderLocalClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBuilderProviderLocalClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/ClientGenericMessageReceiverImpl.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaAcceptor.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaConnector.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoWriter.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseProviderRemoteClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseRemoteClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderProviderRemoteClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderRemoteClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/ProcessInstanceRemoteClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBaseResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBlockingResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/BlockingMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/resources/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/LocalNodeServiceTest.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/NodeServiceLocatorBaseTest.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/RemoteNodeServiceTest.java
Log:
drools-services initial commit, need to fix a problem with Junit


Property changes on: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services
___________________________________________________________________
Name: svn:ignore
   + target


Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/pom.xml	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>drools</artifactId>
+        <groupId>org.drools</groupId>
+        <version>5.1.0.SNAPSHOT</version>
+    </parent>
+    <groupId>org.drools</groupId>
+    <artifactId>drools-services</artifactId>
+    <version>5.1.0.SNAPSHOT</version>
+    <name>drools-services</name>
+    <url>http://maven.apache.org</url>
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.6</version>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- Drools Runtime -->
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-api</artifactId>
+            
+            <type>jar</type>
+        </dependency>
+
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-core</artifactId>
+            
+        </dependency>
+
+        <!-- Apache Mina for default Service Remote Implementation -->
+        <dependency>
+            <groupId>org.apache.mina</groupId>
+            <artifactId>mina-core</artifactId>
+            <version>2.0.0-M6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-process-task</artifactId>
+            
+            <type>jar</type>
+        </dependency>
+    </dependencies>
+</project>

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,29 @@
+package org.drools.command.vsm;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.vsm.remote.WorkItemManagerRemoteClient;
+
+/**
+ * 
+ * @author Lucas Amador
+ *
+ */
+public class GetWorkItemManagerCommand implements GenericCommand<WorkItemManager> {
+	
+	private static final long serialVersionUID = 1L;
+
+	public WorkItemManager execute(Context context) {
+        WorkItemManager workItemManager = ((KnowledgeCommandContext) context).getWorkItemManager();
+        ((ExecutionResultImpl)((KnowledgeCommandContext) context ).getExecutionResults()).getResults().put("workItemManager", getRemoteClient(workItemManager) );
+        return workItemManager;
+	}
+	
+	private WorkItemManager getRemoteClient(WorkItemManager workItemManager) {
+        return new WorkItemManagerRemoteClient();
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/LookupCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/LookupCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/LookupCommand.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,39 @@
+package org.drools.command.vsm;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.vsm.ServiceManagerData;
+
+public class LookupCommand
+    implements
+    GenericCommand<String> {
+
+    private String identifier;
+
+    private String outIdentifier;
+
+    public LookupCommand(String identfier) {
+        this.identifier = identfier;
+    }
+
+    public LookupCommand(String identfier,
+                         String outIdentifier) {
+        this.identifier = identfier;
+        this.outIdentifier = outIdentifier;
+    }
+
+    public String execute(Context context) {
+        ServiceManagerData data = (ServiceManagerData) context.get( ServiceManagerData.SERVICE_MANAGER_DATA );
+
+        String instanceId = (String) data.getRoot().get( identifier );
+
+        if ( this.outIdentifier != null ) {
+            ((ExecutionResultImpl) ((KnowledgeCommandContext) context).getExecutionResults()).getResults().put( this.outIdentifier,
+                                                                                                                instanceId );
+        }
+        return instanceId;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterCommand.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,32 @@
+package org.drools.command.vsm;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.vsm.ServiceManagerData;
+
+public class RegisterCommand
+    implements
+    GenericCommand<Void> {
+
+    private String identifier;
+    private String instanceId;
+    private int    type;
+
+    public RegisterCommand(String identifier,
+                           String instanceId,
+                           int type) {
+        this.identifier = identifier;
+        this.instanceId = instanceId;
+        this.type = type;
+    }
+
+    public Void execute(Context context) {
+        ServiceManagerData data = (ServiceManagerData) context.get( ServiceManagerData.SERVICE_MANAGER_DATA );
+
+        data.getRoot().set( identifier,
+                            type + ":" + instanceId );
+
+        return null;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterRemoteWorkItemHandlerCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterRemoteWorkItemHandlerCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterRemoteWorkItemHandlerCommand.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,75 @@
+package org.drools.command.vsm;
+
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.WorkItemHandler;
+
+public class RegisterRemoteWorkItemHandlerCommand implements GenericCommand<Object> {
+	
+	private String handler;
+	private String workItemName;
+
+        public RegisterRemoteWorkItemHandlerCommand() {
+        }
+
+        public RegisterRemoteWorkItemHandlerCommand(String workItemName, String handler) {
+            this.handler = handler;
+            this.workItemName = workItemName;
+        }
+        
+	public String getHandler() {
+		return handler;
+	}
+
+	public void setHandler(String handler) {
+		this.handler = handler;
+	}
+
+	public String getWorkItemName() {
+		return workItemName;
+	}
+
+	public void setWorkItemName(String workItemName) {
+		this.workItemName = workItemName;
+	}
+
+    public Object execute(Context context) {
+        StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession(); 
+        WorkItemHandler workItemHandler = null;
+        try {
+             Class t = Class.forName(handler);
+             Constructor c = t.getConstructor(KnowledgeRuntime.class);
+             workItemHandler =  (WorkItemHandler) c.newInstance(ksession);
+        } catch (InstantiationException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IllegalAccessException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IllegalArgumentException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (InvocationTargetException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (NoSuchMethodException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (SecurityException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (ClassNotFoundException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        ksession.getWorkItemManager().registerWorkItemHandler(workItemName, workItemHandler);
+		return null;
+	}
+
+	public String toString() {
+		return "session.getWorkItemManager().registerWorkItemHandler("
+			+ workItemName + ", " + handler +  ");";
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/ServiceManagerServerContext.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/ServiceManagerServerContext.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/ServiceManagerServerContext.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,40 @@
+package org.drools.command.vsm;
+
+import org.drools.command.Context;
+import org.drools.command.ContextManager;
+import org.drools.vsm.ServiceManagerData;
+
+public class ServiceManagerServerContext
+    implements
+    Context {
+    private Context            context;
+    private ServiceManagerData data;
+
+    public ServiceManagerServerContext(Context context,
+                                       ServiceManagerData data) {
+        this.data = data;
+    }
+
+    public ServiceManagerData getServiceManagerData() {
+        return this.data;
+    }
+
+    public ContextManager getContextManager() {
+        return context.getContextManager();
+    }
+
+    public String getName() {
+        return context.getName();
+    }
+
+    public Object get(String identifier) {
+        return context.get( identifier );
+    }
+
+    public void set(String identifier,
+                    Object value) {
+        context.set( identifier,
+                     value );
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/StartProcessRemoteCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/StartProcessRemoteCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/StartProcessRemoteCommand.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,108 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.drools.command.vsm;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.vsm.remote.ProcessInstanceRemoteClient;
+
+/**
+ *
+ * @author salaboy
+ */
+public class StartProcessRemoteCommand implements GenericCommand<ExecutionResults>{
+    private String processId;
+    private Map<String, Object> parameters = new HashMap<String, Object>();
+    private List<Object> data = null;
+
+    public StartProcessRemoteCommand() {
+    }
+
+
+    public StartProcessRemoteCommand(String processId) {
+        this.processId = processId;
+    }
+
+    public List<Object> getData() {
+        return data;
+    }
+
+    public void setData(List<Object> data) {
+        this.data = data;
+    }
+
+    public Map<String, Object> getParameters() {
+        return parameters;
+    }
+
+    public void setParameters(Map<String, Object> parameters) {
+        this.parameters = parameters;
+    }
+
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+
+    public ExecutionResults execute(Context context) {
+        StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
+
+		if (data != null) {
+			for (Object o: data) {
+				ksession.insert(o);
+			}
+		}
+		ProcessInstance processInstance = (ProcessInstance) ksession.startProcess(processId, parameters);
+
+                ((ExecutionResultImpl)((KnowledgeCommandContext) context ).getExecutionResults()).getResults().put( processId, getRemoteClient(processInstance) );
+
+		return ((ExecutionResultImpl)((KnowledgeCommandContext) context ).getExecutionResults());
+	}
+
+	public String toString() {
+		String result = "session.startProcess(" + processId + ", [";
+		if (parameters != null) {
+			int i = 0;
+			for (Map.Entry<String, Object> entry: parameters.entrySet()) {
+				if (i++ > 0) {
+					result += ", ";
+				}
+				result += entry.getKey() + "=" + entry.getValue();
+			}
+		}
+		result += "]);";
+		return result;
+	}
+
+    private ProcessInstance getRemoteClient(ProcessInstance processInstance) {
+        return new ProcessInstanceRemoteClient(processInstance.getId(), processInstance.getProcessId(),
+                 processInstance.getProcessName(), processInstance.getState());
+    }
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/GridConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/GridConnection.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/GridConnection.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,58 @@
+/*
+ *  Copyright 2010 salaboy.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.drools.services;
+
+import java.util.List;
+
+/**
+ *
+ * @author salaboy
+ */
+public class GridConnection {
+    private List<Node> nodes;
+    private String url;
+
+    public GridConnection() {
+    }
+
+    public GridConnection(String url) {
+        this.url = url;
+    }
+
+    public List<Node> connect(){
+        return this.nodes;
+    }
+
+    public List<Node> getNodes() {
+        return nodes;
+    }
+
+    public void setNodes(List<Node> nodes) {
+        this.nodes = nodes;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/LocalNodeConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/LocalNodeConnection.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/LocalNodeConnection.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,49 @@
+/*
+ *  Copyright 2010 salaboy.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.drools.services;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.vsm.local.KnowledgeBaseProviderLocalClient;
+import org.drools.vsm.local.KnowledgeBuilderProviderLocalClient;
+/**
+ *
+ * @author salaboy
+ */
+public class LocalNodeConnection implements NodeConnection {
+
+    
+
+    public LocalNodeConnection() {
+    }
+
+
+    public Node connect() {
+        Node node = new Node();
+        node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderLocalClient() );
+        node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderLocalClient() );
+
+        return node;
+    }
+
+    public void disconnect() {
+        
+    }
+
+    
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/Node.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/Node.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/Node.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,56 @@
+/*
+ *  Copyright 2010 salaboy.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.drools.services;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ *
+ * @author salaboy
+ */
+public class Node {
+
+ private final Map<Class<?>, Object> services
+    = new ConcurrentHashMap<Class<?>, Object>();
+
+
+  public <T> T get(Class<T> interfaceClass) {
+    synchronized (interfaceClass) {
+      Object service = services.get(interfaceClass);
+      if (service == null) {
+        try {
+          Class<?> implementingClass = Class.forName(interfaceClass.getCanonicalName()+"Impl");
+
+          service = implementingClass.newInstance();
+          services.put(interfaceClass, service);
+        }
+        catch (Exception e) {
+          throw new RuntimeException(e);
+        }
+      }
+      return interfaceClass.cast(service);
+    }
+  }
+  public <T> void set(Class<T> interfaceClass, T provider) {
+    synchronized (interfaceClass) {
+      services.put(interfaceClass, provider);
+    }
+  }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/NodeConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/NodeConnection.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/NodeConnection.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,28 @@
+/*
+ *  Copyright 2010 salaboy.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.drools.services;
+
+/**
+ *
+ * @author salaboy
+ */
+public interface NodeConnection {
+    public Node connect();
+    public void disconnect();
+    
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/RemoteNodeConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/RemoteNodeConnection.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/RemoteNodeConnection.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,95 @@
+/*
+ *  Copyright 2010 salaboy.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.drools.services;
+
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.vsm.GenericConnector;
+import org.drools.vsm.remote.KnowledgeBaseProviderRemoteClient;
+import org.drools.vsm.remote.KnowledgeBuilderProviderRemoteClient;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RemoteNodeConnection implements NodeConnection {
+
+    private String name;
+
+    public GenericConnector client;
+
+    private List<GenericConnector> services;
+
+    public AtomicInteger    counter;
+
+    private int sessionId = -1;
+
+
+    
+
+    public RemoteNodeConnection(String name, GenericConnector connector) {
+        this.name = name;
+        this.client = connector;
+        this.counter = new AtomicInteger();
+    }
+
+    public Node connect() {
+
+        if(client.connect()){
+
+            Node node = new Node();
+            node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderRemoteClient(this) );
+            node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderRemoteClient(this) );
+            return node;
+        }
+        return null;
+    }
+
+    public void disconnect(){
+        client.disconnect();
+    }
+    public GenericConnector getClient() {
+        return client;
+    }
+
+    public void setClient(GenericConnector client) {
+        this.client = client;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+   
+
+    
+    public int getSessionId() {
+        return sessionId;
+    }
+
+    public int getNextId() {
+        return this.counter.incrementAndGet();
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/BlockingGenericIoWriter.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/BlockingGenericIoWriter.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/BlockingGenericIoWriter.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,28 @@
+/**
+ * 
+ */
+package org.drools.vsm;
+
+
+public class BlockingGenericIoWriter implements GenericIoWriter {
+    
+    private Message msg;
+
+    public void write(Message message) {
+        this.msg = message;
+    }
+    
+    public Message getMessage() {
+        return this.msg;
+    }
+
+    public void write(Message msg,
+                      MessageResponseHandler responseHandler) {
+        if ( responseHandler == null ) {
+            this.msg = msg;
+        } else {
+            throw new UnsupportedOperationException();
+        }
+    }
+    
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ClientGenericMessageReceiver.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ClientGenericMessageReceiver.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ClientGenericMessageReceiver.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,13 @@
+package org.drools.vsm;
+
+import org.drools.vsm.mina.MinaIoWriter;
+
+public interface ClientGenericMessageReceiver {
+
+    public abstract void addResponseHandler(int id,
+                                            MessageResponseHandler responseHandler);
+
+    public abstract void messageReceived(GenericIoWriter writer,
+                                         Message msg) throws Exception;
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/CollectionClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/CollectionClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/CollectionClient.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,84 @@
+package org.drools.vsm;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+public class CollectionClient<T>
+    implements
+    Collection {
+    private String parentInstanceId;
+
+    public CollectionClient(String parentInstanceId) {
+        this.parentInstanceId = parentInstanceId;
+    }
+
+    public String getParentInstanceId() {
+        return this.parentInstanceId;
+    }
+
+    public boolean add(Object e) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean addAll(Collection c) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public void clear() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public boolean contains(Object o) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean containsAll(Collection c) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean isEmpty() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public Iterator iterator() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean remove(Object o) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean removeAll(Collection c) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean retainAll(Collection c) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public int size() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public Object[] toArray() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Object[] toArray(Object[] a) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericConnector.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericConnector.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,13 @@
+package org.drools.vsm;
+
+public interface GenericConnector extends GenericIoWriter {
+
+    boolean connect();
+
+    void disconnect();
+
+    Message write(Message msg);
+    
+    //void write(Message msg);
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericIoWriter.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericIoWriter.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericIoWriter.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,6 @@
+package org.drools.vsm;
+
+public interface GenericIoWriter {
+    void write(Message msg,
+               MessageResponseHandler responseHandler);
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandler.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,8 @@
+package org.drools.vsm;
+
+public interface GenericMessageHandler {
+
+    public abstract void messageReceived(GenericIoWriter session,
+                                         Message msg) throws Exception;
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandlerImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandlerImpl.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,67 @@
+package org.drools.vsm;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.SystemEventListener;
+import org.drools.command.FinishedCommand;
+import org.drools.command.impl.ContextImpl;
+import org.drools.command.impl.GenericCommand;
+import org.drools.runtime.impl.ExecutionResultImpl;
+
+public class GenericMessageHandlerImpl implements GenericMessageHandler {
+    private SystemEventListener systemEventListener;
+
+    private ServiceManagerData  data;
+
+    public GenericMessageHandlerImpl(ServiceManagerData data,
+                                 SystemEventListener systemEventListener) {
+        this.systemEventListener = systemEventListener;
+        this.data = data;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.vsm.GenericMessageHandler#messageReceived(org.drools.vsm.GenericIoWriter, org.drools.vsm.Message)
+     */
+    public void messageReceived(GenericIoWriter session,
+                                Message msg) throws Exception {
+        systemEventListener.debug( "Message receieved : " + msg );
+
+
+        // we always need to process a List, for genericity, but don't force a List on the payload
+        List<GenericCommand> commands;
+        if ( msg.getPayload() instanceof List ) {
+            commands = (List<GenericCommand>) msg.getPayload();
+        } else {
+            commands = new ArrayList<GenericCommand>();
+            commands.add( (GenericCommand) msg.getPayload() );
+        }
+
+        // Setup the evaluation context 
+        ContextImpl localSessionContext = new ContextImpl( "session_" + msg.getSessionId(),
+                                                           this.data.getContextManager(),
+                                                           this.data.getTemp() );        
+        ExecutionResultImpl localKresults = new ExecutionResultImpl();
+        localSessionContext.set( "kresults_" + msg.getSessionId(),
+                                 localKresults );
+        
+        for ( GenericCommand cmd : commands ) {
+            // evaluate the commands
+            cmd.execute( localSessionContext );
+        }
+
+        if ( !msg.isAsync() && localKresults.getIdentifiers().isEmpty() ) {
+            // if it's not an async invocation and their are no results, just send a simple notification message
+            session.write( new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        new FinishedCommand() ), null );
+        } else {
+            // return the payload
+            session.write( new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        localKresults ), null );
+        }
+    }
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/Message.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/Message.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/Message.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,52 @@
+package org.drools.vsm;
+
+import java.io.Serializable;
+import java.util.Map;
+
+public class Message
+    implements
+    Serializable {
+    private int     sessionId;
+    private int     responseId;
+    private boolean async;
+    private Object  payload;
+
+    public Message(int sessionId,
+                   int responseId,
+                   boolean async,
+                   Object payload) {
+        this.sessionId = sessionId;
+        this.async = async;
+        this.responseId = responseId;
+        this.payload = payload;
+    }
+
+    public Message(int sessionId,
+                   Map<String, Integer> contextVars,
+                   Object payload) {
+        this.sessionId = sessionId;
+        this.responseId = -1;
+        this.payload = payload;
+    }
+
+    public int getSessionId() {
+        return sessionId;
+    }
+
+    public int getResponseId() {
+        return responseId;
+    }
+
+    public boolean isAsync() {
+        return async;
+    }
+
+    public Object getPayload() {
+        return payload;
+    }
+
+    public String toString() {
+        return "sessionId=" + this.sessionId + " responseId=" + responseId + " async=" + this.async + " payload=" + this.payload;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/MessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/MessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/MessageResponseHandler.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,7 @@
+package org.drools.vsm;
+
+public interface MessageResponseHandler {
+    public void setError(RuntimeException error);
+
+    public void receive(Message message);
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ServiceManagerData.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ServiceManagerData.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ServiceManagerData.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,66 @@
+package org.drools.vsm;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.drools.command.Context;
+import org.drools.command.ContextManager;
+import org.drools.command.impl.ContextImpl;
+
+public class ServiceManagerData {
+    private ContextManager contextManager;
+
+    private Context        root;
+    private Context        temp;
+
+    public static String   ROOT                 = "ROOT";
+    public static String   TEMP                 = "__TEMP__";
+    public static String   SERVICE_MANAGER_DATA = "__ServiceManagerData__";
+
+    private AtomicInteger  sessionIdCounter     = new AtomicInteger();
+
+    public ServiceManagerData() {
+        // Setup ROOT context, this will hold all long lived intances and instanceIds
+        this.contextManager = new ContextManagerImpl();
+
+        this.root = new ContextImpl( ROOT,
+                                     this.contextManager );
+        ((ContextManagerImpl) this.contextManager).addContext( this.root );
+        this.root.set( SERVICE_MANAGER_DATA,
+                       this );
+        // Setup TEMP context, this will hold all short lived instanceId and instances
+        // TODO: TEMP context should have a time/utilisation eviction queue added 
+        this.temp = new ContextImpl( TEMP,
+                                     this.contextManager,
+                                     this.root );
+        ((ContextManagerImpl) this.contextManager).addContext( this.temp );
+    }
+
+    public AtomicInteger getSessionIdCounter() {
+        return sessionIdCounter;
+    }
+
+    public ContextManager getContextManager() {
+        return contextManager;
+    }
+
+    public void setContextManager(ContextManager contextManager) {
+        this.contextManager = contextManager;
+    }
+
+    public Context getRoot() {
+        return root;
+    }
+
+    public void setRoot(Context root) {
+        this.root = root;
+    }
+
+    public Context getTemp() {
+        return temp;
+    }
+
+    public void setTemp(Context temp) {
+        this.temp = temp;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/command/ServiceManagerClientConnectCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/command/ServiceManagerClientConnectCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/command/ServiceManagerClientConnectCommand.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,34 @@
+package org.drools.vsm.command;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.vsm.ServiceManagerData;
+
+public class ServiceManagerClientConnectCommand
+    implements
+    GenericCommand<Integer> {
+    
+    private String outIdentifier;
+
+    
+
+    public ServiceManagerClientConnectCommand(String outIdentifier) {
+        this.outIdentifier = outIdentifier;
+    }
+
+
+
+    public Integer execute(Context context) {
+        ServiceManagerData data = (ServiceManagerData) context.get( ServiceManagerData.SERVICE_MANAGER_DATA );
+        
+        Integer sessionId = data.getSessionIdCounter().getAndIncrement();
+        if ( this.outIdentifier != null ) {
+            ((ExecutionResultImpl)((KnowledgeCommandContext) context).getExecutionResults()).getResults().put( this.outIdentifier, sessionId );
+        } 
+        
+        return sessionId;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBaseProviderLocalClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBaseProviderLocalClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBaseProviderLocalClient.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,59 @@
+package org.drools.vsm.local;
+
+import java.util.Properties;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+
+public class KnowledgeBaseProviderLocalClient
+    implements
+    KnowledgeBaseFactoryService {
+
+    public Environment newEnvironment() {
+        return KnowledgeBaseFactory.newEnvironment();
+    }
+
+    public KnowledgeBase newKnowledgeBase() {
+        return newKnowledgeBase( ( KnowledgeBaseConfiguration ) null );
+    }
+
+    public KnowledgeBase newKnowledgeBase(KnowledgeBaseConfiguration conf) {
+        return KnowledgeBaseFactory.newKnowledgeBase( conf );
+    }
+
+    public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration() {
+        return KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
+    }
+
+    public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration(Properties properties,
+                                                                    ClassLoader classLoader) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeSessionConfiguration newKnowledgeSessionConfiguration() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeSessionConfiguration newKnowledgeSessionConfiguration(Properties properties) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBase newKnowledgeBase(String kbaseId) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBase newKnowledgeBase(String kbaseId,
+                                          KnowledgeBaseConfiguration conf) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBuilderProviderLocalClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBuilderProviderLocalClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBuilderProviderLocalClient.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,51 @@
+/**
+ * 
+ */
+package org.drools.vsm.local;
+
+import java.util.Properties;
+
+import org.drools.KnowledgeBase;
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+
+public class KnowledgeBuilderProviderLocalClient
+    implements
+    KnowledgeBuilderFactoryService {
+
+    public DecisionTableConfiguration newDecisionTableConfiguration() {
+        return KnowledgeBuilderFactory.newDecisionTableConfiguration();
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder() {
+        return KnowledgeBuilderFactory.newKnowledgeBuilder();
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBuilderConfiguration conf) {
+        return KnowledgeBuilderFactory.newKnowledgeBuilder( conf );
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase) {
+        return KnowledgeBuilderFactory.newKnowledgeBuilder( kbase );
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase,
+                                                KnowledgeBuilderConfiguration conf) {
+        return KnowledgeBuilderFactory.newKnowledgeBuilder( kbase,
+                                                            conf );
+    }
+
+    public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration() {
+        return KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+    }
+
+    public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration(Properties properties,
+                                                                          ClassLoader classLoader) {
+        return KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration( properties,
+                                                                         classLoader );
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/ClientGenericMessageReceiverImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/ClientGenericMessageReceiverImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/ClientGenericMessageReceiverImpl.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,72 @@
+/**
+ * 
+ */
+package org.drools.vsm.mina;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.drools.SystemEventListener;
+import org.drools.task.service.Command;
+
+
+
+import org.drools.vsm.ClientGenericMessageReceiver;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.GenericMessageHandler;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class ClientGenericMessageReceiverImpl
+    implements
+    ClientGenericMessageReceiver {
+    protected Map<Integer, MessageResponseHandler> responseHandlers;
+
+    private GenericMessageHandler                  handler;
+
+    private final SystemEventListener              systemEventListener;
+
+    public ClientGenericMessageReceiverImpl(GenericMessageHandler handler,
+                                            SystemEventListener systemEventListener) {
+        this.handler = handler;
+        this.responseHandlers = new ConcurrentHashMap<Integer, MessageResponseHandler>();;
+        this.systemEventListener = systemEventListener;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.vsm.mina.ClientGenericMessageReceiver#addResponseHandler(int, org.drools.vsm.MessageResponseHandler)
+     */
+    public void addResponseHandler(int id,
+                                   MessageResponseHandler responseHandler) {
+        this.responseHandlers.put( id,
+                                   responseHandler );
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.vsm.mina.ClientGenericMessageReceiver#messageReceived(org.drools.vsm.mina.MinaIoWriter, org.drools.vsm.Message)
+     */
+    public void messageReceived(GenericIoWriter writer,
+                                Message msg) throws Exception {
+
+        systemEventListener.debug( "Message receieved : " + msg );
+
+        MessageResponseHandler responseHandler = (MessageResponseHandler) responseHandlers.remove( msg.getResponseId() );
+
+        if ( responseHandler != null ) {
+            Object payload = msg.getPayload();
+            if (payload instanceof Command && ((Command)msg.getPayload()).getArguments().size() > 0 &&
+            	((Command)msg.getPayload()).getArguments().get(0) instanceof RuntimeException)
+            	payload = ((Command)msg.getPayload()).getArguments().get(0);
+            if (( payload != null && payload instanceof RuntimeException )) {
+                responseHandler.setError( (RuntimeException) payload );
+            } else {
+                responseHandler.receive( msg );
+            }
+        } else if ( handler != null ) {
+            this.handler.messageReceived( writer,
+                                          msg );
+        } else {
+            throw new RuntimeException( "Unable to process Message" );
+        }
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaAcceptor.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaAcceptor.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaAcceptor.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,45 @@
+package org.drools.vsm.mina;
+
+import java.io.IOException;
+import java.net.SocketAddress;
+
+import org.apache.mina.core.service.IoAcceptor;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
+import org.apache.mina.filter.logging.LoggingFilter;
+import org.apache.mina.transport.socket.SocketAcceptor;
+import org.drools.vsm.AcceptorService;
+
+public class MinaAcceptor
+    implements
+    AcceptorService {
+    protected SocketAcceptor acceptor;
+    protected SocketAddress  address;
+
+    public MinaAcceptor(SocketAcceptor acceptor,
+                        SocketAddress address) {
+        this.acceptor = acceptor;
+        this.address = address;
+    }
+
+    public synchronized void start() throws IOException {
+        acceptor.getFilterChain().addLast( "logger",
+                                           new LoggingFilter() );
+        acceptor.getFilterChain().addLast( "codec",
+                                           new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );
+        acceptor.getSessionConfig().setReadBufferSize( 2048 );
+        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE,
+                                                 10 );
+        acceptor.bind( address );
+    }
+
+    public synchronized void stop() {
+        acceptor.dispose();
+    }
+
+    public synchronized IoAcceptor getIoAcceptor() {
+        return acceptor;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaConnector.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaConnector.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,112 @@
+package org.drools.vsm.mina;
+
+import java.net.SocketAddress;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.mina.core.future.ConnectFuture;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
+import org.apache.mina.transport.socket.SocketConnector;
+import org.drools.SystemEventListener;
+import org.drools.vsm.GenericConnector;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+import org.drools.vsm.responsehandlers.BlockingMessageResponseHandler;
+
+public class MinaConnector
+    implements
+    GenericConnector,
+    GenericIoWriter {
+    protected IoSession           session;
+
+    protected final String        name;
+    protected AtomicInteger       counter;
+    protected SocketConnector     connector;
+    protected SocketAddress       address;
+    protected SystemEventListener eventListener;
+
+    public MinaConnector(String name,
+                         SocketConnector connector,
+                         SocketAddress address,
+                         SystemEventListener eventListener) {
+        if ( name == null ) {
+            throw new IllegalArgumentException( "Name can not be null" );
+        }
+        this.name = name;
+        this.counter = new AtomicInteger();
+        this.address = address;
+        this.connector = connector;
+        this.eventListener = eventListener;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.vsm.mina.Messenger#connect()
+     */
+    public boolean connect() {
+        if ( session != null && session.isConnected() ) {
+            throw new IllegalStateException( "Already connected. Disconnect first." );
+        }
+
+        try {
+            this.connector.getFilterChain().addLast( "codec",
+                                                     new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );
+
+            ConnectFuture future1 = this.connector.connect( this.address );
+            future1.await( 2000 );
+            if ( !future1.isConnected() ) {
+                eventListener.info( "unable to connect : " + address + " : " + future1.getException() );
+                return false;
+            }
+            eventListener.info( "connected : " + address );
+            this.session = future1.getSession();
+            return true;
+        } catch ( Exception e ) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.vsm.mina.Messenger#disconnect()
+     */
+    public void disconnect() {
+        if ( session != null && session.isConnected() ) {
+            session.close();
+            session.getCloseFuture().join();
+        }
+    }
+
+    private void addResponseHandler(int id,
+                                    MessageResponseHandler responseHandler) {
+        ((MinaIoHandler) this.connector.getHandler()).addResponseHandler( id,
+                                                                          responseHandler );
+    }
+
+    public void write(Message msg,
+                      MessageResponseHandler responseHandler) {
+        if ( responseHandler != null ) {
+            addResponseHandler( msg.getResponseId(),
+                                responseHandler );
+        }
+        this.session.write( msg );
+    }
+
+    public Message write(Message msg) {
+        BlockingMessageResponseHandler responseHandler = new BlockingMessageResponseHandler();
+
+        if ( responseHandler != null ) {
+            addResponseHandler( msg.getResponseId(),
+                                responseHandler );
+        }
+        this.session.write( msg );
+
+        Message returnMessage = responseHandler.getMessage();
+        if ( responseHandler.getError() != null ) {
+            throw responseHandler.getError();
+        }
+
+        return returnMessage;
+    }
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoHandler.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,60 @@
+package org.drools.vsm.mina;
+
+
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+import org.drools.SystemEventListener;
+import org.drools.vsm.ClientGenericMessageReceiver;
+import org.drools.vsm.GenericMessageHandler;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class MinaIoHandler extends IoHandlerAdapter {
+    /**
+     * Listener used for logging
+     */
+    private final SystemEventListener systemEventListener;
+
+    private ClientGenericMessageReceiver clientMessageReceiver;
+
+    public MinaIoHandler(SystemEventListener systemEventListener) {
+        this( systemEventListener,
+              null );
+
+    }
+
+    public MinaIoHandler(SystemEventListener systemEventListener,
+                         GenericMessageHandler handler) {
+        this.systemEventListener = systemEventListener;
+        this.clientMessageReceiver = new ClientGenericMessageReceiverImpl( handler,
+                                                                           systemEventListener );
+
+    }
+
+    public void addResponseHandler(int id,
+                                   MessageResponseHandler responseHandler) {
+        this.clientMessageReceiver.addResponseHandler( id,
+                                                       responseHandler );
+    }
+
+    public void exceptionCaught(IoSession session,
+                                Throwable cause) throws Exception {
+        systemEventListener.exception( "Uncaught exception on Server",
+                                       cause );
+    }
+
+    public void messageReceived(IoSession session,
+                                Object object) throws Exception {
+        Message msg = (Message) object;
+        clientMessageReceiver.messageReceived( new MinaIoWriter( session ),
+                                               msg );
+    }
+
+    @Override
+    public void sessionIdle(IoSession session,
+                            IdleStatus status) throws Exception {
+        this.systemEventListener.debug( "Server IDLE " + session.getIdleCount( status ) );
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoWriter.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoWriter.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoWriter.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,23 @@
+package org.drools.vsm.mina;
+
+import org.apache.mina.core.session.IoSession;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class MinaIoWriter
+    implements
+    GenericIoWriter {
+    
+    private IoSession session;
+
+    public MinaIoWriter(IoSession session) {
+        this.session = session;
+    }
+
+    public void write(Message message,
+                      MessageResponseHandler responseHandler) {
+        this.session.write( message );
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseProviderRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseProviderRemoteClient.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,95 @@
+package org.drools.vsm.remote;
+
+import java.util.Properties;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.command.FinishedCommand;
+import org.drools.command.NewKnowledgeBaseCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.services.RemoteNodeConnection;
+import org.drools.vsm.Message;
+
+public class KnowledgeBaseProviderRemoteClient
+    implements
+    KnowledgeBaseFactoryService {
+    private RemoteNodeConnection nodeConnection;
+
+    public KnowledgeBaseProviderRemoteClient(RemoteNodeConnection nodeConnection) {
+        this.nodeConnection = nodeConnection;
+    }
+
+    public Environment newEnvironment() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBase newKnowledgeBase() {
+        return newKnowledgeBase( ( KnowledgeBaseConfiguration ) null );
+    }
+
+    public KnowledgeBase newKnowledgeBase(KnowledgeBaseConfiguration conf) {
+        //return new NewKnowledgeBaseCommand(null);
+
+        String localId = UUID.randomUUID().toString();
+
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   false,
+                                   new SetVariableCommand( "__TEMP__",
+                                                           localId,
+                                                           new NewKnowledgeBaseCommand( null ) ) );
+        try {
+            Object object = nodeConnection.client.write( msg ).getPayload();
+
+            if ( !(object instanceof FinishedCommand) ) {
+                throw new RuntimeException( "Response was not correctly ended" );
+            }
+
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+
+        return new KnowledgeBaseRemoteClient( localId,
+                                              nodeConnection );
+
+    }
+
+    public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration(Properties properties,
+                                                                    ClassLoader classLoader) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeSessionConfiguration newKnowledgeSessionConfiguration() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeSessionConfiguration newKnowledgeSessionConfiguration(Properties properties) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBase newKnowledgeBase(String kbaseId) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBase newKnowledgeBase(String kbaseId,
+                                          KnowledgeBaseConfiguration conf) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseRemoteClient.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,174 @@
+package org.drools.vsm.remote;
+
+import java.util.Collection;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeBaseAddKnowledgePackagesCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.NewStatefulKnowledgeSessionCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definition.process.Process;
+import org.drools.definition.rule.Rule;
+import org.drools.definition.type.FactType;
+import org.drools.event.knowledgebase.KnowledgeBaseEventListener;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.services.RemoteNodeConnection;
+import org.drools.vsm.CollectionClient;
+import org.drools.vsm.Message;
+
+public class KnowledgeBaseRemoteClient
+    implements
+    KnowledgeBase {
+
+    private RemoteNodeConnection nodeConnection;
+    private String                     instanceId;
+
+    public KnowledgeBaseRemoteClient(String instanceId,
+                                     RemoteNodeConnection nodeConnection) {
+        this.instanceId = instanceId;
+        this.nodeConnection = nodeConnection;
+    }
+
+    public void addKnowledgePackages(Collection<KnowledgePackage> kpackages) {
+        String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+        String kuilderInstanceId = ((CollectionClient<KnowledgePackage>) kpackages).getParentInstanceId();
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new KnowledgeBaseAddKnowledgePackagesCommand(),
+                                                                                  kuilderInstanceId,
+                                                                                  instanceId,
+                                                                                  null,
+                                                                                  kresultsId ) );
+        
+        try {
+            Object object = nodeConnection.client.write( msg ).getPayload();
+
+            if ( !(object instanceof FinishedCommand) ) {
+                throw new RuntimeException( "Response was not correctly ended" );
+            }
+
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+    }
+
+    public FactType getFactType(String packageName,
+                                String typeName) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgePackage getKnowledgePackage(String packageName) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection<KnowledgePackage> getKnowledgePackages() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Process getProcess(String processId) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Rule getRule(String packageName,
+                        String ruleName) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public StatefulKnowledgeSession newStatefulKnowledgeSession() {
+        return newStatefulKnowledgeSession( null,
+                                            null );
+    }
+
+    public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeSessionConfiguration conf,
+                                                                Environment environment) {
+        String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+        String localId = UUID.randomUUID().toString();
+
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   false,
+                                   new SetVariableCommand( "__TEMP__",
+                                                           localId,
+                                                           new KnowledgeContextResolveFromContextCommand( new NewStatefulKnowledgeSessionCommand( null ),
+                                                                                                          null,
+                                                                                                          instanceId,
+                                                                                                          null,
+                                                                                                          kresultsId ) ) );
+
+        try {
+            Object object = nodeConnection.client.write( msg ).getPayload();
+            
+            if ( !(object instanceof FinishedCommand) ) {
+                throw new RuntimeException( "Response was not correctly ended" );
+            }
+
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+
+        return new StatefulKnowledgeSessionRemoteClient( localId,
+                                                         nodeConnection );
+    }
+
+    public StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public StatelessKnowledgeSession newStatelessKnowledgeSession() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void removeKnowledgePackage(String packageName) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void removeProcess(String processId) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void removeRule(String packageName,
+                           String ruleName) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void addEventListener(KnowledgeBaseEventListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public Collection<KnowledgeBaseEventListener> getKnowledgeBaseEventListeners() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void removeEventListener(KnowledgeBaseEventListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+	public void removeFunction(String packageName, String ruleName) {
+		// TODO Auto-generated method stub
+	}
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderProviderRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderProviderRemoteClient.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,87 @@
+/**
+ * 
+ */
+package org.drools.vsm.remote;
+
+import java.util.Properties;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.command.FinishedCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.command.builder.NewKnowledgeBuilderCommand;
+import org.drools.services.RemoteNodeConnection;
+import org.drools.vsm.Message;
+
+public class KnowledgeBuilderProviderRemoteClient
+    implements
+    KnowledgeBuilderFactoryService {
+    private RemoteNodeConnection nodeConnection;
+
+    public KnowledgeBuilderProviderRemoteClient(RemoteNodeConnection nodeConnection) {
+        this.nodeConnection =  nodeConnection;
+    }
+
+    public DecisionTableConfiguration newDecisionTableConfiguration() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder() {
+        String localId = UUID.randomUUID().toString();
+
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   false,
+                                   new SetVariableCommand( "__TEMP__",
+                                                           localId,
+                                                           new NewKnowledgeBuilderCommand( null ) ) );
+
+        try {
+            Object object = nodeConnection.client.write( msg ).getPayload();
+
+            if ( !(object instanceof FinishedCommand) ) {
+                throw new RuntimeException( "Response was not correctly ended" );
+            }
+
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+
+        return new KnowledgeBuilderRemoteClient( localId,
+                                                 nodeConnection );
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBuilderConfiguration conf) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase,
+                                                KnowledgeBuilderConfiguration conf) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration(Properties properties,
+                                                                          ClassLoader classLoader) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderRemoteClient.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,138 @@
+package org.drools.vsm.remote;
+
+import java.util.Collection;
+
+import org.drools.KnowledgeBase;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.ResourceConfiguration;
+import org.drools.builder.ResourceType;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.builder.KnowledgeBuilderAddCommand;
+import org.drools.command.builder.KnowledgeBuilderGetErrorsCommand;
+import org.drools.command.builder.KnowledgeBuilderHasErrorsCommand;
+import org.drools.definition.KnowledgePackage;
+import org.drools.io.Resource;
+import org.drools.runtime.ExecutionResults;
+import org.drools.services.RemoteNodeConnection;
+import org.drools.vsm.CollectionClient;
+import org.drools.vsm.Message;
+
+public class KnowledgeBuilderRemoteClient
+    implements
+    KnowledgeBuilder {
+    private RemoteNodeConnection nodeConnection;
+    private String                     instanceId;
+
+    public KnowledgeBuilderRemoteClient(String instanceId,
+                                        RemoteNodeConnection nodeConnection) {
+        this.instanceId = instanceId;
+        this.nodeConnection = nodeConnection;
+    }
+
+    public void add(Resource resource,
+                    ResourceType resourceType) {
+        add( resource,
+             resourceType,
+             null );
+    }
+
+    public void add(Resource resource,
+                    ResourceType resourceType,
+                    ResourceConfiguration configuration) {
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderAddCommand( resource,
+                                                                                                                  resourceType,
+                                                                                                                  configuration ),
+                                                                                  instanceId,
+                                                                                  null,
+                                                                                  null,
+                                                                                  null ) );
+
+        try {
+            Object object = nodeConnection.client.write( msg ).getPayload();
+
+            if ( !(object instanceof FinishedCommand) ) {
+                throw new RuntimeException( "Response was not correctly ended" );
+            }
+
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+
+    }
+
+    public KnowledgeBuilderErrors getErrors() {
+        String commandId = "kbuilder.getErrors_" + nodeConnection.getNextId();
+        String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderGetErrorsCommand( commandId ),
+                                                                                  instanceId,
+                                                                                  null,
+                                                                                  null,
+                                                                                  kresultsId ) );
+
+        try {
+            Object object = nodeConnection.client.write( msg ).getPayload();
+
+            if ( object == null ) {
+                throw new RuntimeException( "Response was not correctly received" );
+            }
+
+            return (KnowledgeBuilderErrors) ((ExecutionResults) object).getValue( commandId );            
+
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+        
+    }
+
+    public Collection<KnowledgePackage> getKnowledgePackages() {
+        return new CollectionClient<KnowledgePackage>( this.instanceId );
+    }
+
+    public boolean hasErrors() {
+        String commandId = "kbuilder.hasErrors_" + nodeConnection.getNextId();
+        String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.getNextId(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderHasErrorsCommand( commandId ),
+                                                                                  instanceId,
+                                                                                  null,
+                                                                                  null,
+                                                                                  kresultsId ) );
+
+        try {
+            Object object = nodeConnection.client.write( msg ).getPayload();
+
+            if ( object == null ) {
+                throw new RuntimeException( "Response was not correctly received" );
+            }
+
+            return (Boolean) ((ExecutionResults) object).getValue( commandId );
+
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+        
+        
+        
+    }
+
+	public KnowledgeBase newKnowledgeBase() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/ProcessInstanceRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/ProcessInstanceRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/ProcessInstanceRemoteClient.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,70 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.drools.vsm.remote;
+
+import java.io.Serializable;
+import org.drools.runtime.process.ProcessInstance;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ProcessInstanceRemoteClient implements ProcessInstance, Serializable {
+
+    private String processId;
+    private long id;
+    private String processName;
+    private int state;
+    private String[] eventTypes;
+    public ProcessInstanceRemoteClient() {
+    }
+
+    public ProcessInstanceRemoteClient(long id, String processId, String processName, int state) {
+        this.processId = processId;
+        this.id = id;
+        this.processName = processName;
+        this.state = state;
+    }
+
+
+
+    public String getProcessId() {
+        return processId;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public String getProcessName() {
+        return processName;
+    }
+
+    public int getState() {
+        return state;
+    }
+
+    public void signalEvent(String type, Object event) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public String[] getEventTypes() {
+        return eventTypes;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,419 @@
+package org.drools.vsm.remote;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.drools.KnowledgeBase;
+import org.drools.command.Command;
+import org.drools.command.ExecuteCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.command.vsm.GetWorkItemManagerCommand;
+import org.drools.command.vsm.RegisterRemoteWorkItemHandlerCommand;
+import org.drools.command.vsm.StartProcessRemoteCommand;
+import org.drools.event.process.ProcessEventListener;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.runtime.Calendars;
+import org.drools.runtime.Environment;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.ExitPoint;
+import org.drools.runtime.Globals;
+import org.drools.runtime.ObjectFilter;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.runtime.rule.Agenda;
+import org.drools.runtime.rule.AgendaFilter;
+import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.QueryResults;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+import org.drools.services.RemoteNodeConnection;
+import org.drools.time.SessionClock;
+import org.drools.vsm.Message;
+
+public class StatefulKnowledgeSessionRemoteClient
+    implements
+    StatefulKnowledgeSession {
+
+    private RemoteNodeConnection nodeConnection;
+    private String                     instanceId;
+
+    public StatefulKnowledgeSessionRemoteClient(String instanceId,
+                                                RemoteNodeConnection nodeConnection) {
+        this.instanceId = instanceId;
+        this.nodeConnection = nodeConnection;
+    }
+
+    public String getInstanceId() {
+        return this.instanceId;
+    }
+
+    public void dispose() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public int getId() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public int fireAllRules() {
+        String commandId = "ksession.fireAllRules" + nodeConnection.getNextId();
+        String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new FireAllRulesCommand( commandId ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+        try {
+            Object object = nodeConnection.client.write( msg ).getPayload();
+
+            if ( object == null ) {
+                throw new RuntimeException( "Response was not correctly received" );
+            }
+
+            return (Integer) ((ExecutionResults) object).getValue( commandId );
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+    }
+
+    public int fireAllRules(int max) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public int fireAllRules(AgendaFilter agendaFilter) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public void fireUntilHalt() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void fireUntilHalt(AgendaFilter agendaFilter) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public ExecutionResults execute(Command command) {
+        String commandId = "ksession.execute" + nodeConnection.getNextId();
+        String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new ExecuteCommand( commandId,
+                                                                                                      command ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+
+        try {
+            Object object = nodeConnection.client.write( msg ).getPayload();if ( object == null ) {
+                throw new RuntimeException( "Response was not correctly received" );
+            }
+
+            return (ExecutionResults) ((ExecutionResults) object).getValue( commandId );
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+    }
+
+    public Environment getEnvironment() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Object getGlobal(String identifier) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Globals getGlobals() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public KnowledgeBase getKnowledgeBase() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public <T extends SessionClock> T getSessionClock() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void registerExitPoint(String name,
+                                  ExitPoint exitPoint) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void setGlobal(String identifier,
+                          Object object) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void unregisterExitPoint(String name) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public Agenda getAgenda() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public QueryResults getQueryResults(String query) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public QueryResults getQueryResults(String query,
+                                        Object[] arguments) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public WorkingMemoryEntryPoint getWorkingMemoryEntryPoint(String name) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection< ? extends WorkingMemoryEntryPoint> getWorkingMemoryEntryPoints() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void halt() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public FactHandle getFactHandle(Object object) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public <T extends FactHandle> Collection<T> getFactHandles() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public <T extends FactHandle> Collection<T> getFactHandles(ObjectFilter filter) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Object getObject(FactHandle factHandle) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection<Object> getObjects() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection<Object> getObjects(ObjectFilter filter) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public FactHandle insert(Object object) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void retract(FactHandle handle) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void update(FactHandle handle,
+                       Object object) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void abortProcessInstance(long id) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public ProcessInstance getProcessInstance(long id) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection<ProcessInstance> getProcessInstances() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public WorkItemManager getWorkItemManager() {
+    	 String kresultsId = "kresults_" + nodeConnection.getSessionId();
+         Message msg = new Message( nodeConnection.getSessionId(),
+                                    nodeConnection.counter.incrementAndGet(),
+                                    true,
+                                    new KnowledgeContextResolveFromContextCommand( new GetWorkItemManagerCommand(),
+                                                                                   null,
+                                                                                   null,
+                                                                                   instanceId,
+                                                                                   kresultsId ) );
+         try {
+             Object payload = nodeConnection.client.write( msg ).getPayload();
+             WorkItemManager workItemManager = (WorkItemManager) ((ExecutionResults) payload).getValue( "workItemManager" );
+             ((WorkItemManagerRemoteClient)workItemManager).setNodeConnection(nodeConnection);
+             ((WorkItemManagerRemoteClient)workItemManager).setInstanceId(instanceId);
+             return workItemManager;
+         } catch ( Exception e ) {
+             throw new RuntimeException( "Unable to execute message", e );
+         }
+    }
+    
+    public void registerWorkItemHandler(String name, String workItemHandler){
+        
+        String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new RegisterRemoteWorkItemHandlerCommand(name, workItemHandler ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+
+        try {
+            nodeConnection.client.write( msg );
+            
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+
+
+    }
+
+    public void signalEvent(String type,
+                            Object event) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public ProcessInstance startProcess(String processId) {
+        String commandId = "ksession.execute" + nodeConnection.getNextId();
+        String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new StartProcessRemoteCommand( processId ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+
+        try {
+            Object object = nodeConnection.client.write( msg ).getPayload();
+            if ( object == null ) {
+                throw new RuntimeException( "Response was not correctly received" );
+            }
+
+            return (ProcessInstance) ((ExecutionResults) object).getValue( processId );
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+        
+    }
+
+    public ProcessInstance startProcess(String processId,
+                                        Map<String, Object> parameters) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void addEventListener(WorkingMemoryEventListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void addEventListener(AgendaEventListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public Collection<AgendaEventListener> getAgendaEventListeners() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection<WorkingMemoryEventListener> getWorkingMemoryEventListeners() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void removeEventListener(WorkingMemoryEventListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void removeEventListener(AgendaEventListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void addEventListener(ProcessEventListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public Collection<ProcessEventListener> getProcessEventListeners() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void removeEventListener(ProcessEventListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public String getEntryPointId() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public long getFactCount() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public void signalEvent(String type,
+                            Object event,
+                            long processInstanceId) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public Calendars getCalendars() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,58 @@
+package org.drools.vsm.remote;
+
+import java.io.Serializable;
+import java.util.Map;
+
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.process.CompleteWorkItemCommand;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.services.RemoteNodeConnection;
+import org.drools.vsm.Message;
+
+/**
+ *
+ * @author Lucas Amador
+ * @author salaboy
+ */
+public class WorkItemManagerRemoteClient implements WorkItemManager, Serializable {
+
+	private static final long serialVersionUID = 1L;
+	
+	private RemoteNodeConnection nodeConnection;
+	private String instanceId;
+
+	public void abortWorkItem(long id) {
+		throw new UnsupportedOperationException("Not supported yet.");
+	}
+
+	public void completeWorkItem(long id, Map<String, Object> results) {
+		String kresultsId = "kresults_" + nodeConnection.getSessionId();
+        Message msg = new Message( nodeConnection.getSessionId(),
+                                   nodeConnection.counter.incrementAndGet(),
+                                   true,
+                                   new KnowledgeContextResolveFromContextCommand( new CompleteWorkItemCommand(id, results),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+        try {
+            nodeConnection.client.write( msg );
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message", e );
+        }
+	}
+
+	public void registerWorkItemHandler(String workItemName, WorkItemHandler handler) {
+		throw new UnsupportedOperationException("Not supported yet.");
+	}
+
+	public void setNodeConnection(RemoteNodeConnection nodeConnection) {
+		this.nodeConnection = nodeConnection;
+	}
+
+	public void setInstanceId(String instanceId) {
+		this.instanceId = instanceId;
+	}
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBaseResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBaseResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBaseResponseHandler.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,69 @@
+package org.drools.vsm.responsehandlers;
+
+import java.lang.reflect.Constructor;
+
+import org.drools.vsm.MessageResponseHandler;
+
+/**
+ * Abstract base class for client ResponseHandlers. Provides synchonized access to <field>done</field> which represents
+ * if the response is completed. Also has an <field>error</field> which will be set when there is a problem with
+ * a response. Users of this class should check to see if the response completed successfully, via
+ * the <method>isDone</method> and the <method>hasError</method>.
+ * <p/>
+ * Please note that the <field>error</field> is actually the Exception that occured on the server while
+ * processing the request.
+ *
+ * @author <a href="mailto:stampy88 at yahoo.com">dave sinclair</a>
+ */
+public abstract class AbstractBaseResponseHandler
+    implements
+    MessageResponseHandler {
+    private volatile boolean done;
+    private RuntimeException error;
+
+    public synchronized boolean hasError() {
+        return error != null;
+    }
+
+    public synchronized RuntimeException getError() {
+        return error;
+    }
+
+    public synchronized void setError(RuntimeException error) {
+        this.error = error;
+        notifyAll();
+    }
+
+    public synchronized boolean isDone() {
+        return done;
+    }
+
+    protected synchronized void setDone(boolean done) {
+        this.done = done;
+        notifyAll();
+    }
+
+    /**
+     * This method will take the specified serverSideException, and create a new one for the client based
+     * on the serverSideException. This is done so a proper stack trace can be made for the client, as opposed
+     * to seeing the server side stack.
+     *
+     * @param serverSideException exception used to create client side exception
+     * @return client side exception
+     */
+    protected static RuntimeException createSideException(RuntimeException serverSideException) {
+        RuntimeException clientSideException;
+
+        try {
+            Constructor< ? extends RuntimeException> constructor = serverSideException.getClass().getConstructor( String.class );
+
+            clientSideException = constructor.newInstance( "Server-side Exception: " + serverSideException.getMessage() );
+        } catch ( Exception e ) {
+            // this should never happen - if it does, it is a programming error
+            throw new RuntimeException( "Could not create client side exception",
+                                        e );
+        }
+
+        return clientSideException;
+    }
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBlockingResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBlockingResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBlockingResponseHandler.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,37 @@
+/**
+ *
+ */
+package org.drools.vsm.responsehandlers;
+
+public abstract class AbstractBlockingResponseHandler extends AbstractBaseResponseHandler {
+
+    /**
+     * This method will wait the specified amount of time in milliseconds for the response to
+     * be completed. Completed is determined via the <field>done</field>. Returns true if the
+     * reponse was completed in time, false otherwise. If an error occurs, this method will throw
+     * a subclass of <code>RuntimeException</code> specific to the error.
+     *
+     * @param time max time to wait
+     * @return true if response is available, false otherwise
+     *
+     * @see org.drools.task.service.PermissionDeniedException
+     * @see org.drools.task.service.CannotAddTaskException
+     * @see javax.persistence.PersistenceException
+     */
+    public synchronized boolean waitTillDone(long time) {
+
+        if ( !isDone() ) {
+            try {
+                wait( time );
+            } catch ( InterruptedException e ) {
+                // swallow and return state of done
+            }
+        }
+
+        if ( hasError() ) {
+            throw createSideException( getError() );
+        }
+
+        return isDone();
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/BlockingMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/BlockingMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/BlockingMessageResponseHandler.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,32 @@
+/**
+ *
+ */
+package org.drools.vsm.responsehandlers;
+
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class BlockingMessageResponseHandler extends AbstractBlockingResponseHandler
+    implements
+    MessageResponseHandler {
+    private static final int ATTACHMENT_ID_WAIT_TIME = 100000;
+    private static final int CONTENT_ID_WAIT_TIME    = 50000;
+
+    private volatile Message message;
+
+    public synchronized void receive(Message message) {
+        this.message = message;
+        setDone( true );
+    }
+
+    public Message getMessage() {
+        boolean done = waitTillDone( CONTENT_ID_WAIT_TIME );
+
+        if ( !done ) {
+            throw new RuntimeException( "Timeout : unable to retrieve Object Id" );
+        }
+
+        return this.message;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/LocalNodeServiceTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/LocalNodeServiceTest.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/LocalNodeServiceTest.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,48 @@
+/*
+ *  Copyright 2010 salaboy.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.drools.service;
+
+import org.drools.services.LocalNodeConnection;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author salaboy
+ */
+public class LocalNodeServiceTest extends NodeServiceLocatorBaseTest{
+
+    public LocalNodeServiceTest() {
+    }
+
+   
+
+    @Before
+    public void setUp() {
+        node = new LocalNodeConnection().connect();
+
+    }
+
+   
+
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/NodeServiceLocatorBaseTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/NodeServiceLocatorBaseTest.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/NodeServiceLocatorBaseTest.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,91 @@
+/*
+ *  Copyright 2010 salaboy.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.drools.service;
+
+
+import org.drools.KnowledgeBase;
+import org.drools.services.Node;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.junit.Assert;
+import org.junit.Test;
+/**
+ *
+ * @author salaboy
+ */
+
+public class NodeServiceLocatorBaseTest {
+
+    protected Node node;
+
+    public NodeServiceLocatorBaseTest() {
+        
+    }
+
+
+    @Test
+    public void fireAllRules(){
+
+        String str = "";
+        str += "package org.drools \n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "    dialect \"java\" \n";
+        str += "when \n";
+        str += "then \n";
+        str += "    System.out.println( \"hello1!!!\" ); \n";
+        str += "end \n";
+        str += "rule rule2 \n";
+        str += "    dialect \"java\" \n";
+        str += "when \n";
+        str += "then \n";
+        str += "    System.out.println( \"hello2!!!\" ); \n";
+        str += "end \n";
+
+         
+        KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+                      ResourceType.DRL );
+
+        if ( kbuilder.hasErrors() ) {
+            System.out.println( "Errors: " + kbuilder.getErrors() );
+        }
+
+        KnowledgeBase kbase = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+        Assert.assertNotNull(kbase);
+
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        Assert.assertNotNull(ksession);
+
+        int fired = ksession.fireAllRules();
+        Assert.assertEquals( 2, fired );
+
+
+        
+
+
+    }
+  
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/RemoteNodeServiceTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/RemoteNodeServiceTest.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/RemoteNodeServiceTest.java	2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,84 @@
+/*
+ *  Copyright 2010 salaboy.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.drools.service;
+
+import org.drools.services.NodeConnection;
+import org.drools.vsm.mina.MinaConnector;
+import org.drools.vsm.GenericConnector;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import java.io.IOException;
+import org.drools.vsm.mina.MinaAcceptor;
+import org.drools.vsm.GenericMessageHandlerImpl;
+import org.drools.vsm.mina.MinaIoHandler;
+import org.drools.SystemEventListenerFactory;
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
+import org.apache.mina.transport.socket.SocketAcceptor;
+import org.drools.vsm.ServiceManagerData;
+import java.net.SocketAddress;
+import java.net.InetSocketAddress;
+import org.drools.services.RemoteNodeConnection;
+import org.junit.After;
+import org.junit.Before;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RemoteNodeServiceTest extends NodeServiceLocatorBaseTest{
+    private MinaAcceptor server;
+    private NodeConnection nodeConnection;
+    public RemoteNodeServiceTest() {
+    }
+
+   
+
+    @Before
+    public void setUp() throws IOException {
+        SocketAddress address = new InetSocketAddress( "127.0.0.1",
+                                                       9123 );
+
+        ServiceManagerData serverData = new ServiceManagerData();
+        // setup Server
+        SocketAcceptor acceptor = new NioSocketAcceptor();
+        acceptor.setHandler( new MinaIoHandler( SystemEventListenerFactory.getSystemEventListener(),
+                                                new GenericMessageHandlerImpl( serverData,
+                                                                               SystemEventListenerFactory.getSystemEventListener() ) ) );
+        this.server = new MinaAcceptor( acceptor,
+                                        address );
+        this.server.start();
+
+        // setup Client
+        NioSocketConnector clientConnector = new NioSocketConnector();
+        clientConnector.setHandler( new MinaIoHandler( SystemEventListenerFactory.getSystemEventListener() ) );
+        GenericConnector minaClient = new MinaConnector( "client 1",
+                                                         clientConnector,
+                                                         address,
+                                                         SystemEventListenerFactory.getSystemEventListener() );
+
+        nodeConnection = new RemoteNodeConnection("client 1", minaClient);
+        node = nodeConnection.connect();
+    }
+
+    @After
+    public void tearDown() {
+        nodeConnection.disconnect();
+    }
+
+    
+
+}
\ No newline at end of file



More information about the jboss-svn-commits mailing list