[jboss-svn-commits] JBL Code SVN: r35884 - in labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src: main/java/org/drools/grid/impl and 6 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Nov 5 11:54:34 EDT 2010


Author: salaboy21
Date: 2010-11-05 11:54:32 -0400 (Fri, 05 Nov 2010)
New Revision: 35884

Added:
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeLocalConfiguration.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeServer.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeSocketConfiguration.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/NodeConnectionFactory.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/GridNodeRemoteClient.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBaseProviderRemoteClient.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBuilderProviderRemoteClient.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBuilderRemoteClient.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/RemoteGridConnection.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/NodeTests.java
Modified:
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/Grid.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/GridServiceDescription.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridImpl.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeImpl.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridServiceDescriptionFactory.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionClient.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionImpl.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionJpa.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesImpl.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerClient.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerLocalConfiguration.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerSocketConfiguration.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/local/LocalGridNodeTest.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/io/mina/RegisterServicesTest.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/io/mina/WhitePagesTest.java
Log:
JBRULES-2772: Drools Grid Impl2 remoting features (socket)
	- adding basic remoting features
            - must fix whitepages with strings

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/Grid.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/Grid.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/Grid.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -1,12 +1,14 @@
 package org.drools.grid;
 
-import org.drools.grid.service.directory.Address;
 
-
 public interface Grid {
     public <T> T get(Class<T> serviceClass);
 
     public GridNode createGridNode(String id);
     
+    public GridNode createGridNode(GridServiceDescription gsd);
+    
+    public GridNode getGridNode(String id);
+    
     public GridNodeConnection getGridNodeConnection(GridServiceDescription serviceDescription);        
 }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/GridServiceDescription.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/GridServiceDescription.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/GridServiceDescription.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -9,6 +9,10 @@
 public interface GridServiceDescription {
     public String getId();
 
+    public Class getServiceInterface();
+
+    public void setServiceInterface(Class cls);
+    
     public Class getImplementedClass();
 
     public void setImplementedClass(Class cls);

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridImpl.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridImpl.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -12,6 +12,7 @@
 import org.drools.grid.GridNodeConnection;
 import org.drools.grid.GridServiceDescription;
 import org.drools.grid.local.LocalGridConnection;
+import org.drools.grid.remote.RemoteGridConnection;
 import org.drools.grid.service.directory.Address;
 import org.drools.grid.service.directory.WhitePages;
 
@@ -91,14 +92,39 @@
     }
 
     public GridNode createGridNode(String id) {
-        GridNodeConnection connection = new LocalGridConnection( id );
+        GridServiceDescription gsd = GridServiceDescriptionFactory.newGridServiceDescritpion(id);
+        return createGridNode(gsd);
+        
+    }
+    
+    public GridNode createGridNode(GridServiceDescription gsd){
+        GridNodeConnection connection = NodeConnectionFactory.newGridNodeConnection(gsd);
         GridNode gnode = connection.getGridNode();
-        localNodes.put( id, gnode );
-                
+        if(gnode instanceof GridNodeImpl){
+            localNodes.put( gsd.getId(), gnode );
+        }
+        
         WhitePages pages = get( WhitePages.class );
-        pages.create( id );
+        pages.create( gsd.getId() );
         
         return gnode;
     }
+    
+    public GridNode getGridNode(String id){
+        if(isLocalNode(id)){
+            return localNodes.get(id);
+        }
+        WhitePages pages = get( WhitePages.class );
+        GridServiceDescription gsd = pages.lookup(id);
+        return new RemoteGridConnection(gsd).getGridNode();
+        
+    }
+    
+    private boolean isLocalNode(String id){
+        if(id.contains("@local")){
+            return true;
+        }
+        return false;
+    }
 
 }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeImpl.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeImpl.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -21,6 +21,9 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.drools.grid.GridNode;
+import org.drools.grid.MessageReceiverHandlerFactoryService;
+import org.drools.grid.io.MessageReceiverHandler;
+import org.drools.grid.io.impl.NodeData;
 import org.drools.util.ServiceRegistry;
 import org.drools.util.ServiceRegistryImpl;
 
@@ -28,7 +31,7 @@
  *
  * @author salaboy
  */
