[jboss-svn-commits] JBL Code SVN: r33634 - in labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid: drools-grid-api and 45 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jun 25 00:31:36 EDT 2010


Author: salaboy21
Date: 2010-06-25 00:31:31 -0400 (Fri, 25 Jun 2010)
New Revision: 33634

Added:
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorType.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeLocalImpl.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/pom.xml
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DistributedConnectionNode.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GridConnectionOLDDELETE.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/RioNodeConnector.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkingMemoryEntryPointGridClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/GetWorkingMemoryEntryPointGridCommand.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/resources/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/distributed/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/distributed/AppTest.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/pom.xml
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/strategies/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/strategies/GetMinimalKsessionNodes.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/RioResourceLocator.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/drools/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/drools/executionNodeService.groovy
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/manager-config.groovy
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/start-monitor.groovy
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/test-config.groovy
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java
Removed:
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java
Modified:
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/pom.xml
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorException.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeService.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ExecutionNodeService.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericDirectoryConnector.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericHumanTaskConnector.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GridConnection.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/NodeConnectionType.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalConnectionNode.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalDirectoryConnector.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalNodeConnector.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/GenericConnectorFactory.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/RemoteConnectionNode.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryNodeRemoteClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryServerMessageHandlerImpl.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/MinaRemoteDirectoryConnector.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/main/java/org/drools/grid/remote/mina/MinaRemoteNodeConnector.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GenericHumanTaskProvider.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GridTopology.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalDirectoryProvider.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalNodeProvider.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/BasicAPITestWithMina.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterDirectoryTest.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterMinaDirectoryTest.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterTaskTest.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/ServiceAPITest.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/MinaRemoteHumanTaskConnector.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/pom.xml
Log:
Adding Distributed Node API + impl project + tests

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/pom.xml	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/pom.xml	2010-06-25 04:31:31 UTC (rev 33634)
@@ -46,6 +46,7 @@
             <artifactId>drools-compiler</artifactId>
             <type>jar</type>
         </dependency>
+        
     </dependencies>
       
 

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorException.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorException.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorException.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -10,7 +10,7 @@
 	}
 
 	public ConnectorException(Throwable cause) {
-		super(cause);
+		super(cause.getMessage(),cause);
 	}
 
 	public ConnectorException(String message, Throwable cause) {

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorType.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorType.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorType.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,24 @@
+/*
+ *  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.grid;
+
+/**
+ *
+ * @author salaboy
+ */
+public enum ConnectorType { LOCAL, REMOTE, DISTRIBUTED }

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeLocalImpl.java (from rev 33584, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeLocalImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeLocalImpl.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,122 @@
+/*
+ *  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.grid;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.KnowledgeBase;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryNodeLocalImpl implements DirectoryNodeService {
+
+    private String id;
+    private Map<String, String> directoryMap = new HashMap<String, String>();
+    private Map<String, String> directoryKbasesMap = new HashMap<String, String>();
+    private List<GenericNodeConnector> services = new ArrayList<GenericNodeConnector>();
+    
+    public DirectoryNodeLocalImpl() {
+        this.id = "Local:Directory:";
+    }
+
+    public String getId() throws ConnectorException {
+        return this.id;
+    }
+
+    public void register(String executorId, String resourceId) throws ConnectorException, RemoteException {
+        System.out.println("Registering: " + executorId + " -- " + resourceId);
+        directoryMap.put(executorId, resourceId);
+
+    }
+
+     public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException, RemoteException {
+        System.out.println("Registering: " + executorId + " -- " + resourceConnector.getId());
+        directoryMap.put(executorId, resourceConnector.getId());
+        services.add(resourceConnector);
+
+    }
+
+    public GenericNodeConnector lookup(String executorId) throws ConnectorException, RemoteException {
+        GenericNodeConnector nodeConnector = null;
+        String sessionServiceId = (String) directoryMap.get(executorId);
+        System.out.println("Registry = " + directoryMap.toString());
+        System.out.println("Nodes Services = " + services);
+        for (GenericNodeConnector ss : services) {
+            System.out.println("Session Service id = " + ss.getId() + "needs to match with =" + sessionServiceId);
+            if (ss.getId().equals(sessionServiceId)) {
+                nodeConnector = ss;
+            }
+        }
+
+        return nodeConnector;
+    }
+
+    public void registerKBase(String kbaseId, String resourceId) throws ConnectorException, RemoteException {
+        this.directoryKbasesMap.put(kbaseId, resourceId);
+    }
+
+    public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException, RemoteException {
+        //this.directoryKbasesMap.get(kbaseId); //based on the id I should create a kbase client
+
+        return null;
+        
+    }
+
+
+    public Map<String, String> getDirectoryMap() throws ConnectorException, RemoteException {
+        return this.directoryMap;
+    }
+
+    public String lookupId(String resourceId) {
+        return this.directoryMap.get(resourceId);
+    }
+
+    public void dispose() throws ConnectorException {
+        //do nothing, it's local.
+    }
+
+    public void connect() throws ConnectorException {
+        //do nothing it's local!
+    }
+
+    public void disconnect() throws ConnectorException {
+        //do nothing
+    }
+
+    public DirectoryNodeService getDirectoryNodeService() throws ConnectorException {
+        return this;
+    }
+
+    public GenericConnection getConnection() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    
+
+    public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+        return ConnectorType.LOCAL;
+    }
+
+
+
+}

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeService.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeService.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeService.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -5,6 +5,7 @@
 
 package org.drools.grid;
 
+import java.rmi.RemoteException;
 import java.util.Map;
 
 import org.drools.KnowledgeBase;
@@ -15,16 +16,15 @@
  * @author salaboy
  */
 
-public interface DirectoryNodeService  {
+public interface DirectoryNodeService extends GenericDirectoryConnector {
 
-    public void register(String executorId, String resourceId) throws ConnectorException;
-    public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException;
-    public GenericNodeConnector lookup(String resourceId) throws ConnectorException;
-    public String lookupId(String resourceId) throws ConnectorException;
-    public void registerKBase(String kbaseId, String resourceId) throws ConnectorException;
-    public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException;
-    public void addService(GenericNodeConnector service);
-    public Map<String, String> getDirectoryMap() throws ConnectorException;
-    public void dispose() throws ConnectorException;
+    public void register(String executorId, String resourceId) throws ConnectorException, RemoteException;
+    public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException, RemoteException;
+    public GenericNodeConnector lookup(String resourceId) throws ConnectorException, RemoteException;
+    public String lookupId(String resourceId) throws ConnectorException, RemoteException;
+    public void registerKBase(String kbaseId, String resourceId) throws ConnectorException, RemoteException;
+    public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException, RemoteException;
+    public Map<String, String> getDirectoryMap() throws ConnectorException, RemoteException;
+    public void dispose() throws ConnectorException, RemoteException;
 
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ExecutionNodeService.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ExecutionNodeService.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ExecutionNodeService.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -4,6 +4,7 @@
  */
 package org.drools.grid;
 
+import java.rmi.RemoteException;
 import org.drools.grid.internal.Message;
 
 
@@ -12,7 +13,7 @@
  * @author salaboy
  */
 public interface ExecutionNodeService extends GenericNodeConnector{
-    public Message write(Message msg) throws ConnectorException;
+    public Message write(Message msg) throws ConnectorException, RemoteException;
     double getLoad() throws ConnectorException;
     void setLoad(double load) throws ConnectorException;
     double getKsessionCounter() throws ConnectorException;

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericDirectoryConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericDirectoryConnector.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericDirectoryConnector.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -16,13 +16,15 @@
  */
 package org.drools.grid;
 
+import java.rmi.RemoteException;
+
 /**
  *
  * @author salaboy
  */
 public interface GenericDirectoryConnector {
 
-    public String getId() throws ConnectorException;
+    public String getId() throws ConnectorException, RemoteException;
 
     void connect() throws ConnectorException;
 
@@ -32,5 +34,7 @@
 
     public GenericConnection getConnection();
 
+    public ConnectorType getConnectorType()  throws ConnectorException, RemoteException ;
 
+
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericHumanTaskConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericHumanTaskConnector.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericHumanTaskConnector.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -16,6 +16,7 @@
  */
 package org.drools.grid;
 
+import java.rmi.RemoteException;
 import org.drools.grid.internal.GenericIoWriter;
 import org.drools.grid.internal.Message;
 
@@ -37,4 +38,6 @@
 
     Message write(Message msg) throws ConnectorException;
 
+    public ConnectorType getConnectorType()  throws ConnectorException, RemoteException ;
+
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -1,20 +1,23 @@
 package org.drools.grid;
 
+import java.rmi.RemoteException;
 import org.drools.grid.internal.GenericIoWriter;
 import org.drools.grid.internal.Message;
 
 public interface GenericNodeConnector extends GenericIoWriter {
 
-    void connect() throws ConnectorException;
+    void connect() throws ConnectorException, RemoteException;
 
-    void disconnect() throws ConnectorException;
+    void disconnect() throws ConnectorException, RemoteException;
 
-    Message write(Message msg) throws ConnectorException;
+    Message write(Message msg) throws ConnectorException, RemoteException;
 
-    String getId() throws ConnectorException;
+    String getId() throws ConnectorException, RemoteException;
 
-    GenericConnection getConnection();
+    GenericConnection getConnection()  throws ConnectorException ;
 
-    NodeConnectionType getNodeConnectionType();
+    NodeConnectionType getNodeConnectionType()  throws ConnectorException, RemoteException ;
 
+    public ConnectorType getConnectorType()  throws ConnectorException, RemoteException ;
+
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GridConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GridConnection.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GridConnection.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -16,8 +16,11 @@
  */
 package org.drools.grid;
 
+import java.rmi.RemoteException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.drools.grid.strategies.DirectorySelectionStrategy;
 import org.drools.grid.strategies.HumanTaskSelectionStrategy;
@@ -28,7 +31,7 @@
  *
  * @author salaboy
  */
-public class GridConnection implements GenericConnection { 
+public class GridConnection implements GenericConnection {
 
     private List<GenericNodeConnector> executionNodeConnectors;
     private List<GenericDirectoryConnector> directoryNodeConnectors;
@@ -66,15 +69,23 @@
         } else {
             connector = getBestNode(strategy);
         }
-        NodeConnectionType type = connector.getNodeConnectionType();
+        System.out.println(">>>>>>>> Connector = " + connector);
+        NodeConnectionType type;
+        try {
+            type = connector.getNodeConnectionType();
+            System.out.println(">>>>>>>> Type = " + type);
+            connector.connect();
 
-        connector.connect();
+            type.setConnector(connector);
+            type.setConnection(this);
+            type.init();
+            node = NodeFactory.newExecutionNode(type);
+        } catch (RemoteException ex) {
+            Logger.getLogger(GridConnection.class.getName()).log(Level.SEVERE, null, ex);
+        }
 
-        type.setConnector(connector);
-        type.setConnection(this);
-        type.init();
-        node = NodeFactory.newExecutionNode(type);
 
+
 //        node = new ExecutionNode();
 //        node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderRemoteClient(connector));
 //        node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderRemoteClient(connector));
@@ -84,7 +95,12 @@
 
     public DirectoryNodeService getDirectoryNode(DirectorySelectionStrategy directorySelectionStrategy) throws ConnectorException {
         if (directoryNodeConnectors.isEmpty()) {
-            return null;
+            //Should I return null or add a local directory?
+//
+            DirectoryNodeService localDirectory = new DirectoryNodeLocalImpl();
+            addDirectoryNode(localDirectory);
+            return localDirectory.getDirectoryNodeService();
+           // return null;
         }
         GenericDirectoryConnector connector = directoryNodeConnectors.get(0);
 
@@ -138,8 +154,19 @@
         return executionNodes;
     }
 
-    public List<DirectoryNodeService> getDirectoryNodes() {
-        throw new UnsupportedOperationException("not Implemented yet!");
+    public List<DirectoryNodeService> getDirectoryNodes() throws ConnectorException {
+        List<DirectoryNodeService> directories = new ArrayList<DirectoryNodeService>();
+        if (directoryNodeConnectors.isEmpty()) {
+            //Should I return null or add a local directory?
+            DirectoryNodeService localDirectory = new DirectoryNodeLocalImpl();
+            addDirectoryNode(localDirectory);
+           // return null;
+        }
+        for(GenericDirectoryConnector connector : directoryNodeConnectors){
+           connector.connect();
+           directories.add(connector.getDirectoryNodeService());
+        }
+        return directories;
     }
 
     public List<HumanTaskNodeService> getHumanTaskNodes() {
@@ -148,7 +175,11 @@
 
     public void dispose() throws ConnectorException {
         for (GenericNodeConnector connector : executionNodeConnectors) {
-            connector.disconnect();
+            try {
+                connector.disconnect();
+            } catch (RemoteException ex) {
+                Logger.getLogger(GridConnection.class.getName()).log(Level.SEVERE, null, ex);
+            }
         }
         for (GenericDirectoryConnector connector : directoryNodeConnectors) {
             connector.disconnect();

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/NodeConnectionType.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/NodeConnectionType.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/NodeConnectionType.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -28,5 +28,6 @@
     public void setConnection(GenericConnection connection);
     public Set<Class<?>> getServicesKeys();
     public <T> T  getServiceImpl(Class<T> clazz);
+    public ConnectorType getConnectorType();
     public void init();
 }


Property changes on: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api
___________________________________________________________________
Name: svn:ignore
   + target


Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/pom.xml	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,35 @@
+<?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-grid</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.1.0.SNAPSHOT</version>
+  </parent>
+  
+  <artifactId>drools-grid-distributed-api</artifactId>
+  
+  <name>Drools :: Grid :: Distributed API</name>
+  
+  <dependencies>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-api</artifactId>
+      <version>5.1.0.SNAPSHOT</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-grid-api</artifactId>
+      <version>5.1.0.SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-grid-remote-api</artifactId>
+      <version>5.1.0.SNAPSHOT</version>
+      <type>jar</type>
+    </dependency>
+    
+  </dependencies>
+</project>

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,170 @@
+/*
+ *  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.grid.distributed;
+
+import java.rmi.RemoteException;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.DirectoryNodeService;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.grid.ConnectorType;
+import org.drools.grid.GenericConnection;
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.NodeConnectionType;
+import org.drools.grid.NodeFactory;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+import org.drools.grid.internal.commands.LookupCommand;
+import org.drools.grid.internal.commands.RegisterCommand;
+import org.drools.grid.remote.GenericConnectorFactory;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryLookupProviderGridClient implements DirectoryLookupFactoryService {
+
+    private GenericConnection connection;
+    private GenericNodeConnector currentConnector;
+    private MessageSession messageSession;
+
+    public DirectoryLookupProviderGridClient(GenericNodeConnector connector, GenericConnection connection) {
+        this.currentConnector = connector;
+        this.connection = connection;
+        this.messageSession = new MessageSession();
+    }
+
+    public void register(String identifier,
+            CommandExecutor executor) {
+
+        try {
+            String commandId = "client.lookup" + messageSession.getNextId();
+            String kresultsId = "kresults_" + messageSession.getSessionId();
+            int type;
+            if (executor instanceof StatefulKnowledgeSession) {
+                type = 0;
+            } else {
+                throw new IllegalArgumentException("Type is not supported for registration");
+            }
+            Message msg = new Message(messageSession.getSessionId(), messageSession.getCounter().incrementAndGet(), false, new KnowledgeContextResolveFromContextCommand(new RegisterCommand(identifier, ((StatefulKnowledgeSessionGridClient) executor).getInstanceId(), type), null, null, null, null));
+            //System.out.println("Registering " + identifier + " - - " + currentService.getId());
+            for (DirectoryNodeService directory : connection.getDirectoryNodes()) {
+                try {
+                    try {
+                        directory.register(identifier, currentConnector.getId());
+                    } catch (RemoteException ex) {
+                        Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+                    }
+                } catch (ConnectorException ex) {
+                    Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+                }
+            }
+            try {
+                Object object = currentConnector.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);
+            }
+        } catch (ConnectorException ex) {
+            Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+        }
+
+    }
+
+    public CommandExecutor lookup(String identifier) {
+
+        CommandExecutor executor = null;
+        try {
+            String commandId = "client.lookup" + messageSession.getNextId();
+            String kresultsId = "kresults_" + messageSession.getSessionId();
+            Message msg = new Message(messageSession.getSessionId(), messageSession.getCounter().incrementAndGet(), false, new KnowledgeContextResolveFromContextCommand(new LookupCommand(identifier, commandId), null, null, null, kresultsId));
+            //System.out.println("Looking up the session with identifier = "+identifier);
+            //First I need to get the correct client ExecutionNodeService with the identifier
+            //Look in all the DirectoryNodes
+            //DirectoryNodeService directory = (DirectoryNodeService) gridClient.getDirectories().iterator().next();
+            for (DirectoryNodeService directory : connection.getDirectoryNodes()) {
+
+                try {
+                    
+                    if(directory.getConnectorType() == ConnectorType.DISTRIBUTED){
+                        currentConnector = directory.lookup(identifier);
+                    }else{
+                        String connectorString = directory.lookupId(identifier);
+                        currentConnector = GenericConnectorFactory.newNodeConnector(connectorString);
+                        currentConnector.connect();
+                    }
+                } catch (RemoteException ex) {
+                    Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+                } catch (ConnectorException ex) {
+                    Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+                }
+            }
+            try {
+                Object object = currentConnector.write(msg).getPayload();
+                if (object == null) {
+                    throw new RuntimeException("Response was not correctly received");
+                }
+                String value = (String) ((ExecutionResults) object).getValue(commandId);
+                String type = String.valueOf(value.charAt(0));
+                String instanceId = value.substring(2);
+
+                switch (Integer.parseInt(type)) {
+                    case 0: {
+                        executor = new StatefulKnowledgeSessionGridClient(instanceId, currentConnector, messageSession);
+                        break;
+                    }
+                    default: {
+                    }
+                }
+
+            } catch (Exception e) {
+                throw new RuntimeException("Unable to execute message", e);
+            }
+        } //    public Map<String, Map<String, String>> getDirectoryMap(){
+        catch (ConnectorException ex) {
+            Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        return executor;
+    }
+//    public Map<String, Map<String, String>> getDirectoryMap(){
+//        Map<String, Map<String, String>> directoryMap = new HashMap<String,Map<String, String>>();
+//        for (DirectoryNodeService directory : gridClient.getDirectories()) {
+//            try {
+//                directoryMap.put(directory.getId(), directory.getDirectoryMap());
+//            } catch (RemoteException ex) {
+//                Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+//            }
+//
+//
+//        }
+//        return directoryMap;
+//
+//    }
+
+    public Map<String, String> getDirectoryMap() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DistributedConnectionNode.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DistributedConnectionNode.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DistributedConnectionNode.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,76 @@
+/*
+ *  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.grid.distributed;
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.ConnectorType;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.NodeConnectionType;
+
+/**
+ *
+ * @author salaboy 
+ */
+public class DistributedConnectionNode implements NodeConnectionType, Serializable {
+
+    private final Map<Class<?>, Object> services = new ConcurrentHashMap<Class<?>, Object>();
+    private GenericNodeConnector connector;
+    private GenericConnection connection;
+
+    public DistributedConnectionNode() {
+    }
+
+    public DistributedConnectionNode(GenericNodeConnector connector, GenericConnection connection) {
+
+        this.connector = connector;
+        this.connection = connection;
+
+    }
+
+    public void init() {
+        services.put(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderGridClient(connector, connection));
+        services.put(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderGridClient(connector, connection));
+        services.put(DirectoryLookupFactoryService.class, new DirectoryLookupProviderGridClient(connector, connection));
+    }
+
+    public Set<Class<?>> getServicesKeys() {
+        return services.keySet();
+    }
+
+    public <T> T getServiceImpl(Class<T> clazz) {
+        return (T) services.get(clazz);
+    }
+
+    public void setConnector(GenericNodeConnector connector) {
+        this.connector = connector;
+    }
+
+    public void setConnection(GenericConnection connection) {
+        this.connection = connection;
+    }
+
+    public ConnectorType getConnectorType() {
+        return ConnectorType.DISTRIBUTED;
+    }
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,135 @@
+package org.drools.grid.distributed;
+
+import org.drools.grid.DirectoryNodeService;
+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;
+import org.drools.grid.internal.NodeData;
+import org.drools.grid.internal.GenericIoWriter;
+import org.drools.grid.internal.GenericMessageHandler;
+import org.drools.grid.internal.Message;
+
+
+public class GenericMessageGridHandlerImpl implements GenericMessageHandler {
+    private SystemEventListener systemEventListener;
+
+    private NodeData  data;
+    private DirectoryNodeService directory;
+
+    public GenericMessageGridHandlerImpl(NodeData data,
+                                 SystemEventListener systemEventListener) {
+        this.systemEventListener = systemEventListener;
+        this.data = data;
+        
+//        Class[] classes = new Class[]{org.drools.grid.DirectoryNodeService.class};
+//        ServiceTemplate tmpl = new ServiceTemplate(null, classes,null);
+//
+//        LookupDiscoveryManager lookupDiscovery = null;
+//        try {
+//            lookupDiscovery = new LookupDiscoveryManager(LookupDiscoveryManager.ALL_GROUPS, null, null);
+//        } catch (IOException ex) {
+//            Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+//        }
+//
+//        System.out.println("Discovering Manager service ...");
+//
+//        ServiceDiscoveryManager serviceDiscovery =  null;
+//        try {
+//            serviceDiscovery = new ServiceDiscoveryManager(lookupDiscovery, new LeaseRenewalManager());
+//        } catch (IOException ex) {
+//            Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+//        }
+//
+//        /* Wait no more then 10 seconds to discover the service */
+//        ServiceItem item = null;
+//        try {
+//            try {
+//                item = serviceDiscovery.lookup(tmpl, null, 1000);
+//            } catch (RemoteException ex) {
+//                Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+//            }
+//        } catch (InterruptedException ex) {
+//            Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+//        }
+//        serviceDiscovery.terminate();
+//
+//        if(item != null) {
+//            System.out.println("Discovered Registry service");
+//            if(item.service instanceof DirectoryNodeService){
+//                registry = (DirectoryNodeService)item.service;
+//
+//            }
+//
+//
+//        } else {
+//            System.out.println("Registry service not discovered, make sure the"+
+//                               "service is deployed");
+//        }
+
+    }
+
+  
+
+    
+
+    
+    /* (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 );
+        //@TODO: replace with Environment ?? this needs to change..
+        localSessionContext.set("registry", directory);
+        
+        for ( GenericCommand cmd : commands ) {
+            // evaluate the commands
+            cmd.execute( localSessionContext );
+        }
+
+        if(localSessionContext.get("kbase") != null){
+            session.write( new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        localSessionContext.get("kbase") ), null );
+        
+        } else 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_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GridConnectionOLDDELETE.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GridConnectionOLDDELETE.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GridConnectionOLDDELETE.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,186 @@
+/*
+ *  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.grid.distributed;
+
+/**
+ *
+ * @author salaboy
+ */
+public class GridConnectionOLDDELETE {//implements GenericConnection {
+
+//    static {
+//        System.setSecurityManager(new RMISecurityManager() {
+//
+//            @Override
+//            public void checkPermission(Permission perm) {
+//            }
+//        });
+//
+//    }
+//    //Cached Services
+//    private List<GenericNodeConnector> nodeConnectors;
+//    //Cached Directories
+//    private List<DirectoryNodeService> directories;
+//
+//    public GridConnectionOLDDELETE() {
+//        this.nodeConnectors = new ArrayList<GenericNodeConnector>();
+//        this.directories = new ArrayList<DirectoryNodeService>();
+//    }
+//
+//    public void addNodeConnector(GenericNodeConnector service) {
+//
+//        this.nodeConnectors.add(service);
+//
+//    }
+//
+//    public void addDirectoryNode(DirectoryNodeService directory) {
+//        this.directories.add(directory);
+//    }
+//
+//    // In real scenarios this method will be in charge of populating
+//    // all the ExecutionNodeService and DirectoryServices
+//    public boolean connect() throws IOException, RemoteException, InterruptedException {
+//        Logger.getLogger("org.rioproject.associations").setLevel(Level.FINEST);
+//        AssociationDescriptor descriptorExecutionNode = AssociationDescriptor.create("ExecutionNodeService",
+//                "nodeConnectorsInj",
+//                org.drools.grid.ExecutionNodeService.class,
+//                DiscoveryGroupManagement.ALL_GROUPS);
+//        AssociationDescriptor descriptorDirectoryNode = AssociationDescriptor.create("DirectoryNodeService",
+//                "directoriesInj",
+//                org.drools.grid.DirectoryNodeService.class,
+//                DiscoveryGroupManagement.ALL_GROUPS);
+//        /*
+//         * Create and configure association management. Make sure to set
+//         * the backend, this is the object that has the setter method provided
+//         * above. For our case its "this".
+//         */
+//        AssociationMgmt aMgr = new AssociationMgmt();
+//        aMgr.setBackend(this);
+//        aMgr.addAssociationDescriptors(descriptorExecutionNode, descriptorDirectoryNode);
+//
+//
+//
+//        Iterable<org.drools.grid.ExecutionNodeService> executionNodes = aMgr.getAssociations("ExecutionNodeService", null)[0];
+//        for (ExecutionNodeService executionNodeService : executionNodes) {
+//            addNodeConnector(executionNodeService);
+//        }
+//
+//        Iterable<org.drools.grid.DirectoryNodeService> directoryNodes = aMgr.getAssociations("DirectoryNodeService", null)[0];
+//        for (DirectoryNodeService directoryNodeService : directoryNodes) {
+//            addDirectoryNode(directoryNodeService);
+//        }
+//
+//        long waited = 0;
+//        while (nodeConnectors.size() == 0 && waited < 30000) {
+//            Thread.sleep(500);
+//            waited += 500;
+//        }
+//
+//        if (nodeConnectors.size() > 0 && directories.size() > 0) {
+//            return true;
+//        }
+//
+//
+//
+//        return false;
+//    }
+//
+//    @Override
+//    public ExecutionNode getExecutionNode(NodeSelectionStrategy strategy) {
+//        ExecutionNode node = null;
+//        GenericNodeConnector currentNode = null;
+//        try {
+//
+//            //if the strategy is null use the default one
+//            if (strategy == null) {
+//                currentNode = getBestNode(new StaticIncrementalSelectionStrategy(this));
+//            } else {
+//                strategy.setConnection(this);
+//                currentNode = getBestNode(strategy);
+//            }
+//            if (currentNode.connect()) {
+//                node = new ExecutionNode();
+//                node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderGridClient(currentNode, this));
+//                node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderGridClient(currentNode, this));
+//                node.set(DirectoryLookupFactoryService.class, new DirectoryLookupProviderGridClient(currentNode, this));
+//            }
+//
+//        } catch (RemoteException ex) {
+//            Logger.getLogger(GridConnectionOLDDELETE.class.getName()).log(Level.SEVERE, null, ex);
+//        }
+//        return node;
+//    }
+//
+//    public GenericNodeConnector getBestNode(NodeSelectionStrategy nodeSelectionStrategy) {
+//        return nodeSelectionStrategy.getBestNode();
+//
+//
+//    }
+//
+//    public void setNodeConnectorsInj(Iterable<ExecutionNodeService> nodes) {
+//        for (ExecutionNodeService node : nodes) {
+//            addNodeConnector(node);
+//        }
+//
+//
+//    }
+//
+//    public void setDirectoriesInj(Iterable<DirectoryNodeService> nodes) {
+//        for (DirectoryNodeService node : nodes) {
+//            addDirectoryNode(node);
+//        }
+//
+//
+//    }
+//
+//    public List<DirectoryNodeService> getDirectories() {
+//        return (List<DirectoryNodeService>) directories;
+//
+//
+//    }
+//
+//    public void setDirectories(List<DirectoryNodeService> directories) {
+//        this.directories = directories;
+//
+//
+//    }
+//
+//    public List<GenericNodeConnector> getNodeConnectors() {
+//        return nodeConnectors;
+//
+//
+//    }
+//
+//    public void setNodeConnectors(List<GenericNodeConnector> services) {
+//        this.nodeConnectors = services;
+//
+//
+//    }
+//
+//    @Override
+//    public DirectoryNodeService getDirectoryNode(DirectoryServiceSelectionStrategy directorySelectionStrategy) {
+//        return ((List<DirectoryNodeService>) directories).get(0);
+//
+//
+//    }
+//
+//    @Override
+//    public ExecutionNode getExecutionNode() {
+//        return getExecutionNode(null);
+//
+//    }
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,203 @@
+package org.drools.grid.distributed;
+
+import org.drools.grid.ConnectorException;
+import org.drools.grid.DirectoryNodeService;
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+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.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.grid.GenericConnection;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.grid.internal.CollectionClient;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+import org.drools.grid.distributed.command.NewStatefulKnowledgeSessionGridCommand;
+
+public class KnowledgeBaseGridClient
+        implements
+        KnowledgeBase {
+
+    private GenericNodeConnector connector;
+    private MessageSession messageSession;
+    private String instanceId;
+    private GenericConnection connection;
+
+    public KnowledgeBaseGridClient(String instanceId,
+            GenericNodeConnector client, MessageSession messageSession, GenericConnection connection) {
+        this.instanceId = instanceId;
+
+        this.connector = client;
+        this.messageSession = messageSession;
+        this.connection = connection;
+    }
+
+    public void addKnowledgePackages(Collection<KnowledgePackage> kpackages) {
+        String kresultsId = "kresults_" + messageSession.getSessionId();
+
+        String kuilderInstanceId = ((CollectionClient<KnowledgePackage>) kpackages).getParentInstanceId();
+        Message msg = new Message(messageSession.getSessionId(),
+                messageSession.counter.incrementAndGet(),
+                false,
+                new KnowledgeContextResolveFromContextCommand(new KnowledgeBaseAddKnowledgePackagesCommand(),
+                kuilderInstanceId,
+                instanceId,
+                null,
+                kresultsId));
+
+        //I should register the kbase ID??
+        DirectoryNodeService directory = null;
+        try {
+            //get best directory????????/
+            directory = connection.getDirectoryNode(null);
+        } catch (ConnectorException ex) {
+            Logger.getLogger(KnowledgeBaseGridClient.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        if (directory != null) {
+            try {
+                try {
+                    directory.registerKBase(instanceId, connector.getId());
+                } catch (RemoteException ex) {
+                    Logger.getLogger(KnowledgeBaseGridClient.class.getName()).log(Level.SEVERE, null, ex);
+                }
+            } catch (ConnectorException ex) {
+                Logger.getLogger(KnowledgeBaseGridClient.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+
+
+        try {
+            Object object = connector.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_" + messageSession.getSessionId();
+
+        String localId = UUID.randomUUID().toString();
+
+        Message msg = new Message(messageSession.getSessionId(),
+                messageSession.counter.incrementAndGet(),
+                false,
+                new SetVariableCommand("__TEMP__",
+                localId,
+                new KnowledgeContextResolveFromContextCommand(new NewStatefulKnowledgeSessionGridCommand(null, instanceId),
+                null,
+                instanceId,
+                null,
+                kresultsId)));
+
+        try {
+            Object object = connector.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 StatefulKnowledgeSessionGridClient(localId,
+                connector, messageSession);
+    }
+
+    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_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,123 @@
+package org.drools.grid.distributed;
+
+
+import org.drools.grid.ExecutionNodeService;
+import java.util.Properties;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.SystemEventListenerFactory;
+
+import org.drools.command.FinishedCommand;
+import org.drools.command.NewKnowledgeBaseCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.grid.GenericConnection;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+
+
+public class KnowledgeBaseProviderGridClient
+    implements
+    KnowledgeBaseFactoryService {
+    
+    private GenericConnection connection;
+    private String localId = "";   
+    private GenericNodeConnector connector;
+    private MessageSession messageSession;
+    
+    public KnowledgeBaseProviderGridClient(GenericNodeConnector connector, GenericConnection connection) {
+        
+        this.connection = connection;
+        this.messageSession = new MessageSession();
+        this.connector = new RioNodeConnector("client 1", SystemEventListenerFactory.getSystemEventListener(), (ExecutionNodeService) connector);
+
+    }
+
+   
+    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);
+        if(localId == null || localId.equals("")){
+            localId = UUID.randomUUID().toString();
+        }
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new SetVariableCommand( "__TEMP__",
+                                                           localId,
+                                                           new NewKnowledgeBaseCommand( conf ) ) );
+        try {
+            Object object = connector.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 KnowledgeBaseGridClient( localId,
+                                              connector, messageSession, connection);
+
+    }
+
+    public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration() {
+    	// TODO: change this to use a remote implementation instead the local factory?
+        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;
+    }
+
+    public String getLocalId() {
+        return localId;
+    }
+
+    public void setLocalId(String localId) {
+        this.localId = localId;
+    }
+
+   
+    
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,147 @@
+package org.drools.grid.distributed;
+
+import org.drools.KnowledgeBase;
+
+import java.util.Collection;
+
+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.grid.internal.CollectionClient;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+
+
+public class KnowledgeBuilderGridClient
+    implements
+    KnowledgeBuilder {
+    //private GridExecutionNodeConnection nodeConnection;
+    private String                      instanceId;
+    private GenericNodeConnector     client;
+    private MessageSession              messageSession;
+    
+    public KnowledgeBuilderGridClient(String instanceId,
+                                        GenericNodeConnector client, MessageSession messageSession) {
+        this.instanceId = instanceId;
+        //this.nodeConnection = nodeConnection;
+        this.client = client;
+        this.messageSession = messageSession;
+
+        
+    }
+
+    public void add(Resource resource,
+                    ResourceType resourceType) {
+        add( resource,
+             resourceType,
+             null );
+    }
+
+    public void add(Resource resource,
+                    ResourceType resourceType,
+                    ResourceConfiguration configuration) {
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderAddCommand( resource,
+                                                                                                                  resourceType,
+                                                                                                                  configuration ),
+                                                                                  instanceId,
+                                                                                  null,
+                                                                                  null,
+                                                                                  null ) );
+
+        try {
+            Object object = 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_" + messageSession.getNextId();
+        String kresultsId = "kresults_" + messageSession.getSessionId();
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderGetErrorsCommand( commandId ),
+                                                                                  instanceId,
+                                                                                  null,
+                                                                                  null,
+                                                                                  kresultsId ) );
+
+        try {
+            Object object = 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_" + messageSession.getNextId();
+        String kresultsId = "kresults_" + messageSession.getSessionId();
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.getNextId(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderHasErrorsCommand( commandId ),
+                                                                                  instanceId,
+                                                                                  null,
+                                                                                  null,
+                                                                                  kresultsId ) );
+
+        try {
+            Object object = 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 );
+        }
+        
+        
+        
+    }
+
+    @Override
+    public KnowledgeBase newKnowledgeBase() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,99 @@
+/**
+ * 
+ */
+package org.drools.grid.distributed;
+
+
+import org.drools.grid.ExecutionNodeService;
+import java.util.Properties;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.SystemEventListenerFactory;
+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.grid.GenericConnection;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+
+
+public class KnowledgeBuilderProviderGridClient
+    implements
+    KnowledgeBuilderFactoryService {
+    
+    private MessageSession messageSession;
+    private GenericNodeConnector client;
+
+
+
+    public KnowledgeBuilderProviderGridClient(GenericNodeConnector connector, GenericConnection connection) {
+            this.messageSession = new MessageSession();
+            client = new RioNodeConnector("client 1", SystemEventListenerFactory.getSystemEventListener(), (ExecutionNodeService) connector);
+        
+    }
+
+    public DecisionTableConfiguration newDecisionTableConfiguration() {
+        // TODO Auto-generated method stub
+        return null; 
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder() {
+        String localId = UUID.randomUUID().toString();
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new SetVariableCommand( "__TEMP__",
+                                                           localId,
+                                                           new NewKnowledgeBuilderCommand( null ) ) );
+
+        try {
+            Object object = 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 KnowledgeBuilderGridClient( localId,
+                                                 client, messageSession );
+    }
+
+    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_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/RioNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/RioNodeConnector.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/RioNodeConnector.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,102 @@
+package org.drools.grid.distributed;
+
+import java.net.SocketAddress;
+import java.rmi.RemoteException;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.drools.SystemEventListener;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.NodeConnectionType;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageResponseHandler;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.GridConnection;
+
+public class RioNodeConnector
+        implements GenericNodeConnector {
+
+    protected final String name;
+    protected AtomicInteger counter;
+    protected ExecutionNodeService executionNode;
+    protected SocketAddress address;
+    protected SystemEventListener eventListener;
+
+    public RioNodeConnector(String name,
+            SystemEventListener eventListener) {
+        if (name == null) {
+            throw new IllegalArgumentException("Name can not be null");
+        }
+        this.name = name;
+        this.counter = new AtomicInteger();
+        this.eventListener = eventListener;
+
+    }
+
+    public RioNodeConnector(String name,
+            SystemEventListener eventListener,
+            ExecutionNodeService executionNode) {
+        if (name == null) {
+            throw new IllegalArgumentException("Name can not be null");
+        }
+        this.name = name;
+        this.counter = new AtomicInteger();
+        this.eventListener = eventListener;
+        this.executionNode = executionNode;
+
+
+    }
+
+    
+    public Message write(Message msg) throws ConnectorException, RemoteException {
+        if (executionNode != null) {
+
+
+            Message returnMessage = this.executionNode.write(msg);
+            return returnMessage;
+
+
+        }
+        throw new IllegalStateException("sessionService should not be null");
+    }
+
+    public void write(Message msg,
+            MessageResponseHandler responseHandler) {
+        throw new UnsupportedOperationException();
+    }
+
+    public String getId() throws ConnectorException, RemoteException {
+
+        return executionNode.getId();
+
+
+    }
+
+    public void setNodeService(Object object) {
+        this.executionNode = (ExecutionNodeService) object;
+
+
+    }
+
+    public void connect() throws ConnectorException {
+        //do nothing, here we use auto discover
+    }
+
+    public void disconnect() throws ConnectorException {
+        //I don't need to be disconected
+    }
+
+    public GenericConnection getConnection() throws ConnectorException {
+        return new GridConnection();
+    }
+
+    public NodeConnectionType getNodeConnectionType() throws ConnectorException {
+        return new DistributedConnectionNode();
+    }
+
+    public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+        return ConnectorType.DISTRIBUTED;
+    }
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,511 @@
+package org.drools.grid.distributed;
+
+
+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.FinishedCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.GetGlobalCommand;
+import org.drools.command.runtime.SetGlobalCommand;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+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.grid.distributed.command.GetWorkingMemoryEntryPointGridCommand;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+import org.drools.grid.internal.commands.RegisterRemoteWorkItemHandlerCommand;
+import org.drools.grid.remote.internal.commands.GetWorkItemManagerCommand;
+import org.drools.grid.remote.internal.commands.StartProcessRemoteCommand;
+import org.drools.time.SessionClock;
+
+
+public class StatefulKnowledgeSessionGridClient
+    implements
+    StatefulKnowledgeSession {
+
+    private GenericNodeConnector     connector;
+    private String                      instanceId;
+    private MessageSession              messageSession;
+    
+
+    
+
+    
+
+    public StatefulKnowledgeSessionGridClient(String instanceId, GenericNodeConnector connector, MessageSession messageSession) {
+        this.instanceId = instanceId;
+        this.connector = connector;
+        this.messageSession = messageSession;
+    }
+
+
+
+
+    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" + messageSession.getNextId();
+        String kresultsId = "kresults_" + messageSession.getSessionId();
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                  messageSession.getCounter().incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new FireAllRulesCommand( commandId ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+        try {
+            Object object = connector.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" + messageSession.getNextId();
+        String kresultsId = "kresults_" + messageSession.getSessionId();
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new ExecuteCommand( commandId,
+                                                                                                      command ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+
+        try {
+            Object object = connector.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) {
+         String commandId = "ksession.execute" + messageSession.getNextId();
+        String kresultsId = "kresults_" + messageSession.getSessionId();
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new GetGlobalCommand( identifier ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+
+        try {
+            Object result = connector.write( msg ).getPayload();
+            if ( result == null ) {
+                throw new RuntimeException( "Response was not correctly received = null" );
+            }
+
+           return result;
+
+
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+    }
+
+    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) {
+        String commandId = "ksession.execute" + messageSession.getNextId();
+        String kresultsId = "kresults_" + messageSession.getSessionId();
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new SetGlobalCommand( identifier,
+                                                                                                      object ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+
+        try {
+            Object result = connector.write( msg ).getPayload();
+            if ( result == null ) {
+                throw new RuntimeException( "Response was not correctly received = null" );
+            }
+
+            if ( !(result instanceof FinishedCommand)) {
+                throw new RuntimeException( "Response was not correctly received" );
+            }
+
+            
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+
+    }
+
+    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) {
+        String commandId = "ksession.execute" + messageSession.getNextId();
+        String kresultsId = "kresults_" + messageSession.getSessionId();
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new GetWorkingMemoryEntryPointGridCommand( name ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  name,
+                                                                                  kresultsId ) );
+
+        try {
+            Object object = connector.write( msg ).getPayload();
+            
+            if ( object == null ) {
+                throw new RuntimeException( "Response was not correctly received" );
+            }
+
+            return new WorkingMemoryEntryPointGridClient(name, connector, messageSession);
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+        
+    }
+
+    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_" + messageSession.getSessionId();
+         Message msg = new Message( messageSession.getSessionId(),
+                                    messageSession.counter.incrementAndGet(),
+                                    true,
+                                    new KnowledgeContextResolveFromContextCommand( new GetWorkItemManagerCommand(),
+                                                                                   null,
+                                                                                   null,
+                                                                                   instanceId,
+                                                                                   kresultsId ) );
+         try {
+             Object payload = connector.write( msg ).getPayload();
+             WorkItemManager workItemManager = (WorkItemManager) ((ExecutionResults) payload).getValue( "workItemManager" );
+             ((WorkItemManagerGridClient)workItemManager).setClient(connector);
+             ((WorkItemManagerGridClient)workItemManager).setMessageSession(messageSession);
+             ((WorkItemManagerGridClient)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_" + messageSession.getSessionId();
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new RegisterRemoteWorkItemHandlerCommand(name, workItemHandler ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+
+        try {
+            connector.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" + messageSession.getNextId();
+        String kresultsId = "kresults_" + messageSession.getSessionId();
+
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new StartProcessRemoteCommand( processId ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+
+        try {
+            Object object = connector.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_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,69 @@
+package org.drools.grid.distributed;
+
+
+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.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+
+
+/**
+ *
+ * @author Lucas Amador
+ * @author salaboy: salaboy at gmail.com
+ */
+public class WorkItemManagerGridClient implements WorkItemManager, Serializable {
+
+	private static final long serialVersionUID = 1L;
+	
+	//private GridExecutionNodeConnection nodeConnection;
+        private GenericNodeConnector client;
+        private MessageSession messageSession;
+	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_" + messageSession.getSessionId();
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   true,
+                                   new KnowledgeContextResolveFromContextCommand( new CompleteWorkItemCommand(id, results),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+        try {
+            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 setClient(GenericNodeConnector client) {
+            this.client = client;
+        }
+
+        public void setMessageSession(MessageSession messageSession) {
+            this.messageSession = messageSession;
+        }
+
+	
+
+	public void setInstanceId(String instanceId) {
+		this.instanceId = instanceId;
+	}
+
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkingMemoryEntryPointGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkingMemoryEntryPointGridClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkingMemoryEntryPointGridClient.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,128 @@
+/*
+ *  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.grid.distributed;
+
+import java.util.Collection;
+import org.drools.FactException;
+import org.drools.FactHandle;
+import org.drools.WorkingMemoryEntryPoint;
+import org.drools.command.ExecuteCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.rule.InsertObjectCommand;
+import org.drools.command.runtime.rule.InsertObjectInEntryPointCommand;
+import org.drools.common.DisconnectedFactHandle;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.ObjectFilter;
+
+/**
+ *
+ * @author salaboy
+ */
+public class WorkingMemoryEntryPointGridClient implements WorkingMemoryEntryPoint{
+
+     private GenericNodeConnector     client;
+    private MessageSession              messageSession;
+    private String                      instanceId;
+
+    public WorkingMemoryEntryPointGridClient(String instanceId, GenericNodeConnector client, MessageSession messageSession) {
+        this.client = client;
+        this.messageSession = messageSession;
+        this.instanceId = instanceId;
+    }
+
+
+
+    public FactHandle insert(Object object) throws FactException {
+         String commandId = "ksession.insert" + messageSession.getNextId();
+        String kresultsId = "kresults_" + messageSession.getSessionId();
+        Message msg = new Message( messageSession.getSessionId(),
+                                   messageSession.counter.incrementAndGet(),
+                                   false,
+                                   new KnowledgeContextResolveFromContextCommand( new InsertObjectInEntryPointCommand(object, String.valueOf(object.hashCode()) ),
+                                                                                  null,
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+
+        try {
+            Object result = client.write( msg ).getPayload();
+            if ( object == null ) {
+                throw new RuntimeException( "Response was not correctly received" );
+            }
+            FactHandle handle = new DisconnectedFactHandle(((ExecutionResults) result).getFactHandle( String.valueOf(object.hashCode()) ).toString()) ;
+            
+            return  handle;
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+    }
+
+    public FactHandle insert(Object object, boolean dynamic) throws FactException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void retract(org.drools.runtime.rule.FactHandle handle) throws FactException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void update(org.drools.runtime.rule.FactHandle handle, Object object) throws FactException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public WorkingMemoryEntryPoint getWorkingMemoryEntryPoint(String name) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public String getEntryPointId() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public org.drools.runtime.rule.FactHandle getFactHandle(Object object) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Object getObject(org.drools.runtime.rule.FactHandle factHandle) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<Object> getObjects() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<Object> getObjects(ObjectFilter filter) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public <T extends org.drools.runtime.rule.FactHandle> Collection<T> getFactHandles() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public <T extends org.drools.runtime.rule.FactHandle> Collection<T> getFactHandles(ObjectFilter filter) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public long getFactCount() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/GetWorkingMemoryEntryPointGridCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/GetWorkingMemoryEntryPointGridCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/GetWorkingMemoryEntryPointGridCommand.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,54 @@
+/*
+ *  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.grid.distributed.command;
+
+/**
+ *
+ * @author salaboy
+ */
+
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+
+public class GetWorkingMemoryEntryPointGridCommand
+    implements
+    GenericCommand<WorkingMemoryEntryPoint> {
+
+    private String name;
+
+    public GetWorkingMemoryEntryPointGridCommand(String name) {
+        this.name = name;
+    }
+
+    public WorkingMemoryEntryPoint execute(Context context) {
+        StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
+        WorkingMemoryEntryPoint ep = ksession.getWorkingMemoryEntryPoint( name );
+        
+        context.getContextManager().getDefaultContext().set(name, ep); //setWorkingMemoryEntryPoint( ep );
+        //((KnowledgeCommandContext) context.getContextManager() ).set(name, ep);
+        return ep;
+    }
+
+    public String toString() {
+        return "session.getWorkingMemoryEntryPoint( " + name + " );";
+    }
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,67 @@
+package org.drools.grid.distributed.command;
+
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.KnowledgeBase;
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.grid.ConnectorException;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.DirectoryNodeService;
+
+
+public class NewStatefulKnowledgeSessionGridCommand
+    implements
+    GenericCommand<StatefulKnowledgeSession> {
+
+    private KnowledgeSessionConfiguration ksessionConf;
+    private String kbaseId;
+    
+    public NewStatefulKnowledgeSessionGridCommand(KnowledgeSessionConfiguration ksessionConf) {
+        this.ksessionConf = ksessionConf;
+    }
+
+    public NewStatefulKnowledgeSessionGridCommand(KnowledgeSessionConfiguration ksessionConf, String kbaseId) {
+        this.ksessionConf = ksessionConf;
+        this.kbaseId = kbaseId;
+    }
+    
+
+    public StatefulKnowledgeSession execute(Context context) {
+
+        KnowledgeBase kbase = ((KnowledgeCommandContext) context).getKnowledgeBase();
+        DirectoryNodeService registry = (DirectoryNodeService)context.get("registry");
+//        System.out.println("Inside Grid Command!!!!!!!!");
+//        System.out.println("Registry = "+registry);
+//        System.out.println("KbaseId = "+kbaseId);
+        StatefulKnowledgeSession ksession;
+
+        if( kbase == null){
+                
+                try {
+                    //@TODO: need to find the best way to injec the service in the command or the command executor.
+                    //lookup in the registry service.
+                    kbase = registry.lookupKBase(kbaseId);
+                } catch (RemoteException ex) {
+                    Logger.getLogger(NewStatefulKnowledgeSessionGridCommand.class.getName()).log(Level.SEVERE, null, ex);
+
+                } catch (ConnectorException ex) {
+                    Logger.getLogger(NewStatefulKnowledgeSessionGridCommand.class.getName()).log(Level.SEVERE, null, ex);
+                }
+           
+        }
+        if ( this.ksessionConf == null ) {
+            System.out.println("Kbase inside the newStatefull Session = "+kbase);
+            ksession = kbase.newStatefulKnowledgeSession();
+            
+        } else {
+            ksession = kbase.newStatefulKnowledgeSession( this.ksessionConf, null );
+        }
+
+        return ksession;
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/distributed/AppTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/distributed/AppTest.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/distributed/AppTest.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,38 @@
+package org.drools.distributed;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * Create the test case
+     *
+     * @param testName name of the test case
+     */
+    public AppTest( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite()
+    {
+        return new TestSuite( AppTest.class );
+    }
+
+    /**
+     * Rigourous Test :-)
+     */
+    public void testApp()
+    {
+        assertTrue( true );
+    }
+}


Property changes on: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio
___________________________________________________________________
Name: svn:ignore
   + target


Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/pom.xml	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,165 @@
+<?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-grid</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.1.0.SNAPSHOT</version>
+  </parent>
+  <artifactId>drools-grid-distributed-rio</artifactId>
+  
+  <name>Drools :: Grid :: Distributed Node :: Rio</name>
+  <packaging>oar</packaging>
+
+  <dependencies>
+
+      <!-- Drools Runtime -->
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-api</artifactId>
+
+        </dependency>
+
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-core</artifactId>
+
+        </dependency>
+
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-compiler</artifactId>
+
+        </dependency>
+
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-grid-api</artifactId>
+      <version>5.1.0.SNAPSHOT</version>
+    </dependency>
+
+     <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-grid-distributed-api</artifactId>
+      <version>5.1.0.SNAPSHOT</version>
+    </dependency>
+
+     <!-- RIO Runtime -->
+         <dependency>
+            <groupId>org.rioproject</groupId>
+            <artifactId>rio</artifactId>
+            <version>4.1-SNAPSHOT</version>
+        </dependency>
+
+        <!-- RIO Test framework -->
+        <dependency>
+            <groupId>org.rioproject</groupId>
+            <artifactId>rio-test</artifactId>
+            <version>4.1-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- RIO Gnostic -->
+        <dependency>
+            <groupId>org.rioproject</groupId>
+            <artifactId>gnostic</artifactId>
+            <version>4.1-SNAPSHOT</version>
+
+        </dependency>
+
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>net.jini</groupId>
+      <artifactId>jsk-lib</artifactId>
+      <version>2.1</version>
+      <type>jar</type>
+    </dependency>
+  </dependencies>
+  <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-rio-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <opstring>src/main/resources/org/drools/executionNodeService.groovy</opstring>
+                    <createJar>
+                        <classifier>dl</classifier>
+                        <ins>
+                            <in>org.drools.grid</in>
+                            <!--in>org.rioproject.gnostic</in-->
+                        </ins>
+                        <topclasses>
+                            <topclass>org.drools.grid.ExecutionNodeService</topclass>
+                            <!--topclass>org.drools.grid.generic.DirectoryNodeService</topclass-->
+                            <topclass>org.drools.grid.distributed.RioNodeConnector</topclass>
+                            <topclass>org.drools.grid.distributed.util.IDEntry</topclass>
+                            <topclass>org.drools.grid.distributed.command.NewStatefulKnowledgeSessionGridCommand</topclass>
+                            <topclass>org.drools.impl.SystemEventListenerServiceImpl</topclass>
+                            <!--topclass>org.rioproject.gnostic.Gnostic</topclass-->
+                        </topclasses>
+                    </createJar>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.6</source>
+                    <target>1.6</target>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>**/*IT*.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>failsafe-maven-plugin</artifactId>
+                <version>2.4.3-alpha-1</version>
+                <configuration>
+                    <forkMode>always</forkMode>
+                    <argLine>-DRIO_TEST_ATTACH</argLine>
+                    <systemProperties>
+
+                        <property>
+                            <name>opstring</name>
+                            <value>src/main/resources/org/drools/executionNodeService.groovy</value>
+                        </property>
+                        <property>
+                            <name>org.rioproject.test.config</name>
+                            <value>src/test/conf/test-config.groovy</value>
+                        </property>
+
+                        <property>
+                            <name>org.rioproject.test.manager.config</name>
+                            <value>src/test/conf/manager-config.groovy</value>
+                        </property>
+                    </systemProperties>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>integration-test</goal>
+                            <goal>verify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+
+
+</project>

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,168 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.grid.distributed.impl;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.drools.KnowledgeBase;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.GetKnowledgeBaseCommand;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.internal.Message;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.GenericNodeConnector;
+
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryNodeServiceImpl implements DirectoryNodeService{
+
+    private String id;
+
+    private Map<String, String> directoryMap = new HashMap<String, String>();
+
+    private Map<String, String> kbaseDirectoryMap = new HashMap<String, String>();
+
+    private Iterable<ExecutionNodeService> executionNodes;
+
+    public DirectoryNodeServiceImpl() {
+        executionNodes = new ArrayList<ExecutionNodeService>();
+        this.id = "Distributed:Directory";
+    }
+
+    
+    @Override
+    public String getId() {
+        return id;
+    }
+    
+    
+    @Override
+    public void register(String sessionId, String nodeServiceId) throws ConnectorException, RemoteException  {
+        //System.out.println("Registering: "+  sessionId + " -- "+nodeServiceId);
+        directoryMap.put(sessionId, nodeServiceId);
+        for(ExecutionNodeService node : executionNodes){
+            if(node.getId().equals(nodeServiceId)){
+                node.incrementKsessionCounter();
+            }
+        }
+    }
+
+    
+    @Override
+    public GenericNodeConnector lookup(String sessionId) throws ConnectorException, RemoteException {
+        ExecutionNodeService nodeService = null;
+        String sessionServiceId = (String)directoryMap.get(sessionId);
+        //System.out.println("Registry = "+ directoryMap.toString());
+        //System.out.println("Nodes Services = "+nodeServices);
+        for(ExecutionNodeService ss : executionNodes){
+            //System.out.println("Session Service id = "+ss.getId() + "needs to match with ="+sessionServiceId);
+            if(ss.getId().equals(sessionServiceId)){
+                nodeService = ss;
+            }
+        }     
+
+        return nodeService;
+    }
+
+
+    public void setExecutionNodes(Iterable<ExecutionNodeService> executionNodes) {
+        this.executionNodes = executionNodes;
+    }
+
+    @Override
+    public void registerKBase(String kbaseId, String nodeServiceId) throws ConnectorException {
+        //System.out.println("Registering KnowledgeBase = "+kbaseId +" -in NS=" +nodeServiceId);
+        kbaseDirectoryMap.put(kbaseId, nodeServiceId);
+    }
+
+    @Override
+    public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException, RemoteException{
+        ExecutionNodeService executionNode = null;
+        String nodeServiceId = (String)kbaseDirectoryMap.get(kbaseId);
+        //System.out.println("Kbase Registry = "+ kbaseDirectoryMap.toString());
+        //System.out.println("Session Services = "+nodeService);
+        for(ExecutionNodeService ns : executionNodes){
+            //System.out.println("Node Service id = "+ns.getId() + "needs to match with ="+nodeServiceId);
+            if(ns.getId().equals(nodeServiceId)){
+                executionNode = ns;
+            }
+        }
+        //System.out.println("Node Service = "+nodeService);
+        
+        try {
+            //@TODO: This is a bad hack.. I need to improve this a lot
+            Message msg = executionNode.write(new Message(999,1000,false, new KnowledgeContextResolveFromContextCommand( new GetKnowledgeBaseCommand(), null, kbaseId, null, null)));
+            //System.out.println("MSG returned by nodeService = "+msg);
+            if (msg.getPayload() instanceof KnowledgeBase) {
+                //System.out.println("Kbase in the payload: "+(KnowledgeBase)msg.getPayload());
+                return (KnowledgeBase)msg.getPayload();
+            }
+            return null;
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message",
+                                        e );
+        }
+    }
+
+   
+
+    @Override
+    public Map<String, String> getDirectoryMap()  throws ConnectorException{
+        return directoryMap;
+    }
+
+    @Override
+    public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public String lookupId(String resourceId) throws ConnectorException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void dispose() throws ConnectorException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void connect() throws ConnectorException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void disconnect() throws ConnectorException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public DirectoryNodeService getDirectoryNodeService() throws ConnectorException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public GenericConnection getConnection() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+        return ConnectorType.DISTRIBUTED;
+    }
+
+
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,181 @@
+/*
+ *  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.grid.distributed.impl;
+
+import java.rmi.RemoteException;
+import java.util.UUID;
+
+import org.drools.SystemEventListener;
+import org.drools.SystemEventListenerFactory;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.NodeConnectionType;
+import org.drools.grid.internal.BlockingGenericIoWriter;
+import org.drools.grid.internal.GenericMessageHandler;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageResponseHandler;
+import org.drools.grid.internal.NodeData;
+import org.drools.grid.distributed.GenericMessageGridHandlerImpl;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.GridConnection;
+import org.drools.grid.distributed.DistributedConnectionNode;
+import org.drools.grid.distributed.util.IDEntry;
+
+import org.rioproject.core.jsb.ServiceBeanContext;
+import org.rioproject.watch.CounterWatch;
+import org.rioproject.watch.GaugeWatch;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ExecutionNodeServiceImpl implements ExecutionNodeService {
+
+    private GenericMessageHandler handler;
+    private String id;
+    private GaugeWatch loadWatch;
+    private CounterWatch ksessionCounter;
+    private Long instanceID;
+
+    public ExecutionNodeServiceImpl() {
+        this.id = "Distributed:Node:"+UUID.randomUUID().toString();
+        handler = new GenericMessageGridHandlerImpl(new NodeData(), SystemEventListenerFactory.getSystemEventListener());
+    }
+
+    public ExecutionNodeServiceImpl(NodeData data,
+            SystemEventListener systemEventListener) {
+        handler = new GenericMessageGridHandlerImpl(data, systemEventListener); 
+    }
+
+    @Override
+    public Message write(Message msg)  {
+        BlockingGenericIoWriter blockingWriter = new BlockingGenericIoWriter();
+        try {
+            handler.messageReceived(blockingWriter, msg);
+        } catch (Exception e) {
+            
+            //throw new RemoteException(e.getMessage());
+        }
+
+        return blockingWriter.getMessage();
+    }
+
+    public GenericMessageHandler getGenericMessageHandler() {
+        return this.handler;
+    }
+
+    @Override
+    public void write(Message msg,
+            MessageResponseHandler responseHandler) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void setServiceBeanContext(ServiceBeanContext context) {
+        context.addAttribute(new IDEntry(this.id));
+        loadWatch = new GaugeWatch("load");
+        ksessionCounter = new CounterWatch("ksessionCounter");
+        context.getWatchRegistry().register(loadWatch);
+        context.getWatchRegistry().register(ksessionCounter);
+        instanceID = context.getServiceBeanConfig().getInstanceID();
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+   
+
+
+    @Override
+    public double getLoad()  {
+        return loadWatch.getLastCalculableValue();
+    }
+
+    
+    @Override
+    public void setLoad(double load)  {
+        double last = loadWatch.getLastCalculableValue();
+        loadWatch.addValue(load);
+        boolean verified = loadWatch.getLastCalculableValue() == load;
+        if (!verified)
+            System.err.println(System.currentTimeMillis() + " "+
+                "---> ["+instanceID+"] was [" + loadWatch.getLastCalculableValue() +
+                "], SET FAILED [" + load + "] " +
+                "breached=" +
+                loadWatch.getThresholdManager().getThresholdCrossed());
+        else
+            System.err.println(System.currentTimeMillis() + " "+
+                "---> ["+instanceID+"] Load now [" + load + "] " +
+                "breached=" +
+                loadWatch.getThresholdManager().getThresholdCrossed());
+    }
+
+
+    @Override
+    public double getKsessionCounter() {
+        return ksessionCounter.getLastCalculableValue();
+    }
+
+
+    @Override
+    public void incrementKsessionCounter() {
+        double last = ksessionCounter.getLastCalculableValue();
+        ksessionCounter.increment();
+
+            System.err.println(System.currentTimeMillis() + " "+
+                "---> ["+instanceID+"] was [" + ksessionCounter.getLastCalculableValue() +
+                "], " +
+                "breached=" +
+                ksessionCounter.getThresholdManager().getThresholdCrossed());
+
+    }
+
+    @Override
+    public void connect() throws ConnectorException {
+        // do nothing
+    }
+
+    @Override
+    public void disconnect() throws ConnectorException {
+       // do nothing
+    }
+
+    @Override
+    public GenericConnection getConnection()  throws ConnectorException  {
+        return new GridConnection();
+    }
+
+    @Override
+    public NodeConnectionType getNodeConnectionType()  throws ConnectorException  {
+        return new DistributedConnectionNode();
+    }
+
+    @Override
+    public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+        return ConnectorType.DISTRIBUTED;
+    }
+
+
+
+  
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/strategies/GetMinimalKsessionNodes.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/strategies/GetMinimalKsessionNodes.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/strategies/GetMinimalKsessionNodes.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,60 @@
+/*
+ *  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.grid.distributed.strategies;
+
+import java.rmi.RemoteException;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.strategies.NodeSelectionStrategy;
+
+/**
+ *
+ * @author salaboy
+ */
+public class GetMinimalKsessionNodes implements NodeSelectionStrategy {
+
+
+
+    public GenericNodeConnector getBestNode(List<GenericNodeConnector> connectors) {
+         Double min = null;
+        GenericNodeConnector selectedConnector = null;
+        for (GenericNodeConnector nodeConnector : connectors) {
+            try {
+                Double currentCounter = null;
+                currentCounter = ((ExecutionNodeService) nodeConnector).getKsessionCounter();
+                if (min == null) {
+                    min = currentCounter;
+                    selectedConnector = nodeConnector;
+                }
+                if (min > currentCounter) {
+                    min = currentCounter;
+                    selectedConnector = nodeConnector;
+                }
+            } catch (ConnectorException ex) {
+                Logger.getLogger(GetMinimalKsessionNodes.class.getName()).log(Level.SEVERE, null, ex);
+            }
+
+        }
+        
+        return selectedConnector;
+    }
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,22 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.grid.distributed.util;
+
+/**
+ *
+ * @author salaboy
+ */
+public class IDEntry extends net.jini.entry.AbstractEntry{
+    public String id;
+
+   public IDEntry() {
+       super();
+   }
+
+   public IDEntry(String id) {
+       this. id = id;
+   }
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/RioResourceLocator.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/RioResourceLocator.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/RioResourceLocator.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,52 @@
+/*
+ *  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.grid.distributed.util;
+
+import java.io.IOException;
+
+import net.jini.core.lookup.ServiceItem;
+import net.jini.core.lookup.ServiceTemplate;
+import net.jini.discovery.LookupDiscoveryManager;
+import net.jini.lease.LeaseRenewalManager;
+import net.jini.lookup.ServiceDiscoveryManager;
+import org.drools.grid.ExecutionNodeService;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RioResourceLocator {
+    public static ExecutionNodeService locateResource(String id) throws IOException, InterruptedException{
+        IDEntry[] ids = new IDEntry[]{new IDEntry(id)};
+        Class[] classes = new Class[]{ExecutionNodeService.class};
+        ServiceTemplate tmpl = new ServiceTemplate(null, classes, ids);
+        LookupDiscoveryManager ldm =
+                new LookupDiscoveryManager(LookupDiscoveryManager.ALL_GROUPS,
+                null,
+                null);
+        System.out.println("Discovering ExecutionNodeService service ..."+id);
+        ServiceDiscoveryManager sdm =
+                new ServiceDiscoveryManager(ldm, new LeaseRenewalManager());
+        /* Wait no more then 10 seconds to discover the service */
+        ServiceItem item = sdm.lookup(tmpl, null, 10000);
+
+        ExecutionNodeService executionNode = (ExecutionNodeService) item.service;
+        
+        return executionNode;
+    }
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/drools/executionNodeService.groovy (from rev 33555, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-rio/src/main/resources/org/drools/executionNodeService.groovy)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/drools/executionNodeService.groovy	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/drools/executionNodeService.groovy	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,80 @@
+import org.rioproject.config.Constants
+import java.util.logging.Level
+
+import org.rioproject.resources.servicecore.Service
+
+deployment(name:'executionNodeService',  debug: 'true') {
+
+    logging {
+        logger 'org.rioproject.resolver', Level.ALL
+        logger 'org.rioproject.associsations' , Level.ALL
+    }
+    /* Configuration for the discovery group that the service should join.
+     * This first checks if the org.rioproject.groups property is set, if not
+     * the user name is used */
+    groups System.getProperty(Constants.GROUPS_PROPERTY_NAME,
+                              System.getProperty('user.name'))
+
+    /* Declares the artifacts required for deployment. Note the 'dl'
+     * classifier used for the 'download' jar */
+    artifact id:'service', 'org.drools:drools-grid-distributed-rio:5.1.0.SNAPSHOT'
+    artifact id:'service-dl', 'org.drools:drools-grid-distributed-rio:dl:5.1.0.SNAPSHOT'
+
+    /*
+     * Declare the service to be deployed. The number of instances deployed
+     * defaults to 1. If you require > 1 instances change as needed
+     */
+    service(name: 'ExecutionNodeService') {
+        interfaces {
+            classes 'org.drools.grid.ExecutionNodeService'
+            artifact ref:'service-dl'
+        }
+        implementation(class:'org.drools.grid.distributed.impl.ExecutionNodeServiceImpl') {
+            artifact ref:'service'
+        }
+        /*sla(id:'load', low:10, high: 30) {
+            rule resource: 'ScalingRuleHandler', max:5
+        }*/
+//        sla(id:'ksessionCounter', low:1, high: 4) {
+//            rule resource: 'ScalingRuleHandlerCounter', max:5
+//        }
+        maintain 2
+    }
+//    service(name: 'DirectoryNodeService') {
+//        interfaces {
+//            classes 'org.drools.grid.DirectoryNodeService'
+//            artifact ref:'service-dl'
+//        }
+//        implementation(class:'org.drools.grid.distributed.impl.DirectoryNodeServiceImpl') {
+//            artifact ref:'service'
+//        }
+//
+//        association (name:'ExecutionNodeService', type:'uses', property:'nodeServices')
+//
+//        maintain 1
+//    }
+
+//    service(name: 'Gnostic') {
+//        interfaces {
+//            classes 'org.rioproject.gnostic.Gnostic'
+//            artifact ref: 'service-dl'
+//        }
+//        implementation(class: 'org.rioproject.gnostic.GnosticImpl') {
+//            artifact ref: 'service'
+//        }
+//
+//        parameters {
+//            parameter name: "create-core-associations", value: "yes"
+//        }
+//
+//        associations {
+//            ['ExecutionNodeService'].each {
+//                association name: "$it",
+//                            type: 'uses', property: 'service',
+//                            serviceType: Service.name
+//            }
+//        }
+//        maintain 1
+//    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/manager-config.groovy
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/manager-config.groovy	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/manager-config.groovy	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,53 @@
+/*
+ * Copyright to the original author or authors.
+ *
+ * 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.
+ */
+
+import org.rioproject.config.Constants
+
+/*
+* Configuration properties for the Gnostic
+*/
+manager {
+    execClassPath =
+        '${RIO_HOME}${/}lib${/}boot.jar${:}${RIO_HOME}${/}lib/${/}start.jar${:}${JAVA_HOME}${/}lib${/}tools.jar${:}${RIO_HOME}${/}lib${/}groovy-all.jar'
+
+    inheritOptions = true
+
+    jvmOptions = '''
+        -XX:+UseConcMarkSweepGC -XX:+AggressiveOpts
+        -Djava.security.policy=${RIO_HOME}${/}policy${/}policy.all
+        -DRIO_HOME=${RIO_HOME} -Dorg.rioproject.groups=${org.rioproject.groups}'''
+
+    mainClass = 'com.sun.jini.start.ServiceStarter'
+
+    /* The ${service} token will be replaced by the name of the starter file.
+     * For start-reggie the service name will be reggie, for start-monitor the
+     * service name will be monitor, etc ... */
+    String logExt = System.getProperty(Constants.GROUPS_PROPERTY_NAME,
+                                       System.getProperty('user.name'))
+    String logDir = '/tmp/logs/rio/'
+    String opSys = System.getProperty('os.name')
+    if(opSys.startsWith("Windows"))
+        logDir = '${java.io.tmpdir}/logs/rio/'
+    log = logDir + logExt + '/${service}.log'
+
+    /*
+    * Remove any previously created service log files
+    */
+    cleanLogs = true
+
+    monitorStarter = '${user.dir}${/}src${/}test${/}conf${/}start-monitor.groovy'
+    cybernodeStarter = '${RIO_HOME}/config/start-cybernode.groovy'
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/start-monitor.groovy
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/start-monitor.groovy	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/start-monitor.groovy	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,38 @@
+/*
+ * This configuration is used by the com.sun.jini.start utility to start a
+ * ProvisionMonitor, including an embedded Webster
+ */
+
+import org.rioproject.config.Component
+
+import org.rioproject.boot.ServiceDescriptorUtil;
+import com.sun.jini.start.ServiceDescriptor;
+
+ at Component('com.sun.jini.start')
+class StartMonitorConfig {
+
+    ServiceDescriptor[] getServiceDescriptors() {
+        String m2Home = "${System.getProperty("user.home")}/.m2"
+        String rioHome = System.getProperty('RIO_HOME')
+        String cwd = System.getProperty('user.dir')
+        println "\n********\n$cwd\n********"
+        
+        def websterRoots = [rioHome+'/lib-dl', ';',
+                            rioHome+'/lib',     ';',
+                            m2Home+'/repository', ';',
+                            cwd+'/target/']
+
+        String policyFile = rioHome+'/policy/policy.all'
+        String monitorConfig = rioHome+'/config/monitor.groovy'
+        String reggieConfig = rioHome+'/config/reggie.groovy'
+
+        def serviceDescriptors = [
+            ServiceDescriptorUtil.getWebster(policyFile, '0', (String[])websterRoots),
+            ServiceDescriptorUtil.getLookup(policyFile, reggieConfig),
+            ServiceDescriptorUtil.getMonitor(policyFile, monitorConfig)
+        ]
+
+        return (ServiceDescriptor[])serviceDescriptors
+    }
+
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/test-config.groovy
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/test-config.groovy	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/test-config.groovy	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,13 @@
+/*
+ * Configuration file for integration test cases
+ */
+ITGridExecutionTest {
+    groups = "ITGridExecutionTest"
+    numCybernodes = 1
+    numMonitors = 1
+    //numLookups = 1
+    opstring = 'src/main/resources/org/drools/executionNodeService.groovy'
+    autoDeploy = true
+    //harvest = true
+}
+

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,340 @@
+/*
+ *  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.grid.distributed;
+
+
+import java.rmi.RemoteException;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ExecutionNode;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.builder.ResourceType;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.grid.GridConnection;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.strategies.StaticIncrementalSelectionStrategy;
+import org.drools.runtime.ExecutionResults;
+import org.junit.Assert;
+import org.junit.Test;
+/**
+ *
+ * @author salaboy
+ */
+
+public abstract class ExecutionNodeBaseTest {
+
+    protected ExecutionNode node;
+    protected GridConnection connection = new GridConnection();
+    public ExecutionNodeBaseTest() {
+        
+    }
+
+
+    @Test
+    public void fireAllRules(){
+        StaticIncrementalSelectionStrategy.counter = 0;
+        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";
+
+        Assert.assertNotNull(node);
+         
+        KnowledgeBuilder kbuilder = 
+                node.get(KnowledgeBuilderFactoryService.class)
+                 .newKnowledgeBuilder();
+        Assert.assertNotNull(kbuilder);
+
+        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 );
+
+
+    }
+
+     @Test
+    public void testExecute() throws Exception {
+         StaticIncrementalSelectionStrategy.counter = 0;
+        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";
+
+        Assert.assertNotNull(node);
+
+        KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+        Assert.assertNotNull(kbuilder);
+        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();
+
+        ExecutionResults results = ksession.execute( new FireAllRulesCommand( "fired" ) );
+
+        Assert.assertEquals( 2,
+                      (int) (Integer) results.getValue( "fired" ) );
+    }
+//
+    @Test
+    public void testVsmPipeline() throws Exception {
+        StaticIncrementalSelectionStrategy.counter = 0;
+        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( \"hello3!!!\" ); \n";
+        str += "end \n";
+        str += "rule rule2 \n";
+        str += "    dialect \"java\" \n";
+        str += "when \n";
+        str += "then \n";
+        str += "    System.out.println( \"hello4!!!\" ); \n";
+        str += "end \n";
+
+        Assert.assertNotNull(node);
+
+        KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+        Assert.assertNotNull(kbuilder);
+
+        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();
+
+        node.get(DirectoryLookupFactoryService.class).register( "ksession1", ksession );
+
+        ExecutionResults results = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+        Assert.assertEquals( 2, (int ) ( Integer) results.getValue( "fired" ) );
+    }
+//
+    @Test
+    public void testNamedService() throws Exception {
+        StaticIncrementalSelectionStrategy.counter = 1;
+        System.out.println("Running ===============> testNamedService");
+        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();
+        Assert.assertNotNull(kbuilder);
+
+        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();
+        System.out.println("registering a session!!!!!!!");
+        node.get(DirectoryLookupFactoryService.class).register( "ksession1",
+                              ksession );
+        System.out.println("Lookup ksession1!!!!!!!!!!!!!");
+        ExecutionResults results = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+        Assert.assertEquals( 2,
+                     (int) (Integer) results.getValue( "fired" ) );
+        System.out.println("TEst ENDED =========>");
+    }
+   @Test
+    public void twoSessionsIntoDifferentSessionServices() throws RemoteException, ConnectorException{
+        StaticIncrementalSelectionStrategy.counter = 0;
+        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();
+        Assert.assertNotNull(kbuilder);
+
+        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 ksession1 = kbase.newStatefulKnowledgeSession();
+        System.out.println("registering ksession1!");
+        node.get(DirectoryLookupFactoryService.class).register( "ksession1", ksession1 );
+
+        System.out.println("Let's go for the Second ksession");
+        //Switching to another node
+        node = connection.getExecutionNode(null);
+
+        KnowledgeBuilder kbuilder2 = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+        Assert.assertNotNull(kbuilder2);
+
+        kbuilder2.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+                      ResourceType.DRL );
+
+        if ( kbuilder2.hasErrors() ) {
+            System.out.println( "Errors: " + kbuilder2.getErrors() );
+        }
+
+
+        KnowledgeBase kbase2 = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+        Assert.assertNotNull(kbase2);
+
+
+        kbase2.addKnowledgePackages( kbuilder2.getKnowledgePackages() );
+
+        StatefulKnowledgeSession ksession2 = kbase2.newStatefulKnowledgeSession();
+        System.out.println("registering ksession2!");
+        node.get(DirectoryLookupFactoryService.class).register( "ksession2", ksession2 );
+
+        System.out.println("Lookuping up ksession1 !");
+        ExecutionResults results1 = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+        Assert.assertEquals( 2,
+                     (int) (Integer) results1.getValue( "fired" ) );
+
+        System.out.println("Lookuping up ksession2 !");
+        ExecutionResults results2 = node.get(DirectoryLookupFactoryService.class).lookup( "ksession2" ).execute( new FireAllRulesCommand( "fired" ) );
+
+        Assert.assertEquals( 2,
+                     (int) (Integer) results2.getValue( "fired" ) );
+
+    }
+
+//   @Test
+//   public void scalingUp(){
+//       for(int i=1; i<20; i++) {
+//       List<GenericNodeConnector> services = connection.getNodeConnectors();
+//         for(GenericNodeConnector serviceConnector : services) {
+//             if(serviceConnector instanceof ExecutionNodeService){
+//                    Throwable thrown = null;
+//                    try {
+//                        double d = ((ExecutionNodeService)serviceConnector).getLoad();
+//                        if(d<80)
+//                            ((ExecutionNodeService)serviceConnector).setLoad(d+10);
+//                        else
+//                            ((ExecutionNodeService)serviceConnector).setLoad(d);
+//                        Thread.sleep(5000);
+//                    } catch (Exception e) {
+//                        thrown = e;
+//                    }
+//                    Assert.assertNull(thrown);
+//                }
+//         }
+//       }
+//
+//   }
+
+
+
+}

Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,60 @@
+package org.drools.grid.distributed;
+
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.AcceptorService;
+import junit.framework.Assert;
+
+import net.jini.core.lookup.ServiceItem;
+import org.junit.After;
+
+
+
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.rioproject.test.RioTestRunner;
+import org.rioproject.test.SetTestManager;
+import org.rioproject.test.TestManager;
+
+ at RunWith(RioTestRunner.class)
+public class ITGridExecutionTest extends ExecutionNodeBaseTest {
+
+    AcceptorService server;
+    @SetTestManager
+    static TestManager testManager;
+
+    @Before
+    public void setUp() throws Exception {
+        
+        Assert.assertNotNull(testManager);
+//        //setup all the services using the Rio Test Framework
+//        //In real scenarios all this code will happen inside the connection.connect() method
+//
+//        DirectoryNodeService directoryService = (DirectoryNodeService) testManager.waitForService(DirectoryNodeService.class);
+//        Assert.assertNotNull(directoryService);
+//        Gnostic service = (Gnostic)testManager.waitForService(Gnostic.class);
+//
+//        connection.addDirectoryNode(directoryService);
+
+        ExecutionNodeService executionNode = (ExecutionNodeService) testManager.waitForService(ExecutionNodeService.class);
+        ServiceItem[] nodeServiceItems = testManager.getServiceItems(ExecutionNodeService.class);
+        System.out.println("ExecutionNodes Items =" + nodeServiceItems.length);
+
+        for (int i = 0; i < nodeServiceItems.length; i++) {
+            if (nodeServiceItems[i].service instanceof ExecutionNodeService) {
+                connection.addExecutionNode((ExecutionNodeService) nodeServiceItems[i].service);
+            }
+        }
+
+        //Get an execution node using the default/round robin strategy
+        node = connection.getExecutionNode();
+        System.out.println("ExecutionNode = "+ node);
+
+
+    }
+    @After
+    public void tearDown() throws ConnectorException  {
+        connection.dispose();
+    }
+}

Deleted: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -1,102 +0,0 @@
-/*
- *  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.grid.local;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.drools.KnowledgeBase;
-import org.drools.grid.ConnectorException;
-import org.drools.grid.DirectoryNodeService;
-import org.drools.grid.GenericNodeConnector;
-
-/**
- *
- * @author salaboy
- */
-public class DirectoryNodeLocalImpl implements DirectoryNodeService {
-
-    private String id;
-    private Map<String, String> directoryMap = new HashMap<String, String>();
-    private List<GenericNodeConnector> services = new ArrayList<GenericNodeConnector>();
-    
-    public DirectoryNodeLocalImpl() {
-        this.id = UUID.randomUUID().toString();  
-    }
-
-    public String getId() throws ConnectorException {
-        return this.id;
-    }
-
-    public void register(String executorId, String resourceId) throws ConnectorException {
-        System.out.println("Registering: " + executorId + " -- " + resourceId);
-        directoryMap.put(executorId, resourceId);
-
-    }
-
-     public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException {
-        System.out.println("Registering: " + executorId + " -- " + resourceConnector.getId());
-        directoryMap.put(executorId, resourceConnector.getId());
-        services.add(resourceConnector);
-
-    }
-
-    public GenericNodeConnector lookup(String executorId) throws ConnectorException {
-        GenericNodeConnector sessionService = null;
-        String sessionServiceId = (String) directoryMap.get(executorId);
-        System.out.println("Registry = " + directoryMap.toString());
-        System.out.println("Nodes Services = " + services);
-        for (GenericNodeConnector ss : services) {
-            System.out.println("Session Service id = " + ss.getId() + "needs to match with =" + sessionServiceId);
-            if (ss.getId().equals(sessionServiceId)) {
-                sessionService = ss;
-            }
-        }
-
-        return sessionService;
-    }
-
-    public void registerKBase(String kbaseId, String resourceId) throws ConnectorException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public void addService(GenericNodeConnector service) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public Map<String, String> getDirectoryMap() {
-        return this.directoryMap;
-    }
-
-    public String lookupId(String resourceId) {
-        return this.directoryMap.get(resourceId);
-    }
-
-    public void dispose() throws ConnectorException {
-        //do nothing, it's local.
-    }
-
-
-
-}

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalConnectionNode.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalConnectionNode.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalConnectionNode.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -24,9 +24,16 @@
 import org.drools.KnowledgeBaseFactoryService;
 import org.drools.builder.DirectoryLookupFactoryService;
 import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.ConnectorType;
 import org.drools.grid.GenericConnection;
+import org.drools.grid.GenericConnection;
 import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.GenericNodeConnector;
 import org.drools.grid.NodeConnectionType;
+import org.drools.grid.NodeConnectionType;
+import org.drools.grid.local.DirectoryLookupProviderLocalClient;
+import org.drools.grid.local.KnowledgeBaseProviderLocalClient;
+import org.drools.grid.local.KnowledgeBuilderProviderLocalClient;
 
 /**
  *
@@ -63,4 +70,8 @@
         // do nothing
     }
 
+    public ConnectorType getConnectorType() {
+        return ConnectorType.LOCAL;
+    }
+
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalDirectoryConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalDirectoryConnector.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalDirectoryConnector.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -17,7 +17,9 @@
 
 package org.drools.grid.local;
 
+import java.rmi.RemoteException;
 import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
 import org.drools.grid.DirectoryNodeService;
 import org.drools.grid.GenericConnection;
 import org.drools.grid.GenericDirectoryConnector;
@@ -45,7 +47,7 @@
     }
 
     public String getId() throws ConnectorException {
-        return "Local:";
+        return "Local:Directory";
     }
 
     public DirectoryNodeService getDirectoryNodeService(){
@@ -56,4 +58,8 @@
         return connection;
     }
 
+    public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+        return ConnectorType.LOCAL;
+    }
+
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalNodeConnector.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalNodeConnector.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -17,7 +17,9 @@
 
 package org.drools.grid.local;
 
+import java.rmi.RemoteException;
 import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
 import org.drools.grid.GenericConnection;
 import org.drools.grid.GenericNodeConnector;
 import org.drools.grid.GridConnection;
@@ -56,11 +58,15 @@
     public void write(Message msg, MessageResponseHandler responseHandler) {
         throw new UnsupportedOperationException("Not supported yet.");
     }
-    public GenericConnection getConnection(){
+    public GenericConnection getConnection() throws ConnectorException {
         return this.connection;
     }
 
-   public NodeConnectionType getNodeConnectionType() {
+   public NodeConnectionType getNodeConnectionType() throws ConnectorException {
         return new LocalConnectionNode();
     }
+
+    public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+        return ConnectorType.LOCAL;
+    }
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -16,6 +16,7 @@
  */
 package org.drools.grid.remote;
 
+import java.rmi.RemoteException;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -63,7 +64,11 @@
             }
 
             DirectoryNodeService directoryNode = connection.getDirectoryNode();
-            directoryNode.register(identifier, client.getId());
+            try {
+                directoryNode.register(identifier, client.getId());
+            } catch (RemoteException ex) {
+                Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+            }
 
 
             Message msg = new Message(messageSession.getSessionId(),
@@ -83,9 +88,12 @@
             } catch (Exception e) {
                 throw new RuntimeException("Unable to execute message", e);
             }
+            try {
+                directoryNode.dispose();
+            } catch (RemoteException ex) {
+                Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+            }
 
-            directoryNode.dispose();
-
         } catch (ConnectorException ex) {
             Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
         }
@@ -99,10 +107,20 @@
             String kresultsId = "kresults_" + messageSession.getSessionId();
             Message msg = new Message(messageSession.getSessionId(), messageSession.getCounter().incrementAndGet(), false, new KnowledgeContextResolveFromContextCommand(new LookupCommand(identifier, commandId), null, null, null, kresultsId));
             DirectoryNodeService directoryNode = connection.getDirectoryNode();
-            String connectorString = directoryNode.lookupId(identifier);
-            directoryNode.dispose();
+            String connectorString = "";
+            try {
+                connectorString = directoryNode.lookupId(identifier);
+                directoryNode.dispose();
+            } catch (RemoteException ex) {
+                Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+            }
+
             client = GenericConnectorFactory.newNodeConnector(connectorString);
-            client.connect();
+            try {
+                client.connect();
+            } catch (RemoteException ex) {
+                Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+            }
             //I need to add the new Connector to the connection to be able to clean it up/disconect it!
             connection.addExecutionNode(client);
 
@@ -139,6 +157,9 @@
         try {
             DirectoryNodeService directoryNode = connection.getDirectoryNode();
             directory = directoryNode.getDirectoryMap();
+        } catch (RemoteException ex) {
+            Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+
         } catch (ConnectorException ex) {
             Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
         }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/GenericConnectorFactory.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/GenericConnectorFactory.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/GenericConnectorFactory.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -18,11 +18,13 @@
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.drools.SystemEventListener;
 import org.drools.SystemEventListenerFactory;
 import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.ExecutionNodeService;
 import org.drools.grid.GenericDirectoryConnector;
 import org.drools.grid.GenericNodeConnector;
 
@@ -33,13 +35,54 @@
 public class GenericConnectorFactory {
 
     public static GenericNodeConnector newNodeConnector(String connectorString) {
+        System.out.println("Creating a connector for: " + connectorString);
         String[] connectorDetails = connectorString.split(":");
+
         String connectorType = connectorDetails[0];
-        String connectorName = connectorDetails[1];
-        String connectorAddress = connectorDetails[2];
-        String connectorPort = connectorDetails[3];
 
+
+        if (connectorType.equals("Distributed")) {
+            String connectorBehavior = connectorDetails[1];
+            String connectorId = connectorDetails[2];
+            GenericNodeConnector connector = null;
+
+
+
+            try {
+                Class clazzLocator = Class.forName("org.drools.grid.distributed.util.RioResourceLocator");
+                Method locate = clazzLocator.getMethod("locateResource", String.class);
+                ExecutionNodeService execNode = (ExecutionNodeService)locate.invoke(clazzLocator, connectorString);
+
+                Class clazz = Class.forName("org.drools.grid.distributed.RioNodeConnector");
+                Constructor constructor = clazz.getConstructor(String.class, SystemEventListener.class, ExecutionNodeService.class);
+                connector = (GenericNodeConnector) constructor.newInstance("node1", SystemEventListenerFactory.getSystemEventListener(),
+                                            execNode);
+
+              
+            } catch (InstantiationException ex) {
+                Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+            } catch (IllegalAccessException ex) {
+                Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+            } catch (IllegalArgumentException ex) {
+                Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+            } catch (InvocationTargetException ex) {
+                Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+            } catch (NoSuchMethodException ex) {
+                Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+            } catch (SecurityException ex) {
+                Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+            } catch (ClassNotFoundException ex) {
+                Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+            }
+
+            return connector;
+        }
+
+
         if (connectorType.equals("Mina")) {
+            String connectorName = connectorDetails[1];
+            String connectorAddress = connectorDetails[2];
+            String connectorPort = connectorDetails[3];
 
             GenericNodeConnector connector = null;
             try {
@@ -69,6 +112,9 @@
             return connector;
         }
 
+
+
+
         if (connectorType.equals("Local")) {
             GenericNodeConnector connector = null;
             try {

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/RemoteConnectionNode.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/RemoteConnectionNode.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/RemoteConnectionNode.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -23,6 +23,7 @@
 import org.drools.KnowledgeBaseFactoryService;
 import org.drools.builder.DirectoryLookupFactoryService;
 import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.ConnectorType;
 import org.drools.grid.GenericConnection;
 import org.drools.grid.GenericNodeConnector;
 import org.drools.grid.NodeConnectionType;
@@ -71,4 +72,8 @@
         this.connection = connection;
     }
 
+    public ConnectorType getConnectorType() {
+        return ConnectorType.REMOTE;
+    }
+
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryNodeRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryNodeRemoteClient.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryNodeRemoteClient.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -17,12 +17,15 @@
 
 package org.drools.grid.remote.directory;
 
+import java.rmi.RemoteException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import org.drools.KnowledgeBase;
 import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
 import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.GenericConnection;
 import org.drools.grid.GenericNodeConnector;
 import org.drools.grid.internal.Message;
 import org.drools.grid.internal.MessageResponseHandler;
@@ -134,4 +137,28 @@
 
     }
 
+    public String getId() throws ConnectorException {
+        return "Remote:Directory";
+    }
+
+    public void connect() throws ConnectorException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void disconnect() throws ConnectorException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public DirectoryNodeService getDirectoryNodeService() throws ConnectorException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public GenericConnection getConnection() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+        return ConnectorType.REMOTE;
+    }
+
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryServerMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryServerMessageHandlerImpl.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryServerMessageHandlerImpl.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -11,7 +11,7 @@
 import org.drools.SystemEventListener;
 import org.drools.grid.DirectoryNodeService;
 
-import org.drools.grid.local.DirectoryNodeLocalImpl;
+import org.drools.grid.DirectoryNodeLocalImpl;
 import org.drools.grid.internal.GenericIoWriter;
 import org.drools.grid.internal.GenericMessageHandler;
 import org.drools.grid.internal.Message;

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/MinaRemoteDirectoryConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/MinaRemoteDirectoryConnector.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/MinaRemoteDirectoryConnector.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -19,6 +19,7 @@
 
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
+import java.rmi.RemoteException;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Level;
@@ -32,6 +33,7 @@
 import org.drools.SystemEventListener;
 import org.drools.SystemEventListenerFactory;
 import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
 import org.drools.grid.DirectoryNodeService;
 import org.drools.grid.GenericConnection;
 import org.drools.grid.GenericDirectoryConnector;
@@ -122,6 +124,10 @@
         return this.connection;
     }
 
+    public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+        return ConnectorType.REMOTE;
+    }
+
 }
 
 

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/main/java/org/drools/grid/remote/mina/MinaRemoteNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/main/java/org/drools/grid/remote/mina/MinaRemoteNodeConnector.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/main/java/org/drools/grid/remote/mina/MinaRemoteNodeConnector.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -2,6 +2,7 @@
 
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
+import java.rmi.RemoteException;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -14,6 +15,7 @@
 import org.drools.SystemEventListener;
 import org.drools.SystemEventListenerFactory;
 import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
 import org.drools.grid.GenericConnection;
 import org.drools.grid.GenericNodeConnector;
 import org.drools.grid.NodeConnectionType;
@@ -121,16 +123,17 @@
         return "Mina:" + this.name + ":" + hostName + ":" + hostPort;
     }
 
-    public void setSession(Object object) {
-        this.session = (IoSession) object;
-    }
 
-    public GenericConnection getConnection() {
+    public GenericConnection getConnection() throws ConnectorException {
         return this.connection;
     }
 
 
-    public NodeConnectionType getNodeConnectionType() {
+    public NodeConnectionType getNodeConnectionType() throws ConnectorException{
         return new RemoteConnectionNode();
     }
+
+    public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+        return ConnectorType.REMOTE;
+    }
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -24,7 +24,6 @@
 import org.drools.SystemEventListenerFactory;
 import org.drools.grid.internal.GenericMessageHandlerImpl;
 import org.drools.grid.internal.NodeData;
-import org.drools.grid.local.DirectoryNodeLocalImpl;
 import org.drools.grid.local.LocalDirectoryConnector;
 import org.drools.grid.remote.mina.MinaAcceptor;
 import org.drools.grid.remote.mina.MinaIoHandler;

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GenericHumanTaskProvider.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GenericHumanTaskProvider.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GenericHumanTaskProvider.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -2,7 +2,6 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import org.drools.grid.GenericDirectoryConnector;
 import org.drools.grid.GenericHumanTaskConnector;
 
 /**

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GridTopology.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GridTopology.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GridTopology.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -1,7 +1,10 @@
 package org.drools.grid.services;
 
+import java.rmi.RemoteException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.drools.grid.ConnectorException;
 import org.drools.grid.DirectoryNodeService;
@@ -15,16 +18,10 @@
 import org.drools.grid.strategies.ReturnAlwaysTheFirstSelectionStrategy;
 
 /**
- * @author salaboy
- * ExecutionEnvironmentTopology describes the current topology of the grid
- * This topology description will be persistent, in case of failure
- * the topology can be restored.
- * This class will represent the configured topology related with a business case
- * and it will require that each execution environment is already started and running.  
+ * @author salaboy  
  */
 public class GridTopology {
 
-    
     private String topologyName;
     private Map<String, ExecutionEnvironment> executionEnvironments = new HashMap<String, ExecutionEnvironment>();
     private Map<String, DirectoryInstance> directories = new HashMap<String, DirectoryInstance>();
@@ -36,9 +33,7 @@
 
     }
 
-
-
-    public void registerExecutionEnvironment(String name, GenericNodeProvider provider) throws ConnectorException{
+    public void registerExecutionEnvironment(String name, GenericNodeProvider provider) throws ConnectorException {
         //Create the executionEnvironment using the provider
         ExecutionEnvironment environment = new ExecutionEnvironment(name, provider);
         //Get the connector
@@ -48,45 +43,45 @@
         //Adding the connector to the conection collection of connectors
         connection.addExecutionNode(connector);
         //We need to add all the other exec envs connectors inside this connection
-        for(ExecutionEnvironment e : executionEnvironments.values()){
+        for (ExecutionEnvironment e : executionEnvironments.values()) {
             connection.addExecutionNode(e.getConnector());
         }
         //We need to add all the other directory connectors inside this connection
-        for(DirectoryInstance d : directories.values()){
+        for (DirectoryInstance d : directories.values()) {
             connection.addDirectoryNode(d.getConnector());
         }
-       
+
         //Adding the connection to the Topology's list of connections
         connections.put(name, connection);
         //Adding the env to the local cache
         executionEnvironments.put(name, environment);
         //Register all the Execution Environments into the current directories
         registerGridResourceInCurrentDirectories(name, provider.getId());
-        
+
     }
 
-    public void registerDirectoryInstance(String name, GenericDirectoryProvider provider) throws ConnectorException{
+    public void registerDirectoryInstance(String name, GenericDirectoryProvider provider) throws ConnectorException {
         DirectoryInstance directory = new DirectoryInstance(name, provider);
-        GenericDirectoryConnector connector =  directory.getConnector();
+        GenericDirectoryConnector connector = directory.getConnector();
         GenericConnection connection = connector.getConnection();
 
 
         connection.addDirectoryNode(connector);
-        
-        for(ExecutionEnvironment e : executionEnvironments.values()){
+
+        for (ExecutionEnvironment e : executionEnvironments.values()) {
             connection.addExecutionNode(e.getConnector());
         }
-        for(DirectoryInstance d : directories.values()){
+        for (DirectoryInstance d : directories.values()) {
             connection.addDirectoryNode(d.getConnector());
         }
 
         connections.put(name, connection);
         directories.put(name, directory);
         registerGridResourceInCurrentDirectories(name, provider.getId());
-        
+
     }
 
-    public void registerTaskServerInstance(String name, GenericHumanTaskProvider provider) throws ConnectorException{
+    public void registerTaskServerInstance(String name, GenericHumanTaskProvider provider) throws ConnectorException {
         TaskServerInstance taskServer = new TaskServerInstance(name, provider);
         GenericHumanTaskConnector connector = taskServer.getConnector();
         GenericConnection connection = connector.getConnection();
@@ -94,40 +89,37 @@
         connections.put(name, connection);
         taskServerInstance.put(name, taskServer);
         registerGridResourceInCurrentDirectories(name, provider.getId());
-        
+
     }
 
-    private void registerGridResourceInCurrentDirectories(String name, String resourceId) throws ConnectorException{
-        for(DirectoryInstance directory : directories.values()){
-                
-                DirectoryNodeService directoryNode = directory.getDirectoryService();
-                if( directoryNode != null){
+    private void registerGridResourceInCurrentDirectories(String name, String resourceId) throws ConnectorException {
+        for (DirectoryInstance directory : directories.values()) {
+
+            DirectoryNodeService directoryNode = directory.getDirectoryService();
+            if (directoryNode != null) {
+                try {
                     directoryNode.register(name, resourceId);
+                } catch (RemoteException ex) {
+                    Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, ex);
                 }
-                directory.getConnector().disconnect();
-
-
+            }
+            directory.getConnector().disconnect();
         }
     }
-    
 
-   
-
-    
-
     public ExecutionEnvironment getBestExecutionEnvironment(ExecutionEnvironmentSelectionStrategy strategy) {
-        System.out.println("Current Exec used in the strategy = "+executionEnvironments);
+        System.out.println("Current Exec used in the strategy = " + executionEnvironments);
         return strategy.getBestExecutionEnvironment(executionEnvironments);
     }
 
-
     public ExecutionNode getExecutionNode() {
         return null;
 
     }
     //@TODO: need to add strategy to get the execution node here!!!
+
     public ExecutionNode getExecutionNode(ExecutionEnvironment ee) throws ConnectorException {
-        GenericConnection connection = connections.get(ee.getName()); 
+        GenericConnection connection = connections.get(ee.getName());
         return connection.getExecutionNode(new ReturnAlwaysTheFirstSelectionStrategy());
     }
 
@@ -139,18 +131,18 @@
         return (DirectoryInstance) strategy.getBestGridResource(directories);
     }
 
-    public void disconectAllClients() throws ConnectorException  {
+    public void disconectAllClients() throws ConnectorException, RemoteException {
         for (String key : executionEnvironments.keySet()) {
-                executionEnvironments.get(key).getConnector().disconnect();
-                executionEnvironments.get(key).getConnector().getConnection().dispose();
+            executionEnvironments.get(key).getConnector().disconnect();
+            executionEnvironments.get(key).getConnector().getConnection().dispose();
         }
         for (String key : directories.keySet()) {
-                directories.get(key).getConnector().disconnect();
-                directories.get(key).getConnector().getConnection().dispose();
+            directories.get(key).getConnector().disconnect();
+            directories.get(key).getConnector().getConnection().dispose();
         }
         for (String key : taskServerInstance.keySet()) {
-                taskServerInstance.get(key).getConnector().disconnect();
-                taskServerInstance.get(key).getConnector().getConnection().dispose();
+            taskServerInstance.get(key).getConnector().disconnect();
+            taskServerInstance.get(key).getConnector().getConnection().dispose();
         }
     }
 
@@ -165,9 +157,4 @@
     public TaskServerInstance getTaskServerInstance(String name) {
         return taskServerInstance.get(name);
     }
-
-
-
-    
-    
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalDirectoryProvider.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalDirectoryProvider.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalDirectoryProvider.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -19,7 +19,7 @@
 import java.util.UUID;
 import org.drools.grid.GenericDirectoryConnector;
 import org.drools.grid.GenericNodeConnector;
-import org.drools.grid.local.DirectoryNodeLocalImpl;
+import org.drools.grid.DirectoryNodeLocalImpl;
 import org.drools.grid.local.LocalDirectoryConnector;
 import org.drools.grid.local.LocalNodeConnector;
 import org.drools.grid.services.DirectoryInstance;

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalNodeProvider.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalNodeProvider.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalNodeProvider.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -19,7 +19,7 @@
 import java.util.UUID;
 import org.drools.grid.GenericDirectoryConnector;
 import org.drools.grid.GenericNodeConnector;
-import org.drools.grid.local.DirectoryNodeLocalImpl;
+import org.drools.grid.DirectoryNodeLocalImpl;
 import org.drools.grid.local.LocalDirectoryConnector;
 import org.drools.grid.local.LocalNodeConnector;
 import org.drools.grid.services.ExecutionEnvironment;

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/BasicAPITestWithMina.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/BasicAPITestWithMina.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/BasicAPITestWithMina.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
+import java.rmi.RemoteException;
 
 import junit.framework.Assert;
 
@@ -73,7 +74,7 @@
     }
 
     @After
-    public void stop() throws ConnectorException {
+    public void stop() throws ConnectorException, RemoteException {
 
         grid.disconectAllClients();
         Assert.assertEquals(0, server1.getCurrentSessions());

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterDirectoryTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterDirectoryTest.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterDirectoryTest.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -17,6 +17,7 @@
 
 package org.drools.services;
 
+import java.rmi.RemoteException;
 import org.drools.grid.ConnectorException;
 import org.drools.grid.DirectoryNodeService;
 import org.drools.grid.services.DirectoryInstance;
@@ -60,7 +61,7 @@
 
     
      @Test
-     public void directoryLocalTest() throws ConnectorException {
+     public void directoryLocalTest() throws ConnectorException, RemoteException {
          System.out.println("First Test!!");
         GridTopology grid = new GridTopology("MyBusinessUnit");
         GenericDirectoryProvider localDirProvider = new LocalDirectoryProvider();
@@ -83,7 +84,7 @@
      }
 
      @Test
-     public void multiDirectoryLocalTest() throws ConnectorException {
+     public void multiDirectoryLocalTest() throws ConnectorException, RemoteException {
          System.out.println("Second Test!!");
         GridTopology grid = new GridTopology("MyBusinessUnit");
         GenericDirectoryProvider localDirProvider = new LocalDirectoryProvider();

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterMinaDirectoryTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterMinaDirectoryTest.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterMinaDirectoryTest.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
+import java.rmi.RemoteException;
 import org.apache.mina.transport.socket.SocketAcceptor;
 import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
 import org.drools.KnowledgeBase;
@@ -113,7 +114,7 @@
     }
 
     @After
-    public void tearDown() throws InterruptedException, ConnectorException {
+    public void tearDown() throws InterruptedException, ConnectorException, RemoteException {
 
         grid.disconectAllClients();
 
@@ -129,7 +130,7 @@
     }
 
     @Test
-     public void directoryRemoteTest() throws ConnectorException {
+     public void directoryRemoteTest() throws ConnectorException, RemoteException {
         grid = new GridTopology("MyBusinessUnit");
 
         GenericDirectoryProvider remoteDirProvider = new MinaDirectoryProvider("MyMinaDir", "127.0.0.1", 9123);

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterTaskTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterTaskTest.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterTaskTest.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -21,6 +21,7 @@
 import java.io.Reader;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
+import java.rmi.RemoteException;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -179,7 +180,7 @@
     }
 
     @After
-    public void tearDown() throws InterruptedException, ConnectorException {
+    public void tearDown() throws InterruptedException, ConnectorException, RemoteException {
         client.disconnect();
 
         grid.disconectAllClients();

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/ServiceAPITest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/ServiceAPITest.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/ServiceAPITest.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -89,7 +89,7 @@
     }
 
     @After
-    public void tearDown() throws ConnectorException {
+    public void tearDown() throws ConnectorException, RemoteException {
         System.out.println("Disconecting all clients");
         grid.disconectAllClients();
         System.out.println("Stoping Server 1!");
@@ -102,7 +102,7 @@
      public void mixedTopologyMinaAndLocal() throws ConnectorException {
         grid = new GridTopology("MyBusinessUnit");
        
-        GenericNodeProvider minaProvider = new MinaNodeProvider("Mina1","127.0.0.1",9123 );
+        GenericNodeProvider minaProvider = new MinaNodeProvider("Mina1", "127.0.0.1", 9123 );
         GenericNodeProvider localProvider = new LocalNodeProvider();
 
         grid.registerExecutionEnvironment("MyMinaEnv", minaProvider);

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/MinaRemoteHumanTaskConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/MinaRemoteHumanTaskConnector.java	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/MinaRemoteHumanTaskConnector.java	2010-06-25 04:31:31 UTC (rev 33634)
@@ -2,6 +2,7 @@
 
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
+import java.rmi.RemoteException;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -14,6 +15,7 @@
 import org.drools.SystemEventListener;
 import org.drools.SystemEventListenerFactory;
 import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
 import org.drools.grid.GenericConnection;
 import org.drools.grid.GenericHumanTaskConnector;
 import org.drools.grid.HumanTaskNodeService;
@@ -133,4 +135,8 @@
     public HumanTaskNodeService getHumanTaskNodeService() throws ConnectorException {
         return new HumanTaskServiceImpl(this, (int) this.session.getId());
     }
+
+    public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+        return ConnectorType.REMOTE;
+    }
 }

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/pom.xml	2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/pom.xml	2010-06-25 04:31:31 UTC (rev 33634)
@@ -18,8 +18,9 @@
         <module>drools-grid-remote-dir-mina</module>
         <module>drools-grid-services</module>
         <module>drools-grid-task</module>
-    
+    <module>drools-grid-distributed-rio</module>
+    <module>drools-grid-distributed-api</module>
   </modules>
 
 
-</project>
+</project>
\ No newline at end of file



More information about the jboss-svn-commits mailing list