-public class GridNodeImpl implements GridNode {
+public class GridNodeImpl implements GridNode, MessageReceiverHandlerFactoryService {
 
     private String id;
     private final Map<String, Object> localContext = new ConcurrentHashMap<String, Object>();
@@ -85,5 +88,9 @@
 
     public void init(Object context) {       
     }
+
+    public MessageReceiverHandler getMessageReceiverHandler() {
+        return new GridNodeServer(this, new NodeData());
+    }
     
 }

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeLocalConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeLocalConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeLocalConfiguration.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,46 @@
+/*
+ * 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.impl;
+
+import org.drools.grid.Grid;
+import org.drools.grid.GridNode;
+import org.drools.grid.GridPeerServiceConfiguration;
+
+/**
+ *
+ * @author salaboy
+ */
+public class GridNodeLocalConfiguration implements GridPeerServiceConfiguration {
+
+    private GridNode gnode;
+    public GridNodeLocalConfiguration() {
+    }
+
+    public void setGnode(GridNode gnode) {
+        this.gnode = gnode;
+    }
+    
+    
+    
+    public void configureService(Grid grid) {
+        GridNode gnode = (this.gnode != null) ? this.gnode : new GridNodeImpl();
+        ((GridImpl) grid).addService( GridNode.class,
+                                      gnode );
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeServer.java (from rev 35836, labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerServer.java)
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeServer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeServer.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,96 @@
+/*
+ * 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.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.drools.command.impl.ContextImpl;
+import org.drools.command.impl.GenericCommand;
+import org.drools.grid.GridNode;
+import org.drools.grid.io.Conversation;
+import org.drools.grid.io.Message;
+import org.drools.grid.io.MessageReceiverHandler;
+import org.drools.grid.io.impl.CommandImpl;
+import org.drools.grid.io.impl.NodeData;
+import org.drools.runtime.impl.ExecutionResultImpl;
+
+
+/**
+ *
+ * @author salaboy
+ */
+public class GridNodeServer implements
+    MessageReceiverHandler{
+    private GridNode gnode; 
+    private NodeData data;
+    public GridNodeServer(GridNode gnode, NodeData data) {
+        this.gnode = gnode;
+        this.data = data;
+    }
+    
+    public void messageReceived(Conversation conversation, Message msg) {
+        final CommandImpl cmd = (CommandImpl) msg.getBody();
+        this.execs.get( cmd.getName() ).execute( gnode,
+                                                 conversation,
+                                                 msg,
+                                                 cmd );
+    }
+    
+    private Map<String, Exec> execs = new HashMap<String, Exec>() {
+                                        {
+                                            put( "execute",
+                                                 new Exec() {
+                                                     public void execute(Object object,
+                                                                         Conversation con,
+                                                                         Message msg,
+                                                                         CommandImpl cmd) {
+                                                         GridNode gnode = (GridNode) object;
+                                                         List list = cmd.getArguments();
+                                                          GenericCommand command = (GenericCommand) list.get(0);
+
+                                                        // Setup the evaluation context 
+                                                        ContextImpl localSessionContext = new ContextImpl( "session_" + cmd.getName(),
+                                                                                                           data.getContextManager(),
+                                                                                                           data.getTemp() );
+                                                        ExecutionResultImpl localKresults = new ExecutionResultImpl();
+                                                        localSessionContext.set( "kresults_" + cmd.getName(),
+                                                                                 localKresults );
+
+                                                        //for ( GenericCommand cmd : commands ) {
+                                                        // evaluate the commands
+
+                                                        Object result = command.execute( localSessionContext );
+                                                         
+                                                         
+                                                         
+                                                         con.respond( result );
+                                                     }
+                                                 } );
+                                        }
+                                    };
+
+    public static interface Exec {
+        void execute(Object object,
+                     Conversation con,
+                     Message msg,
+                     CommandImpl cmd);
+    }
+
+
+}

Copied: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeSocketConfiguration.java (from rev 35836, labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerSocketConfiguration.java)
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeSocketConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridNodeSocketConfiguration.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,81 @@
+/**
+ * 
+ */
+package org.drools.grid.impl;
+
+import org.drools.grid.service.directory.impl.*;
+import org.drools.grid.CoreServicesWhitePages;
+
+import org.drools.grid.Grid;
+import org.drools.grid.GridNode;
+import org.drools.grid.GridPeerServiceConfiguration;
+import org.drools.grid.MessageReceiverHandlerFactoryService;
+import org.drools.grid.MultiplexSocketService;
+
+public class GridNodeSocketConfiguration
+implements
+GridPeerServiceConfiguration {
+    private int port = -1;
+    
+    public GridNodeSocketConfiguration(int port) {
+        this.port = port;
+    }
+
+    public int getPort() {
+        return port;
+    }
+    
+    public void configureService(Grid grid) {
+        GridNode gnode = grid.get( GridNode.class );
+
+        if ( port != -1 ) {
+            CoreServicesWhitePagesImpl coreServicesWP = (CoreServicesWhitePagesImpl) grid.get( CoreServicesWhitePages.class );
+
+            GridServiceDescriptionImpl gsd = (GridServiceDescriptionImpl) coreServicesWP.lookup(GridNode.class);
+            if ( gsd == null ) {
+                gsd = new GridServiceDescriptionImpl( GridNode.class );
+            }
+
+            MultiplexSocketService mss = grid.get( MultiplexSocketService.class );
+
+            
+//            GridServiceDescription service = coreServicesWP.getServices().get( SchedulerService.class.getName() );
+//            if( service == null){
+//                coreServicesWP.getServices().put(SchedulerService.class.getName(), gsd);
+//                service = gsd;
+//            }
+//            Address address = null;
+//            if(service.getAddresses().get("socket") != null){
+//                address = service.getAddresses().get("socket");
+//            } else{
+//                address = service.addAddress( "socket" );
+//            }
+//            InetSocketAddress[] addresses = (InetSocketAddress[])address.getObject();
+//            if(addresses != null && addresses.length >= 1){
+//                 InetSocketAddress[] newAddresses = new InetSocketAddress[addresses.length+1];
+//                if(addresses !=null){
+//                    System.arraycopy(addresses, 0, newAddresses, 0, addresses.length);
+//                }
+//                newAddresses[addresses.length]= new InetSocketAddress( mss.getIp(),
+//                                                             this.port);
+//                 ServiceConfiguration conf = new SchedulerServiceConfiguration(newAddresses);
+//                 service.setData(conf);
+//            }else{
+//                 InetSocketAddress[] newAddress = new InetSocketAddress[1];
+//                 newAddress[0]= new InetSocketAddress( mss.getIp(),
+//                                                         this.port);
+//                 address.setObject(  newAddress );
+//                 ServiceConfiguration conf = new SchedulerServiceConfiguration(newAddress);
+//                 service.setData(conf);
+//            }
+            
+
+           
+           
+            
+            mss.addService( this.port,
+                            GridNode.class.getName(),
+                            ((MessageReceiverHandlerFactoryService) gnode ).getMessageReceiverHandler() );
+        }
+    }
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridServiceDescriptionFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridServiceDescriptionFactory.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridServiceDescriptionFactory.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -33,15 +33,30 @@
         try {
             
             String[] clazzName = serviceId.split(":");
+            
             if(clazzName[0].equals("scheduler")){
-                ((GridServiceDescriptionImpl)gsd).setId("org.drools.time.SchedulerService");
+                gsd.setServiceInterface(Class.forName("org.drools.time.SchedulerService"));
                 gsd.setImplementedClass(Class.forName("org.drools.grid.timer.impl.SchedulerImpl"));
             }
              if(clazzName[0].equals("schedulerclient")){
-                ((GridServiceDescriptionImpl)gsd).setId("org.drools.time.SchedulerService");
+                gsd.setServiceInterface(Class.forName("org.drools.time.SchedulerService"));
                 gsd.setImplementedClass(Class.forName("org.drools.grid.timer.impl.SchedulerClient"));
             }
             
+             if(clazzName[0].equals("executionnode")){
+                gsd.setServiceInterface(Class.forName("org.drools.grid.GridNode"));
+                gsd.setImplementedClass(Class.forName("org.drools.grid.impl.GridNodeImpl"));
+            }
+            
+             if(clazzName[0].equals("executionnodeclient")){
+                gsd.setServiceInterface(Class.forName("org.drools.grid.GridNode"));
+                gsd.setImplementedClass(Class.forName("org.drools.grid.remote.GridNodeRemoteClient"));
+            }
+            if(clazzName[0].equals("test")){
+                 gsd.setServiceInterface(Class.forName("java.lang.String"));
+                gsd.setImplementedClass(Class.forName("java.lang.String"));
+            }
+            
         } catch (ClassNotFoundException ex) {
             Logger.getLogger(GridServiceDescriptionFactory.class.getName()).log(Level.SEVERE, null, ex);
         }

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/NodeConnectionFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/NodeConnectionFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/NodeConnectionFactory.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,41 @@
+/*
+ * 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.impl;
+
+import org.drools.grid.GridNodeConnection;
+import org.drools.grid.GridServiceDescription;
+import org.drools.grid.local.LocalGridConnection;
+import org.drools.grid.remote.RemoteGridConnection;
+
+/**
+ *
+ * @author salaboy
+ */
+public class NodeConnectionFactory {
+
+    public static GridNodeConnection newGridNodeConnection(GridServiceDescription gsd) {
+        if(gsd.getAddresses().get("local") != null){
+            return new LocalGridConnection(gsd.getId());
+        }
+        if(gsd.getAddresses().get("socket") != null){
+            return new RemoteGridConnection(gsd);
+        }
+        return null;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/GridNodeRemoteClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/GridNodeRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/GridNodeRemoteClient.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,86 @@
+/*
+ * 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.remote;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.SystemEventListenerFactory;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.GridNode;
+import org.drools.grid.GridServiceDescription;
+import org.drools.grid.io.ConversationManager;
+import org.drools.grid.io.impl.ConversationManagerImpl;
+import org.drools.grid.remote.mina.MinaConnector;
+import org.drools.util.ServiceRegistry;
+import org.drools.util.ServiceRegistryImpl;
+
+/**
+ *
+ * @author salaboy
+ */
+public class GridNodeRemoteClient implements GridNode{
+    
+    private String id;
+    private GridServiceDescription gsd; 
+    private final Map<String, Object> localContext = new ConcurrentHashMap<String, Object>();
+    private final ServiceRegistry serviceRegistry = ServiceRegistryImpl.getInstance();
+
+    public GridNodeRemoteClient(GridServiceDescription gsd) {
+        this.gsd = gsd;
+        init(this.localContext);
+    }
+    
+    public <T> T get(String identifier, Class<T> cls) {
+         T service = (T) localContext.get(identifier);
+        if ( service == null ) {
+            service = this.serviceRegistry.get( cls );
+        }
+        
+        
+        return service;
+    }
+
+    public <T> T get(Class<T> serviceClass) {
+        return get( serviceClass.getName(), serviceClass );
+    }
+
+    public void set(String identifier, Object object) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public String getId() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void init(Object context) {
+        
+        MinaConnector connector = new MinaConnector();
+        ConversationManager cm = new ConversationManagerImpl(id, connector, SystemEventListenerFactory.getSystemEventListener());
+        this.localContext.put( KnowledgeBuilderFactoryService.class.getCanonicalName(),
+                           new KnowledgeBuilderProviderRemoteClient( cm, gsd ) );
+        this.localContext.put( KnowledgeBaseFactoryService.class.getCanonicalName(),
+                           new KnowledgeBaseProviderRemoteClient( cm, gsd ) );
+        
+    }
+
+    public void dispose() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+}

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBaseProviderRemoteClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBaseProviderRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBaseProviderRemoteClient.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,144 @@
+/*
+ * 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.remote;
+
+import java.io.Serializable;
+import java.net.InetSocketAddress;
+import java.util.Arrays;
+import java.util.Properties;
+import java.util.UUID;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.command.NewKnowledgeBaseCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.grid.GridServiceDescription;
+import org.drools.grid.internal.responsehandlers.BlockingMessageResponseHandler;
+import org.drools.grid.io.Conversation;
+import org.drools.grid.io.ConversationManager;
+import org.drools.grid.io.impl.CommandImpl;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+
+/**
+ *
+ * @author salaboy
+ */
+public class KnowledgeBaseProviderRemoteClient implements KnowledgeBaseFactoryService {
+
+    private ConversationManager cm;
+    private GridServiceDescription gsd;
+    public KnowledgeBaseProviderRemoteClient(ConversationManager cm, GridServiceDescription gsd) {
+        this.cm = cm;
+        this.gsd = gsd;
+    }
+
+    
+    
+    public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration(Properties properties, ClassLoader... classLoader) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeSessionConfiguration newKnowledgeSessionConfiguration() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeSessionConfiguration newKnowledgeSessionConfiguration(Properties properties) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBase newKnowledgeBase() {
+        String localId = UUID.randomUUID().toString();
+        
+        CommandImpl cmd = new CommandImpl("execute",
+                Arrays.asList(new Object[]{new SetVariableCommand( "__TEMP__",
+                                                           localId,
+                                                           new NewKnowledgeBaseCommand( null ) )}));
+        
+        sendMessage(this.cm,
+                (InetSocketAddress[]) this.gsd.getAddresses().get("socket").getObject(),
+                this.gsd.getServiceInterface().getName(),
+                cmd);
+        
+        return new KnowledgeBaseRemoteClient( localId, this.gsd, this.cm );  
+        
+ 
+    }
+
+    public KnowledgeBase newKnowledgeBase(String kbaseId) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBase newKnowledgeBase(KnowledgeBaseConfiguration conf) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBase newKnowledgeBase(String kbaseId, KnowledgeBaseConfiguration conf) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Environment newEnvironment() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public static Object sendMessage(ConversationManager conversationManager,
+            Serializable addr,
+            String id,
+            Object body) {
+
+        InetSocketAddress[] sockets = null;
+        if (addr instanceof InetSocketAddress[]) {
+            sockets = (InetSocketAddress[]) addr;
+        } else if (addr instanceof InetSocketAddress) {
+            sockets = new InetSocketAddress[1];
+            sockets[0] = (InetSocketAddress) addr;
+        }
+
+
+        BlockingMessageResponseHandler handler = new BlockingMessageResponseHandler();
+        Exception exception = null;
+        for (InetSocketAddress socket : sockets) {
+            try {
+                Conversation conv = conversationManager.startConversation(socket,
+                        id);
+                conv.sendMessage(body,
+                        handler);
+                exception = null;
+            } catch (Exception e) {
+                exception = e;
+                conversationManager.endConversation();
+            }
+            if (exception == null) {
+                break;
+            }
+        }
+        if (exception != null) {
+            throw new RuntimeException("Unable to send message",
+                    exception);
+        }
+        try {
+            return handler.getMessage().getBody();
+        } finally {
+            conversationManager.endConversation();
+        }
+    }
+}

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,239 @@
+/*
+ * 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.remote;
+
+import java.io.Serializable;
+import java.net.InetSocketAddress;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.UUID;
+import org.drools.KnowledgeBase;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.NewStatefulKnowledgeSessionCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definition.process.Process;
+import org.drools.definition.rule.Query;
+import org.drools.definition.rule.Rule;
+import org.drools.definition.type.FactType;
+import org.drools.event.knowledgebase.KnowledgeBaseEventListener;
+import org.drools.grid.GridServiceDescription;
+import org.drools.grid.internal.responsehandlers.BlockingMessageResponseHandler;
+import org.drools.grid.io.Conversation;
+import org.drools.grid.io.ConversationManager;
+import org.drools.grid.io.impl.CommandImpl;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
+
+/**
+ *
+ * @author salaboy
+ */
+public class KnowledgeBaseRemoteClient implements KnowledgeBase{
+    
+    private String instanceId;
+    private ConversationManager cm;
+    private GridServiceDescription gsd;
+
+    public KnowledgeBaseRemoteClient(String localId, GridServiceDescription gsd, ConversationManager cm) {
+        this.instanceId = localId;
+        this.cm = cm;
+        this.gsd = gsd;
+    }
+
+    public void addKnowledgePackages(Collection<KnowledgePackage> kpackages) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<KnowledgePackage> getKnowledgePackages() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgePackage getKnowledgePackage(String packageName) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void removeKnowledgePackage(String packageName) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Rule getRule(String packageName, String ruleName) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void removeRule(String packageName, String ruleName) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Query getQuery(String packageName, String queryName) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void removeQuery(String packageName, String queryName) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void removeFunction(String packageName, String ruleName) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public FactType getFactType(String packageName, String typeName) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Process getProcess(String processId) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void removeProcess(String processId) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<Process> getProcesses() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeSessionConfiguration conf, Environment environment) {
+        String kresultsId = "kresults_" + this.cm.toString();
+        String localId = UUID.randomUUID().toString();
+        
+        CommandImpl cmd = new CommandImpl("execute",
+                Arrays.asList(new Object[]{new SetVariableCommand( "__TEMP__",
+                                                           localId,
+                                                           new KnowledgeContextResolveFromContextCommand( new NewStatefulKnowledgeSessionCommand( conf ),
+                                                                                                          null,
+                                                                                                          this.instanceId,
+                                                                                                          null,
+                                                                                                          kresultsId ) )}));
+        
+        sendMessage(this.cm,
+                (InetSocketAddress[]) this.gsd.getAddresses().get("socket").getObject(),
+                this.gsd.getServiceInterface().getName(),
+                cmd);
+        
+        return new StatefulKnowledgeSessionRemoteClient( localId,
+                                                         this.gsd,
+                                                         this.cm );
+        
+        
+//        String kresultsId = "kresults_" + this.messageSession.getSessionId();
+//
+//        String localId = UUID.randomUUID().toString();
+//
+//        Message msg = new Message( this.messageSession.getSessionId(),
+//                                   this.messageSession.counter.incrementAndGet(),
+//                                   false,
+//                                   new SetVariableCommand( "__TEMP__",
+//                                                           localId,
+//                                                           new KnowledgeContextResolveFromContextCommand( new NewStatefulKnowledgeSessionCommand( conf ),
+//                                                                                                          null,
+//                                                                                                          this.instanceId,
+//                                                                                                          null,
+//                                                                                                          kresultsId ) ) );
+//
+//        try {
+//            this.connector.connect();
+//            Object object = this.connector.write( msg ).getPayload();
+//
+//            //            if (!(object instanceof FinishedCommand)) {
+//            //                throw new RuntimeException("Response was not correctly ended");
+//            //            }
+//            this.connector.disconnect();
+//        } catch ( Exception e ) {
+//            throw new RuntimeException( "Unable to execute message",
+//                                        e );
+//        }
+//
+//        return new StatefulKnowledgeSessionRemoteClient( localId,
+//                                                         this.connector,
+//                                                         this.messageSession );
+    }
+
+    public StatefulKnowledgeSession newStatefulKnowledgeSession() {
+        return newStatefulKnowledgeSession(null, null);
+    }
+
+    public Collection<StatefulKnowledgeSession> getStatefulKnowledgeSessions() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public StatelessKnowledgeSession newStatelessKnowledgeSession() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void addEventListener(KnowledgeBaseEventListener listener) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void removeEventListener(KnowledgeBaseEventListener listener) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<KnowledgeBaseEventListener> getKnowledgeBaseEventListeners() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+    
+     public static Object sendMessage(ConversationManager conversationManager,
+            Serializable addr,
+            String id,
+            Object body) {
+
+        InetSocketAddress[] sockets = null;
+        if (addr instanceof InetSocketAddress[]) {
+            sockets = (InetSocketAddress[]) addr;
+        } else if (addr instanceof InetSocketAddress) {
+            sockets = new InetSocketAddress[1];
+            sockets[0] = (InetSocketAddress) addr;
+        }
+
+
+        BlockingMessageResponseHandler handler = new BlockingMessageResponseHandler();
+        Exception exception = null;
+        for (InetSocketAddress socket : sockets) {
+            try {
+                Conversation conv = conversationManager.startConversation(socket,
+                        id);
+                conv.sendMessage(body,
+                        handler);
+                exception = null;
+            } catch (Exception e) {
+                exception = e;
+                conversationManager.endConversation();
+            }
+            if (exception == null) {
+                break;
+            }
+        }
+        if (exception != null) {
+            throw new RuntimeException("Unable to send message",
+                    exception);
+        }
+        try {
+            return handler.getMessage().getBody();
+        } finally {
+            conversationManager.endConversation();
+        }
+    }
+
+}

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBuilderProviderRemoteClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBuilderProviderRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBuilderProviderRemoteClient.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,142 @@
+/*
+ * 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.remote;
+
+import com.sun.tools.xjc.Options;
+import java.io.Serializable;
+import java.net.InetSocketAddress;
+import java.util.Arrays;
+import java.util.Properties;
+import java.util.UUID;
+import org.drools.KnowledgeBase;
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.JaxbConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.command.SetVariableCommand;
+import org.drools.command.builder.NewKnowledgeBuilderCommand;
+import org.drools.grid.GridServiceDescription;
+import org.drools.grid.internal.responsehandlers.BlockingMessageResponseHandler;
+import org.drools.grid.io.Conversation;
+import org.drools.grid.io.ConversationManager;
+import org.drools.grid.io.impl.CommandImpl;
+
+/**
+ *
+ * @author salaboy
+ */
+public class KnowledgeBuilderProviderRemoteClient implements KnowledgeBuilderFactoryService {
+
+    private ConversationManager cm;
+    private GridServiceDescription gsd;
+
+    public KnowledgeBuilderProviderRemoteClient(ConversationManager cm, GridServiceDescription gsd) {
+        this.cm = cm;
+        this.gsd = gsd;
+    }
+    
+    
+
+    public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration(Properties properties, ClassLoader... classLoader) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public DecisionTableConfiguration newDecisionTableConfiguration() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder() {
+
+        String localId = UUID.randomUUID().toString();
+        
+        CommandImpl cmd = new CommandImpl("execute",
+                Arrays.asList(new Object[]{new SetVariableCommand( "__TEMP__",
+                                                           localId,
+                                                           new NewKnowledgeBuilderCommand( null ) )}));
+        
+        sendMessage(this.cm,
+                (InetSocketAddress[]) this.gsd.getAddresses().get("socket").getObject(),
+                this.gsd.getServiceInterface().getName(),
+                cmd);
+        
+        return new KnowledgeBuilderRemoteClient( localId, this.cm );
+
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBuilderConfiguration conf) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase, KnowledgeBuilderConfiguration conf) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public JaxbConfiguration newJaxbConfiguration(Options xjcOpts, String systemId) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public static Object sendMessage(ConversationManager conversationManager,
+            Serializable addr,
+            String id,
+            Object body) {
+
+        InetSocketAddress[] sockets = null;
+        if (addr instanceof InetSocketAddress[]) {
+            sockets = (InetSocketAddress[]) addr;
+        } else if (addr instanceof InetSocketAddress) {
+            sockets = new InetSocketAddress[1];
+            sockets[0] = (InetSocketAddress) addr;
+        }
+
+
+        BlockingMessageResponseHandler handler = new BlockingMessageResponseHandler();
+        Exception exception = null;
+        for (InetSocketAddress socket : sockets) {
+            try {
+                Conversation conv = conversationManager.startConversation(socket,
+                        id);
+                conv.sendMessage(body,
+                        handler);
+                exception = null;
+            } catch (Exception e) {
+                exception = e;
+                conversationManager.endConversation();
+            }
+            if (exception == null) {
+                break;
+            }
+        }
+        if (exception != null) {
+            throw new RuntimeException("Unable to send message",
+                    exception);
+        }
+        try {
+            return handler.getMessage().getBody();
+        } finally {
+            conversationManager.endConversation();
+        }
+    }
+}

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBuilderRemoteClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBuilderRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/KnowledgeBuilderRemoteClient.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,70 @@
+/*
+ * 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.remote;
+
+import java.util.Collection;
+import org.drools.KnowledgeBase;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.ResourceConfiguration;
+import org.drools.builder.ResourceType;
+import org.drools.definition.KnowledgePackage;
+import org.drools.grid.io.ConversationManager;
+import org.drools.io.Resource;
+
+/**
+ *
+ * @author salaboy
+ */
+public class KnowledgeBuilderRemoteClient implements KnowledgeBuilder{
+
+    private String localId;
+    private ConversationManager cm;
+    
+    public KnowledgeBuilderRemoteClient(String localId, ConversationManager cm) {
+        this.localId = localId;
+        this.cm = cm;
+    }
+
+    
+    
+    public void add(Resource resource, ResourceType type) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void add(Resource resource, ResourceType type, ResourceConfiguration configuration) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<KnowledgePackage> getKnowledgePackages() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBase newKnowledgeBase() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public boolean hasErrors() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBuilderErrors getErrors() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+}

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/RemoteGridConnection.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/RemoteGridConnection.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/RemoteGridConnection.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.remote;
+
+import org.drools.grid.GridNode;
+import org.drools.grid.GridNodeConnection;
+import org.drools.grid.GridServiceDescription;
+
+
+/**
+ *
+ * @author salaboy
+ */
+public class RemoteGridConnection implements GridNodeConnection {
+    private GridNode gridNode;
+    
+    public RemoteGridConnection(GridServiceDescription gsd) {
+        this.gridNode = new GridNodeRemoteClient(gsd);
+    }
+
+    public void connect() {
+        
+    }
+
+    public void disconnect() {
+        
+    }
+
+    public GridNode getGridNode() {
+        return this.gridNode;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,284 @@
+/*
+ * 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.remote;
+
+import java.util.Collection;
+import java.util.Map;
+import org.drools.KnowledgeBase;
+import org.drools.command.Command;
+import org.drools.event.process.ProcessEventListener;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.grid.GridServiceDescription;
+import org.drools.grid.io.ConversationManager;
+import org.drools.runtime.Calendars;
+import org.drools.runtime.Channel;
+import org.drools.runtime.Environment;
+import org.drools.runtime.ExitPoint;
+import org.drools.runtime.Globals;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+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.LiveQuery;
+import org.drools.runtime.rule.QueryResults;
+import org.drools.runtime.rule.ViewChangedEventListener;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+import org.drools.time.SessionClock;
+
+/**
+ *
+ * @author salaboy
+ */
+public class StatefulKnowledgeSessionRemoteClient implements StatefulKnowledgeSession {
+    private String instanceId;
+    private GridServiceDescription gsd;
+    private ConversationManager cm;
+    public StatefulKnowledgeSessionRemoteClient(String localId, GridServiceDescription gsd, ConversationManager cm) {
+        this.instanceId = localId;
+        this.gsd = gsd;
+        this.cm = cm;
+    }
+    
+    
+
+    public int getId() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void dispose() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public int fireAllRules() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public int fireAllRules(int max) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public int fireAllRules(AgendaFilter agendaFilter) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void fireUntilHalt() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void fireUntilHalt(AgendaFilter agendaFilter) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public <T> T execute(Command<T> command) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public <T extends SessionClock> T getSessionClock() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void setGlobal(String identifier, Object object) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Object getGlobal(String identifier) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Globals getGlobals() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Calendars getCalendars() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Environment getEnvironment() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBase getKnowledgeBase() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void registerExitPoint(String name, ExitPoint exitPoint) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void unregisterExitPoint(String name) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void registerChannel(String name, Channel channel) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void unregisterChannel(String name) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Map<String, Channel> getChannels() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeSessionConfiguration getSessionConfiguration() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void halt() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Agenda getAgenda() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public WorkingMemoryEntryPoint getWorkingMemoryEntryPoint(String name) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<? extends WorkingMemoryEntryPoint> getWorkingMemoryEntryPoints() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public QueryResults getQueryResults(String query, Object... arguments) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public LiveQuery openLiveQuery(String query, Object[] arguments, ViewChangedEventListener listener) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public String getEntryPointId() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public FactHandle insert(Object object) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void retract(FactHandle handle) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void update(FactHandle handle, Object object) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public FactHandle getFactHandle(Object object) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Object getObject(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 FactHandle> Collection<T> getFactHandles() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public <T extends FactHandle> Collection<T> getFactHandles(ObjectFilter filter) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public long getFactCount() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public ProcessInstance startProcess(String processId) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public ProcessInstance startProcess(String processId, Map<String, Object> parameters) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void signalEvent(String type, Object event) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void signalEvent(String type, Object event, long processInstanceId) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<ProcessInstance> getProcessInstances() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public ProcessInstance getProcessInstance(long processInstanceId) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void abortProcessInstance(long processInstanceId) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public WorkItemManager getWorkItemManager() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void addEventListener(WorkingMemoryEventListener listener) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void removeEventListener(WorkingMemoryEventListener listener) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<WorkingMemoryEventListener> getWorkingMemoryEventListeners() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void addEventListener(AgendaEventListener listener) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void removeEventListener(AgendaEventListener listener) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<AgendaEventListener> getAgendaEventListeners() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void addEventListener(ProcessEventListener listener) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void removeEventListener(ProcessEventListener listener) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Collection<ProcessEventListener> getProcessEventListeners() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionClient.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionClient.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -131,7 +131,15 @@
         
     }
 
+    public Class getServiceInterface() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
 
+    public void setServiceInterface(Class cls) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+
     
     
     

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionImpl.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionImpl.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -19,6 +19,8 @@
 
     private Class                implementedClass;
     
+    private Class                serviceInterface;
+    
     private Map<String, Address> addresses = new HashMap<String, Address>();
     
     private Serializable               data;
@@ -45,6 +47,14 @@
     	this.id = id;
     }
 
+    public Class getServiceInterface(){
+        return this.serviceInterface;
+    }
+    
+    public void setServiceInterface(Class serviceInterface){
+        this.serviceInterface = serviceInterface;
+    }
+    
     public Class getImplementedClass() {
         return implementedClass;
     }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionJpa.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionJpa.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionJpa.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -116,6 +116,14 @@
         em.close();
     }
 
+    public Class getServiceInterface() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void setServiceInterface(Class cls) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
    
   
      

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesImpl.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesImpl.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -19,6 +19,7 @@
         
         //GridServiceDescription gsd = new GridServiceDescriptionImpl( serviceDescriptionId );
         GridServiceDescription gsd = GridServiceDescriptionFactory.newGridServiceDescritpion( serviceDescriptionId );
+        //this.directory.put(gsd.getServiceInterface().getCanonicalName() , gsd ); 
         this.directory.put(gsd.getId() , gsd ); 
         return gsd;
     }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerClient.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerClient.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -116,7 +116,7 @@
             SchedulerService sched = null;
             try {
                 // We use the ID that contains the type of the service that we are using -> refactor this and include serviceType in GSD
-                sched = grid.get((Class<SchedulerService>)Class.forName(schedulerGsd.getId()));
+                sched = grid.get((Class<SchedulerService>)Class.forName(schedulerGsd.getServiceInterface().getCanonicalName()));
             } catch (ClassNotFoundException ex) {
                 Logger.getLogger(SchedulerClient.class.getName()).log(Level.SEVERE, null, ex);
             }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerLocalConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerLocalConfiguration.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerLocalConfiguration.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -29,7 +29,7 @@
         SchedulerService sched = (this.scheduler != null) ? this.scheduler : new SchedulerImpl(this.id, grid);
         ((GridImpl) grid).addService( SchedulerService.class,
                                       sched );
-        wp.create("scheduler:"+id+"@local/local");
+        wp.create("scheduler:"+this.id+SchedulerService.class.getName());
 
     }
 

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerSocketConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerSocketConfiguration.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerSocketConfiguration.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -78,7 +78,7 @@
             
             mss.addService( this.port,
                             SchedulerService.class.getName(),
-                            ((MessageReceiverHandlerFactoryService) sched   ).getMessageReceiverHandler() );
+                            ((MessageReceiverHandlerFactoryService) sched ).getMessageReceiverHandler() );
         }
     }
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/NodeTests.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/NodeTests.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/NodeTests.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -0,0 +1,231 @@
+/*
+ * 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.net.InetSocketAddress;
+import java.util.HashMap;
+import java.util.Map;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.SystemEventListenerFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.impl.GridImpl;
+import org.drools.grid.impl.GridNodeLocalConfiguration;
+import org.drools.grid.impl.GridNodeSocketConfiguration;
+import org.drools.grid.impl.MultiplexSocketServerImpl;
+import org.drools.grid.io.impl.MultiplexSocketServiceCongifuration;
+import org.drools.grid.remote.GridNodeRemoteClient;
+import org.drools.grid.remote.mina.MinaAcceptorFactoryService;
+import org.drools.grid.service.directory.Address;
+import org.drools.grid.service.directory.WhitePages;
+import org.drools.grid.service.directory.impl.CoreServicesWhitePagesConfiguration;
+import org.drools.grid.service.directory.impl.GridServiceDescriptionImpl;
+import org.drools.grid.service.directory.impl.RegisterWhitePagesConfiguration;
+import org.drools.grid.service.directory.impl.WhitePagesLocalConfiguration;
+import org.drools.grid.service.directory.impl.WhitePagesSocketConfiguration;
+import org.drools.grid.timer.impl.CoreServicesSchedulerConfiguration;
+import org.drools.grid.timer.impl.RegisterSchedulerConfiguration;
+import org.drools.grid.timer.impl.SchedulerLocalConfiguration;
+import org.drools.grid.timer.impl.SchedulerSocketConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ *
+ * @author salaboy
+ */
+public class NodeTests {
+
+    private Map<String, GridServiceDescription> coreServicesMap;
+    
+    public NodeTests() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+   
+     @Test
+     public void basicLocalNodeTest() {
+     
+         
+         Grid grid = new GridImpl(new HashMap<String, Object>());
+         GridPeerConfiguration conf = new GridPeerConfiguration();
+         
+         GridPeerServiceConfiguration wpconf = new WhitePagesLocalConfiguration();
+         conf.addConfiguration(wpconf);
+         
+         conf.configure(grid);
+         GridServiceDescription localExecutioNodeGSD = new GridServiceDescriptionImpl("executionnode:local at local");
+         localExecutioNodeGSD.addAddress("local");
+         //GridNode gnode = grid.createGridNode("executionnode:local at local");
+         GridNode gnode = grid.createGridNode(localExecutioNodeGSD);
+         
+         KnowledgeBuilder kbuilder = gnode.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+         
+         Assert.assertNotNull(kbuilder);
+         
+         KnowledgeBase kbase = gnode.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+         
+         Assert.assertNotNull(kbase);
+         
+         StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+         
+         Assert.assertNotNull(session);
+         
+         WhitePages wp = grid.get(WhitePages.class);
+         GridServiceDescription gsd = wp.lookup("executionnode:local at local");
+         
+         gnode = grid.getGridNode(gsd.getId());
+         
+         
+         Assert.assertNotNull(gnode);
+     
+     }
+     
+      @Test
+     public void basicRemoteNodeTest() {
+     
+         
+         coreServicesMap = new HashMap<String, GridServiceDescription>();//Hazelcast.newHazelcastInstance( null ).getMap( CoreServicesWhitePages.class.getName() );
+          
+         Grid grid1 = new GridImpl(new HashMap<String, Object>()); 
+         configureGrid1(grid1, 8000);
+         
+         
+         
+          
+         Grid grid2 = new GridImpl(new HashMap<String, Object>());
+         GridPeerConfiguration conf = new GridPeerConfiguration();
+         
+         GridPeerServiceConfiguration wpconf = new WhitePagesLocalConfiguration();
+         conf.addConfiguration(wpconf);
+         
+         conf.configure(grid2);
+         
+         GridServiceDescription remoteExecutioNodeGSD = new GridServiceDescriptionImpl("executionnodeclient:mynode at remote[localhost:8080]/socket");
+         remoteExecutioNodeGSD.setServiceInterface(GridNode.class);
+         remoteExecutioNodeGSD.setImplementedClass(GridNodeRemoteClient.class);
+         Address addr = remoteExecutioNodeGSD.addAddress("socket");
+         addr.setObject(new InetSocketAddress[]{new InetSocketAddress("localhost", 8000)});
+         
+         
+         
+         GridNode gnode = grid2.createGridNode(remoteExecutioNodeGSD);
+         
+         
+         KnowledgeBuilder kbuilder = gnode.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+         
+         Assert.assertNotNull(kbuilder);
+         
+         KnowledgeBase kbase = gnode.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+         
+         Assert.assertNotNull(kbase);
+         
+         StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+         
+         Assert.assertNotNull(session);
+         
+         WhitePages wp = grid2.get(WhitePages.class);
+         GridServiceDescription gsd = wp.lookup("executionnodeclient:mynode at remote[localhost:8080]/socket");
+         
+         gnode = grid2.getGridNode(gsd.getId());
+         
+         
+         Assert.assertNotNull(gnode);
+                 
+                 
+     
+     }
+     
+     
+     private void configureGrid1(Grid grid, int port){
+    
+        //Local Grid Configuration, for our client
+        GridPeerConfiguration conf = new GridPeerConfiguration();
+
+        //Configuring the Core Services White Pages
+        GridPeerServiceConfiguration coreSeviceWPConf = new CoreServicesWhitePagesConfiguration(coreServicesMap);
+        conf.addConfiguration(coreSeviceWPConf);
+
+        //Configuring the Core Services Scheduler
+        GridPeerServiceConfiguration coreSeviceSchedulerConf = new CoreServicesSchedulerConfiguration();
+        conf.addConfiguration(coreSeviceSchedulerConf);
+
+        //Configuring the MultiplexSocketService
+        GridPeerServiceConfiguration socketConf = new MultiplexSocketServiceCongifuration(new MultiplexSocketServerImpl("127.0.0.1",
+                new MinaAcceptorFactoryService(),
+                SystemEventListenerFactory.getSystemEventListener()));
+        conf.addConfiguration(socketConf);
+        
+        //Configuring the WhitePages 
+        GridPeerServiceConfiguration wplConf = new WhitePagesLocalConfiguration();
+        conf.addConfiguration(wplConf);
+        
+        //Exposing Local WhitePages
+        GridPeerServiceConfiguration wpsc = new WhitePagesSocketConfiguration(port);
+        conf.addConfiguration(wpsc);
+        GridPeerServiceConfiguration registerwpincore = new RegisterWhitePagesConfiguration();
+        conf.addConfiguration(registerwpincore);
+
+        //Create a Local Scheduler
+        GridPeerServiceConfiguration schlConf = new SchedulerLocalConfiguration("myLocalSched");
+        conf.addConfiguration(schlConf);
+
+        //Expose it to the Grid so it can be accesed by different nodes
+        // I need to use the same port to reuse the service multiplexer
+        GridPeerServiceConfiguration schlsc = new SchedulerSocketConfiguration(port);
+        conf.addConfiguration(schlsc);
+        
+        GridPeerServiceConfiguration registerschedincore = new RegisterSchedulerConfiguration();
+        conf.addConfiguration(registerschedincore);
+        
+        
+        GridPeerServiceConfiguration executionNodeLocal = new GridNodeLocalConfiguration();
+        conf.addConfiguration(executionNodeLocal);
+        
+        GridPeerServiceConfiguration executionNodeSocket = new GridNodeSocketConfiguration(port);
+        conf.addConfiguration(executionNodeSocket);
+        
+
+        conf.configure(grid);
+        
+    
+    }
+     
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/local/LocalGridNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/local/LocalGridNodeTest.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/local/LocalGridNodeTest.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -1,8 +1,8 @@
 package org.drools.grid.local;
 
 import java.net.InetAddress;
-import java.net.InetSocketAddress;
 import java.net.UnknownHostException;
+import java.util.HashMap;
 
 import junit.framework.TestCase;
 
@@ -12,67 +12,79 @@
 import org.drools.grid.Grid;
 import org.drools.grid.GridNode;
 import org.drools.grid.GridNodeConnection;
+import org.drools.grid.GridPeerConfiguration;
+import org.drools.grid.GridPeerServiceConfiguration;
 import org.drools.grid.GridServiceDescription;
 import org.drools.grid.impl.GridImpl;
 import org.drools.grid.impl.GridNodeImpl;
-import org.drools.grid.service.directory.Address;
 import org.drools.grid.service.directory.WhitePages;
-import org.drools.grid.service.directory.impl.AddressImpl;
+import org.drools.grid.service.directory.impl.GridServiceDescriptionImpl;
+import org.drools.grid.service.directory.impl.WhitePagesLocalConfiguration;
 
 public class LocalGridNodeTest extends TestCase { 
     
     public void test(){
     
     }
-//    public void testConnectWithId() {
-//        GridNodeConnection connection = new LocalGridConnection( "test-id" );
-//        GridNode gnode = connection.getGridNode();
-//        assertNotNull( gnode );
-//    }
-//
-//    public void testConnectWithGivenGridNode() {
-//        GridNode gnode = new GridNodeImpl();
-//        GridNodeConnection connection = new LocalGridConnection( gnode );
-//        assertSame( gnode,
-//                    connection.getGridNode() );
-//    }
-//
-//    public void testGetFactoryService() {
-//        GridNodeConnection connection = new LocalGridConnection( "test-id" );
-//        GridNode gnode = connection.getGridNode();
-//        KnowledgeBuilderFactoryService kbfService = gnode.get( KnowledgeBuilderFactoryService.class );
-//        assertNotNull( kbfService );
-//    }
-//
-//    public void testSetObject() {
-//        GridNodeConnection connection = new LocalGridConnection( "test-id" );
-//        GridNode gnode = connection.getGridNode();
-//
-//        KnowledgeBaseFactoryService kbfService = gnode.get( KnowledgeBaseFactoryService.class );
-//        KnowledgeBase kbase = kbfService.newKnowledgeBase();
-//        gnode.set( "id1",
-//                   kbase );
-//        assertSame( kbase,
-//                    gnode.get( "id1",
-//                               KnowledgeBase.class ) );
-//    }
-//
-//    public void testNodeCreationAndWhitePagesRegistration() {
-//        Grid grid = new GridImpl();
-//
-//        GridNode gnode = grid.createGridNode( "test1 at domain.com" );
-//
-//        WhitePages pages = grid.get( WhitePages.class );
-//        GridServiceDescription serviceDescription = pages.lookup( "test1 at domain.com" );
-//
-//        GridNodeConnection connection = grid.getGridNodeConnection( serviceDescription );
-//        connection.connect();
-//        assertSame( gnode,
-//                    connection.getGridNode() );
-//    }
-//
+    public void testConnectWithId() {
+        GridNodeConnection connection = new LocalGridConnection( "test-id" );
+        GridNode gnode = connection.getGridNode();
+        assertNotNull( gnode );
+    }
+
+    public void testConnectWithGivenGridNode() {
+        GridNode gnode = new GridNodeImpl();
+        GridNodeConnection connection = new LocalGridConnection( gnode );
+        assertSame( gnode,
+                    connection.getGridNode() );
+    }
+
+    public void testGetFactoryService() {
+        GridNodeConnection connection = new LocalGridConnection( "test-id" );
+        GridNode gnode = connection.getGridNode();
+        KnowledgeBuilderFactoryService kbfService = gnode.get( KnowledgeBuilderFactoryService.class );
+        assertNotNull( kbfService );
+    }
+
+    public void testSetObject() {
+        GridNodeConnection connection = new LocalGridConnection( "test-id" );
+        GridNode gnode = connection.getGridNode();
+
+        KnowledgeBaseFactoryService kbfService = gnode.get( KnowledgeBaseFactoryService.class );
+        KnowledgeBase kbase = kbfService.newKnowledgeBase();
+        gnode.set( "id1",
+                   kbase );
+        assertSame( kbase,
+                    gnode.get( "id1",
+                               KnowledgeBase.class ) );
+    }
+
+    public void testNodeCreationAndWhitePagesRegistration() {
+        Grid grid = new GridImpl(new HashMap<String,Object>());
+        
+        GridPeerConfiguration conf = new GridPeerConfiguration();
+        
+        //Configuring the WhitePages 
+        GridPeerServiceConfiguration wplConf = new WhitePagesLocalConfiguration();
+        conf.addConfiguration(wplConf);
+        
+        conf.configure(grid);
+        
+        GridServiceDescription gsd = new GridServiceDescriptionImpl("test1 at local");
+        gsd.addAddress("local");
+        GridNode gnode = grid.createGridNode( gsd );
+
+        WhitePages pages = grid.get( WhitePages.class );
+        GridServiceDescription serviceDescription = pages.lookup( "test1 at local" );
+
+        GridNodeConnection connection = grid.getGridNodeConnection( serviceDescription );
+        connection.connect();
+        assertSame( gnode,
+                    connection.getGridNode() );
+    }
+
 //    public void testWhitePagesAddRemoveAddresss() {
-//        Grid grid = new GridImpl();
+//        Grid grid = new GridImpl(new HashMap<String,Object>());
 //
 //        GridNode gnode = grid.createGridNode( "test1 at domain.com" );
 //        assertNotNull( gnode );
@@ -101,15 +113,15 @@
 //                      serviceDescription.getAddresses().size() );
 //
 //    }
-//
-//    private InetAddress getLocalAddress() {
-//        try {
-//            return InetAddress.getLocalHost();
-//        } catch ( UnknownHostException e ) {
-//            throw new RuntimeException( "Unable to lookup local address",
-//                                        e );
-//        }
-//
-//    }
 
+    private InetAddress getLocalAddress() {
+        try {
+            return InetAddress.getLocalHost();
+        } catch ( UnknownHostException e ) {
+            throw new RuntimeException( "Unable to lookup local address",
+                                        e );
+        }
+
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/io/mina/RegisterServicesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/io/mina/RegisterServicesTest.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/io/mina/RegisterServicesTest.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -141,7 +141,7 @@
         WhitePages wp = grid.get(WhitePages.class);
 
         //Local sched in Local WP
-        GridServiceDescription gsdLocalSched = wp.lookup(SchedulerService.class.getName());
+        GridServiceDescription gsdLocalSched = wp.lookup("scheduler:"+"myLocalSched"+SchedulerService.class.getName());
 
         //Get the CoreWhitePages
         CoreServicesWhitePages corewp = grid.get(CoreServicesWhitePages.class);
@@ -166,14 +166,14 @@
         SchedulerClient sched = null;
         
         
-        GridServiceDescription clientSched1 = wp.lookup(SchedulerService.class.getName());
+        GridServiceDescription clientSched1 = wp.lookup("scheduler:"+"myLocalSched"+SchedulerService.class.getName());
         sched = new SchedulerClient(grid, clientSched1, cm);
         sched.scheduleJob(new MockJob(), new MockJobContext("xxx"), new MockTrigger(new Date(1000)));
         
         sched = new SchedulerClient(grid, gsdLocalButExposedSched, cm);
         sched.scheduleJob(new MockJob(), new MockJobContext("xxx"), new MockTrigger(new Date(1000)));
         
-        //@TODO: FIX THIS! something weird is happening with the handlers..
+        
         //GridServiceDescription clientSched2 = new WhitePagesClient( gsdLocalButExposedWp, cm).lookup(SchedulerService.class.getName());
         
         

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/io/mina/WhitePagesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/io/mina/WhitePagesTest.java	2010-11-05 15:41:52 UTC (rev 35883)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/io/mina/WhitePagesTest.java	2010-11-05 15:54:32 UTC (rev 35884)
@@ -82,17 +82,18 @@
         conf.configure( grid2 );
 
         WhitePages wpClient = grid2.get( WhitePages.class );
+        
 
-        GridServiceDescription test1Gsd  = wpClient.create( "test1 at domain1" );
+        GridServiceDescription test1Gsd  = wpClient.create( "test:string at domain1" );
 
-        GridServiceDescription testGsd_2 = wpClient.lookup( "test1 at domain1" );
+        GridServiceDescription testGsd_2 = wpClient.lookup( "test:string at domain1" );
         assertEquals( test1Gsd,
                       testGsd_2 );
         assertNotSame( test1Gsd,
                        testGsd_2 );
 
         WhitePages localWhitePages = grid1.get( WhitePages.class );
-        GridServiceDescription testGsd_3 = localWhitePages.lookup( "test1 at domain1" );
+        GridServiceDescription testGsd_3 = localWhitePages.lookup( "test:string at domain1" );
 
         assertEquals( test1Gsd,
                       testGsd_3 );
@@ -130,7 +131,7 @@
         
         WhitePages wplocal= grid1.get(WhitePages.class);
         Assert.assertNotNull(wplocal);
-        GridServiceDescription schedulersgsd = wplocal.lookup(SchedulerService.class.getName());
+        GridServiceDescription schedulersgsd = wplocal.lookup("scheduler:"+"myLocalSched1"+SchedulerService.class.getName());
     
         Assert.assertNotNull(schedulersgsd);
   



More information about the jboss-svn-commits mailing list