[jboss-svn-commits] JBL Code SVN: r35751 - 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
Tue Oct 26 15:35:22 EDT 2010


Author: salaboy21
Date: 2010-10-26 15:35:21 -0400 (Tue, 26 Oct 2010)
New Revision: 35751

Added:
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/ServiceFactory.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridServiceDescriptionFactory.java
Modified:
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/CoreServicesWhitePages.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/GridNodeConnection.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/service/directory/Address.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/AddressImpl.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/CoreServicesWhitePagesConfiguration.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/CoreServicesWhitePagesImpl.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/JpaWhitePages.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesClient.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/service/directory/impl/WhitePagesPeeredConfiguration.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesSocketConfiguration.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/Scheduler.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/CoreServicesSchedulerConfiguration.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/ScheduledJob.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/ScheduledJobConfiguration.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/SchedulerImpl.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/SchedulerRemoteConfiguration.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/time/impl/DistributedSchedulerTest.java
   labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/io/mina/WhitePagesTest.java
Log:
JBRULES-2746: Drools Grid Impl2
	- Support for multiple addresses for the same service. 
            - Add multiple Scheduler tests (not finished but working)

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/CoreServicesWhitePages.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/CoreServicesWhitePages.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/CoreServicesWhitePages.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -1,5 +1,8 @@
 package org.drools.grid;
 
+import java.util.Map;
+
 public interface CoreServicesWhitePages {
-    GridServiceDescription lookup(Class cls);
+   public GridServiceDescription lookup(Class cls);
+   public Map<String, GridServiceDescription> getServices();
 }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/GridNodeConnection.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/GridNodeConnection.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/GridNodeConnection.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -16,8 +16,6 @@
  */
 package org.drools.grid;
 
-import java.util.List;
-
 /**
  *
  * @author salaboy

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-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/GridServiceDescription.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -5,16 +5,16 @@
 
 import org.drools.grid.service.directory.Address;
 
-    public interface GridServiceDescription {
+public interface GridServiceDescription {
     public String getId();
-    
-    public Class getImplementedClass();  
-    
+
+    public Class getImplementedClass();
+
     public void setImplementedClass(Class cls);
-    
+
     public Map<String, Address> getAddresses();
-    
+
     public Address addAddress(String transport);
-    
+
     public void removeAddress(String transport);
 }

Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/ServiceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/ServiceFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/ServiceFactory.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -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;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ServiceFactory {
+    public static <T> T newServiceInstance(Class<T> serviceClass, GridServiceDescription gsd) {
+        T t = null;
+        try {
+            Class clazz =  Class.forName(gsd.getImplementedClass().getCanonicalName());
+            Constructor constructor = clazz.getConstructor(String.class, GridServiceDescription.class);
+            t = (T)constructor.newInstance("thisID", gsd);
+        } catch (InstantiationException ex) {
+            Logger.getLogger(ServiceFactory.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IllegalAccessException ex) {
+            Logger.getLogger(ServiceFactory.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IllegalArgumentException ex) {
+            Logger.getLogger(ServiceFactory.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (InvocationTargetException ex) {
+            Logger.getLogger(ServiceFactory.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (NoSuchMethodException ex) {
+            Logger.getLogger(ServiceFactory.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (SecurityException ex) {
+            Logger.getLogger(ServiceFactory.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (ClassNotFoundException ex) {
+            Logger.getLogger(ServiceFactory.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        return t;
+    
+    }
+}

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-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridImpl.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -11,13 +11,9 @@
 import org.drools.grid.GridNode;
 import org.drools.grid.GridNodeConnection;
 import org.drools.grid.GridServiceDescription;
-import org.drools.grid.MessageReceiverHandlerFactoryService;
-import org.drools.grid.MultiplexSocketService;
 import org.drools.grid.local.LocalGridConnection;
 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.WhitePagesImpl;
 
 public class GridImpl implements Grid {
     private Map<String, Object> services;

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/impl/GridServiceDescriptionFactory.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.impl;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.grid.GridServiceDescription;
+import org.drools.grid.service.directory.impl.GridServiceDescriptionImpl;
+
+/**
+ *
+ * @author salaboy
+ */
+public class GridServiceDescriptionFactory {
+    
+    public static GridServiceDescription newGridServiceDescritpion(String serviceId){
+        GridServiceDescription gsd = new GridServiceDescriptionImpl(serviceId);
+        try {
+            
+            String[] clazzName = serviceId.split(":");
+            if(clazzName[0].equals("scheduler")){
+                gsd.setImplementedClass(Class.forName("org.drools.grid.timer.impl.SchedulerImpl"));
+            }
+             if(clazzName[0].equals("schedulerclient")){
+                gsd.setImplementedClass(Class.forName("org.drools.grid.timer.impl.SchedulerClient"));
+            }
+            
+        } catch (ClassNotFoundException ex) {
+            Logger.getLogger(GridServiceDescriptionFactory.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        return gsd;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/Address.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/Address.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/Address.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -1,17 +1,18 @@
 package org.drools.grid.service.directory;
 
-import java.net.URL;
 
-import javax.persistence.Entity;
 
 import org.drools.grid.GridServiceDescription;
 
 public interface Address {
+    
     public GridServiceDescription getGridServiceDescription();
     
     public String getTransport();
     
     public Object getObject();
+    
     public void setObject(Object object);
+  
     
 }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/AddressImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/AddressImpl.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/AddressImpl.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -87,4 +87,6 @@
         return "Address id=" + id + " tranport=" + transport + " object=" + object;
     }
 
+   
+
 }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/CoreServicesWhitePagesConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/CoreServicesWhitePagesConfiguration.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/CoreServicesWhitePagesConfiguration.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -10,7 +10,6 @@
 import org.drools.grid.GridPeerServiceConfiguration;
 import org.drools.grid.GridServiceDescription;
 import org.drools.grid.impl.GridImpl;
-import org.drools.grid.service.directory.impl.CoreServicesWhitePagesImpl;
 
 public class CoreServicesWhitePagesConfiguration
     implements

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/CoreServicesWhitePagesImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/CoreServicesWhitePagesImpl.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/CoreServicesWhitePagesImpl.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -11,13 +11,13 @@
     public CoreServicesWhitePagesImpl(Map<String, GridServiceDescription> services) {
         this.services = services;
     }
-    
+
     public Map<String, GridServiceDescription> getServices() {
         return services;
     }
 
     public GridServiceDescription lookup(Class cls) {
-        return this.services.get( cls.getName() );
+        return this.services.get(cls.getName());
     }
 
 }

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-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionClient.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -105,6 +105,14 @@
         return hash;
     }
 
+    public Class getServiceTypeClass() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void setServiceTypeClass(Class clazz) {
+        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-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionImpl.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -1,9 +1,12 @@
 package org.drools.grid.service.directory.impl;
 
 import java.io.Serializable;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 import org.drools.grid.GridServiceDescription;
 import org.drools.grid.service.directory.Address;
@@ -16,7 +19,7 @@
     private String               id;
 
     private Class                implementedClass;
-  
+    
     private Map<String, Address> addresses = new HashMap<String, Address>();
     
     public GridServiceDescriptionImpl() {
@@ -24,10 +27,12 @@
     }
 
     public GridServiceDescriptionImpl(Class cls) {
-        this( cls.getName() );
+        this( cls.getCanonicalName() );
+        this.implementedClass = cls;
     }
     
     public GridServiceDescriptionImpl(String id) {
+        
         this.id = id;
     }
 
@@ -83,4 +88,21 @@
         return true;
     }
 
+
+    @Override
+    public String toString() {
+        String result =  id + "@";
+        
+        Set<String> keys = addresses.keySet();
+        for(String key : keys){
+            if(addresses.get(key).getObject() instanceof InetSocketAddress[] ){
+                result += key+"=["+((InetSocketAddress[])addresses.get(key).getObject())[0].getHostName()+":"+
+                        ((InetSocketAddress[])addresses.get(key).getObject())[0].getPort()+"]/"+addresses.get(key).getTransport();
+            }
+        }
+        return result;
+    }
+    
+    
+
 }

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-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/GridServiceDescriptionJpa.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -99,5 +99,13 @@
         hash = 89 * hash + (this.detached != null ? this.detached.hashCode() : 0);
         return hash;
     }
+
+    public Class getServiceTypeClass() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void setServiceTypeClass(Class clazz) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
      
 }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/JpaWhitePages.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/JpaWhitePages.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/JpaWhitePages.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -1,8 +1,7 @@
 package org.drools.grid.service.directory.impl;
 
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
+import java.util.List;
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
@@ -54,6 +53,10 @@
         return new WhitePagesServer( this );
     }
 
+    public List<GridServiceDescription> lookupServices(Class clazz) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
     //    public GridServiceDescription create(GridServiceDescription serviceDescription) {
     //        EntityManager em = emf.createEntityManager();
     //        em.getTransaction().begin();

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesClient.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesClient.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -1,7 +1,10 @@
 package org.drools.grid.service.directory.impl;
 
 import java.net.InetSocketAddress;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
+import org.drools.SystemEventListenerFactory;
 
 import org.drools.grid.GridServiceDescription;
 import org.drools.grid.MessageReceiverHandlerFactoryService;
@@ -10,6 +13,8 @@
 import org.drools.grid.io.ConversationManager;
 import org.drools.grid.io.MessageReceiverHandler;
 import org.drools.grid.io.impl.CommandImpl;
+import org.drools.grid.io.impl.ConversationManagerImpl;
+import org.drools.grid.remote.mina.MinaConnector;
 import org.drools.grid.service.directory.Address;
 import org.drools.grid.service.directory.WhitePages;
 
@@ -26,6 +31,11 @@
         this.whitePagesGsd = gsd;
         this.conversationManager = conversationManager;
     }
+    
+    public WhitePagesClient(GridServiceDescription gsd) {
+        this.whitePagesGsd = gsd;
+        this.conversationManager = new ConversationManagerImpl("wpclient", new MinaConnector(), SystemEventListenerFactory.getSystemEventListener());
+    }
 
     public static Object sendMessage(ConversationManager conversationManager,
                                      InetSocketAddress[] sockets,
@@ -35,7 +45,7 @@
         Exception exception = null;
         for ( InetSocketAddress socket : sockets ) {
             try {
-                Conversation conv = conversationManager.startConversation( sockets[0],
+                Conversation conv = conversationManager.startConversation( socket,
                                                                            id );
                 conv.sendMessage( body,
                                   handler );
@@ -99,6 +109,26 @@
         return new WhitePagesServer( this );
     }
 
+    public List<GridServiceDescription> lookupServices(Class clazz) {
+        InetSocketAddress[] sockets = (InetSocketAddress[]) ((Address) whitePagesGsd.getAddresses().get( "socket" )).getObject();
+        CommandImpl cmd = new CommandImpl( "WhitePages.lookupServices",
+                                           Arrays.asList( new Object[]{ clazz } ) );
+        List<GridServiceDescription> gsds = ( List<GridServiceDescription> ) sendMessage( this.conversationManager,
+                                                                             sockets,
+                                                                             this.whitePagesGsd.getId(),
+                                                                             cmd);
+        List<GridServiceDescription> result = new ArrayList<GridServiceDescription>();                                                                    
+        
+        for(GridServiceDescription gsd : gsds){
+           result.add( new GridServiceDescriptionClient(gsd,
+                                        this.whitePagesGsd,
+                                        this.conversationManager )); 
+        }
+         
+             
+        return result;
+    }
+
     //    public void addAddress(String id,
     //                           Address address) {               
     //        InetSocketAddress[] sockets = ( InetSocketAddress[] ) ((Address) whitePagesGsd.getAddresses().get( "socket" )).getObject();

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-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesImpl.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -1,27 +1,32 @@
 package org.drools.grid.service.directory.impl;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.drools.grid.GridServiceDescription;
 import org.drools.grid.MessageReceiverHandlerFactoryService;
+import org.drools.grid.impl.GridServiceDescriptionFactory;
 import org.drools.grid.io.MessageReceiverHandler;
-import org.drools.grid.service.directory.Address;
 import org.drools.grid.service.directory.WhitePages;
 
 public class WhitePagesImpl implements WhitePages, MessageReceiverHandlerFactoryService {
     private Map<String, GridServiceDescription> directory = new ConcurrentHashMap<String, GridServiceDescription>();
-
+    
+    
     public GridServiceDescription create(String serviceDescriptionId) {
-        GridServiceDescription gsd = new GridServiceDescriptionImpl( serviceDescriptionId );
-        this.directory.put( serviceDescriptionId, gsd );
+        
+        //GridServiceDescription gsd = new GridServiceDescriptionImpl( serviceDescriptionId );
+        GridServiceDescription gsd = GridServiceDescriptionFactory.newGridServiceDescritpion( serviceDescriptionId );
+        this.directory.put( serviceDescriptionId, gsd ); 
         return gsd;
     }
 
     public GridServiceDescription lookup(String serviceDescriptionId) {
         return this.directory.get( serviceDescriptionId );
     }
-
+    
     public void remove(String serviceDescriptionId) {
         this.directory.remove( serviceDescriptionId );
     }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesPeeredConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesPeeredConfiguration.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesPeeredConfiguration.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -9,6 +9,7 @@
 public class WhitePagesPeeredConfiguration
     implements
     GridPeerServiceConfiguration {
+    
     public void configureService(Grid grid) {
 
     }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesSocketConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesSocketConfiguration.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/service/directory/impl/WhitePagesSocketConfiguration.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -3,11 +3,13 @@
  */
 package org.drools.grid.service.directory.impl;
 
+import java.io.Serializable;
 import java.net.InetSocketAddress;
 
 import org.drools.grid.CoreServicesWhitePages;
 import org.drools.grid.Grid;
 import org.drools.grid.GridPeerServiceConfiguration;
+import org.drools.grid.GridServiceDescription;
 import org.drools.grid.MessageReceiverHandlerFactoryService;
 import org.drools.grid.MultiplexSocketService;
 import org.drools.grid.service.directory.Address;
@@ -30,22 +32,40 @@
         WhitePages wp = grid.get( WhitePages.class );
 
         if ( port != -1 ) {
-            CoreServicesWhitePagesImpl coreServices = (CoreServicesWhitePagesImpl) grid.get( CoreServicesWhitePages.class );
+            CoreServicesWhitePagesImpl coreServicesWP = (CoreServicesWhitePagesImpl) grid.get( CoreServicesWhitePages.class );
 
-            GridServiceDescriptionImpl gsd = (GridServiceDescriptionImpl) coreServices.lookup( WhitePages.class );
+            GridServiceDescriptionImpl gsd = (GridServiceDescriptionImpl) coreServicesWP.lookup( WhitePages.class );
             if ( gsd == null ) {
                 gsd = new GridServiceDescriptionImpl( WhitePages.class );
             }
 
             MultiplexSocketService mss = grid.get( MultiplexSocketService.class );
 
-            Address address = gsd.addAddress( "socket" );
-            address.setObject(  new InetSocketAddress[]{ new InetSocketAddress( mss.getIp(),
-                                                         this.port ) } );
-
-            coreServices.getServices().put( WhitePages.class.getName(),
-                                            gsd );
-
+            GridServiceDescription service = coreServicesWP.getServices().get( WhitePages.class.getName() );
+            if( service == null){
+                coreServicesWP.getServices().put(WhitePages.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();
+            int newAddressesLenght = 1;
+            if(addresses != null){
+                newAddressesLenght = addresses.length + 1;
+            }
+            InetSocketAddress[] newAddresses = new InetSocketAddress[newAddressesLenght];
+            if(addresses !=null){
+                System.arraycopy(addresses, 0, newAddresses, 0, addresses.length);
+            }
+            newAddresses[newAddressesLenght-1]= new InetSocketAddress( mss.getIp(),
+                                                         this.port);
+            address.setObject(  newAddresses );
+                                           
             mss.addService( this.port,
                             WhitePages.class.getName(),
                             ((MessageReceiverHandlerFactoryService) wp).getMessageReceiverHandler() );

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/Scheduler.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/Scheduler.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/Scheduler.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -27,6 +27,7 @@
  * @author salaboy
  */
 public interface Scheduler {
+    public String getId();
     public void scheduleJob(ScheduledJob job);
     public void removeJob(String jobId);
     

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/CoreServicesSchedulerConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/CoreServicesSchedulerConfiguration.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/CoreServicesSchedulerConfiguration.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -4,24 +4,26 @@
 package org.drools.grid.timer.impl;
 
 
-import java.util.Map;
+import org.drools.grid.CoreServicesWhitePages;
 import org.drools.grid.Grid;
 import org.drools.grid.GridPeerServiceConfiguration;
-import org.drools.grid.GridServiceDescription;
 import org.drools.grid.impl.GridImpl;
+import org.drools.grid.service.directory.impl.GridServiceDescriptionImpl;
 import org.drools.grid.timer.CoreServicesScheduler;
 
 public class CoreServicesSchedulerConfiguration
     implements
     GridPeerServiceConfiguration {
-    private Map<String, GridServiceDescription> services;
 
-    public CoreServicesSchedulerConfiguration(Map<String, GridServiceDescription> services) {
-        this.services = services;
+    public CoreServicesSchedulerConfiguration() {
+        
     }
 
     public void configureService(Grid grid) {
+        CoreServicesWhitePages wp = grid.get(CoreServicesWhitePages.class);
+        
         ((GridImpl) grid).addService( CoreServicesScheduler.class,
-                                      new CoreServicesSchedulerImpl( new SchedulerImpl(grid) ) );
+                                      new CoreServicesSchedulerImpl( new SchedulerImpl("scheduler:core",grid) ) );
+        wp.getServices().put(CoreServicesScheduler.class.getName(), new GridServiceDescriptionImpl(CoreServicesScheduler.class));
     }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/ScheduledJob.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/ScheduledJob.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/ScheduledJob.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -111,6 +111,7 @@
         out.writeObject( this.trigger );
         out.writeLong( this.nextFireTime.getTime() );
         out.writeObject( this.ctx );
+        out.writeObject( this.configuration);
     }
     
     public void readExternal(ObjectInput in) throws IOException,
@@ -120,6 +121,7 @@
         this.trigger = ( Serializable ) in.readObject();
         this.nextFireTime = new Date( in.readLong() );
         this.ctx = ( Serializable ) in.readObject();
+        this.configuration = (ScheduledJobConfiguration) in.readObject();
     }
 
 

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/ScheduledJobConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/ScheduledJobConfiguration.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/ScheduledJobConfiguration.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -29,6 +29,10 @@
 public class ScheduledJobConfiguration implements Externalizable {
     private int redundancy = 1;
 
+    public ScheduledJobConfiguration() {
+    }
+
+    
     public ScheduledJobConfiguration(int redundancy) {
         this.redundancy = redundancy;
     }
@@ -44,11 +48,11 @@
     
     
     public void writeExternal(ObjectOutput out) throws IOException {
-        throw new UnsupportedOperationException("Not supported yet.");
+        out.writeInt(redundancy);
     }
 
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        throw new UnsupportedOperationException("Not supported yet.");
+        this.redundancy = in.readInt();
     }
     
 }

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-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerClient.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -17,8 +17,10 @@
 
 package org.drools.grid.timer.impl;
 
+import java.io.Serializable;
 import java.net.InetSocketAddress;
 import java.util.Arrays;
+import org.drools.SystemEventListenerFactory;
 import org.drools.grid.GridServiceDescription;
 import org.drools.grid.MessageReceiverHandlerFactoryService;
 import org.drools.grid.internal.responsehandlers.BlockingMessageResponseHandler;
@@ -26,6 +28,8 @@
 import org.drools.grid.io.ConversationManager;
 import org.drools.grid.io.MessageReceiverHandler;
 import org.drools.grid.io.impl.CommandImpl;
+import org.drools.grid.io.impl.ConversationManagerImpl;
+import org.drools.grid.remote.mina.MinaConnector;
 import org.drools.grid.service.directory.Address;
 import org.drools.grid.timer.Scheduler;
 
@@ -40,13 +44,29 @@
 
     private ConversationManager    conversationManager;
 
-    public SchedulerClient(GridServiceDescription schedulerGsd, ConversationManager conversationManager) {
+    private String id;
+    
+    public SchedulerClient(String id, GridServiceDescription schedulerGsd) {
+        this.id = id;
         this.schedulerGsd = schedulerGsd;
+        this.conversationManager = new ConversationManagerImpl(id, new MinaConnector(), SystemEventListenerFactory.getSystemEventListener());
+    }
+    
+    public SchedulerClient(String id, GridServiceDescription schedulerGsd, ConversationManager conversationManager) {
+        this.id = id;
+        this.schedulerGsd = schedulerGsd;
         this.conversationManager = conversationManager;
     }
     
     
-    
+    public void scheduleJob(ScheduledJob job, Serializable addr) {
+        CommandImpl cmd = new CommandImpl( "Scheduler.scheduleJob",
+                                           Arrays.asList( new Object[]{ job } ) ); 
+        sendMessage( this.conversationManager,
+                     addr,
+                     this.schedulerGsd.getId(),
+                     cmd );     
+    }
     public void scheduleJob(ScheduledJob job) {
         InetSocketAddress[] sockets = (InetSocketAddress[]) ((Address) schedulerGsd.getAddresses().get( "socket" )).getObject();
         CommandImpl cmd = new CommandImpl( "Scheduler.scheduleJob",
@@ -54,7 +74,7 @@
         sendMessage( this.conversationManager,
                      sockets,
                      this.schedulerGsd.getId(),
-                     cmd );        
+                     cmd );    
     }
 
     public void removeJob(String jobId) {
@@ -62,14 +82,24 @@
     }
     
     public static Object sendMessage(ConversationManager conversationManager,
-                                     InetSocketAddress[] sockets,
+                                     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( sockets[0],
+                Conversation conv = conversationManager.startConversation( socket,
                                                                            id );
                 conv.sendMessage( body,
                                   handler );
@@ -98,4 +128,8 @@
         return new SchedulerServer( this );
     }
 
+    public String getId() {
+        return this.id;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerImpl.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerImpl.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -17,13 +17,14 @@
 
 package org.drools.grid.timer.impl;
 
-import java.util.Map;
-import org.drools.grid.CoreServicesWhitePages;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.grid.ServiceFactory;
 import org.drools.grid.Grid;
 import org.drools.grid.GridServiceDescription;
 import org.drools.grid.MessageReceiverHandlerFactoryService;
 import org.drools.grid.io.MessageReceiverHandler;
-import org.drools.grid.service.directory.impl.CoreServicesWhitePagesImpl;
+import org.drools.grid.service.directory.WhitePages;
 import org.drools.grid.timer.Scheduler;
 import org.drools.time.TimerService;
 import org.drools.time.impl.JDKTimerService;
@@ -34,21 +35,27 @@
  */
 public class SchedulerImpl implements Scheduler, MessageReceiverHandlerFactoryService{
     private TimerService timer =  new JDKTimerService();
+    private String id;
     private Grid grid; 
     
-    public SchedulerImpl(Grid grid){
+    public SchedulerImpl(String id, Grid grid){
+        this.id = id;
         this.grid = grid;
     }
     
     public void scheduleJob(ScheduledJob job) {
-      //  if(job.getConfiguration().getRedundancy() == 1){
+        if(job.getConfiguration().getRedundancy() == 1){
             timer.scheduleJob(job.getJob(), job.getJobContext(), job.getTrigger());
         
-//        }else if(job.getConfiguration().getRedundancy() > 1){
-//           CoreServicesWhitePagesImpl coreWhitePages = (CoreServicesWhitePagesImpl)grid.get(CoreServicesWhitePages.class);
-//           Map<String, GridServiceDescription> services = coreWhitePages.getServices();
-//           services.get(Scheduler)
-//        }
+        }else if(job.getConfiguration().getRedundancy() > 1){
+           WhitePages wp = grid.get(WhitePages.class);
+           GridServiceDescription schedservice = wp.lookup(Scheduler.class.getName()); 
+           
+           Scheduler sched = ServiceFactory.newServiceInstance(Scheduler.class, schedservice);
+           sched.scheduleJob(job);
+           
+           
+        }
         
     }
 
@@ -59,6 +66,14 @@
     public MessageReceiverHandler getMessageReceiverHandler() {
         return new SchedulerServer(this);
     }
+
+    public String getId() {
+        return this.id;
+    }
+
+    public Grid getGrid() {
+        return grid;
+    }
     
     
    

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-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerLocalConfiguration.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -6,6 +6,7 @@
 import org.drools.grid.Grid;
 import org.drools.grid.GridPeerServiceConfiguration;
 import org.drools.grid.impl.GridImpl;
+import org.drools.grid.service.directory.WhitePages;
 import org.drools.grid.timer.Scheduler;
 
 public class SchedulerLocalConfiguration
@@ -13,9 +14,10 @@
     GridPeerServiceConfiguration {
 
     private Scheduler scheduler;
+    private String id;
 
-    public SchedulerLocalConfiguration() {
-
+    public SchedulerLocalConfiguration(String id) {
+        this.id =  id;
     }
 
     public void setScheduler(Scheduler scheduler) {
@@ -23,9 +25,11 @@
     }
 
     public void configureService(Grid grid) {
-        Scheduler sched = (this.scheduler != null) ? this.scheduler : new SchedulerImpl(grid);
+        WhitePages wp = grid.get(WhitePages.class);
+        Scheduler sched = (this.scheduler != null) ? this.scheduler : new SchedulerImpl(this.id, grid);
         ((GridImpl) grid).addService( Scheduler.class,
                                       sched );
+        wp.create("scheduler:"+sched.getId()+"@local/local");
 
     }
 

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerRemoteConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerRemoteConfiguration.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerRemoteConfiguration.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -14,9 +14,11 @@
 public class SchedulerRemoteConfiguration
     implements
     GridPeerServiceConfiguration {
-    ConversationManager cm;
+    private ConversationManager cm;
+    
 
-    public SchedulerRemoteConfiguration(ConversationManager cm) {
+    public SchedulerRemoteConfiguration( ConversationManager cm) {
+        
         this.cm = cm;
     }
 
@@ -25,7 +27,7 @@
 
         GridServiceDescriptionImpl gsd = (GridServiceDescriptionImpl) coreServices.lookup( Scheduler.class );
 
-        Scheduler scheduler = new SchedulerClient( gsd, 
+        Scheduler scheduler = new SchedulerClient(gsd.getId(), gsd, 
                                               cm );
         ((GridImpl) grid).addService( Scheduler.class,
                                       scheduler );

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-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/main/java/org/drools/grid/timer/impl/SchedulerSocketConfiguration.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -9,11 +9,11 @@
 
 import org.drools.grid.Grid;
 import org.drools.grid.GridPeerServiceConfiguration;
+import org.drools.grid.GridServiceDescription;
 import org.drools.grid.MessageReceiverHandlerFactoryService;
 import org.drools.grid.MultiplexSocketService;
 import org.drools.grid.service.directory.Address;
 import org.drools.grid.service.directory.WhitePages;
-import org.drools.grid.timer.CoreServicesScheduler;
 import org.drools.grid.timer.Scheduler;
 
 public class SchedulerSocketConfiguration
@@ -42,13 +42,32 @@
 
             MultiplexSocketService mss = grid.get( MultiplexSocketService.class );
 
-            Address address = gsd.addAddress( "socket" );
-            address.setObject(  new InetSocketAddress[]{ new InetSocketAddress( mss.getIp(),
-                                                         this.port ) } );
-
-            coreServicesWP.getServices().put( Scheduler.class.getName(),
-                                            gsd );
-
+            
+            GridServiceDescription service = coreServicesWP.getServices().get( Scheduler.class.getName() );
+            if( service == null){
+                coreServicesWP.getServices().put(Scheduler.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();
+            int newAddressesLenght = 1;
+            if(addresses != null){
+                newAddressesLenght = addresses.length + 1;
+            }
+            InetSocketAddress[] newAddresses = new InetSocketAddress[newAddressesLenght];
+            if(addresses !=null){
+                System.arraycopy(addresses, 0, newAddresses, 0, addresses.length);
+            }
+            newAddresses[newAddressesLenght-1]= new InetSocketAddress( mss.getIp(),
+                                                         this.port);
+            address.setObject(  newAddresses );
+           
+            
             mss.addService( this.port,
                             Scheduler.class.getName(),
                             ((MessageReceiverHandlerFactoryService) sched   ).getMessageReceiverHandler() );

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/time/impl/DistributedSchedulerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/time/impl/DistributedSchedulerTest.java	2010-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/grid/time/impl/DistributedSchedulerTest.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -9,6 +9,7 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicLong;
+import junit.framework.Assert;
 
 import org.drools.SystemEventListener;
 import org.drools.SystemEventListenerFactory;
@@ -29,6 +30,8 @@
 import org.drools.time.Trigger;
 
 import junit.framework.TestCase;
+import org.drools.grid.CoreServicesWhitePages;
+import org.drools.grid.Grid;
 import org.drools.grid.GridPeerConfiguration;
 import org.drools.grid.GridPeerServiceConfiguration;
 import org.drools.grid.GridServiceDescription;
@@ -43,6 +46,7 @@
 import org.drools.grid.service.directory.impl.WhitePagesSocketConfiguration;
 import org.drools.grid.timer.Scheduler;
 import org.drools.grid.timer.impl.CoreServicesSchedulerConfiguration;
+import org.drools.grid.timer.impl.ScheduledJobConfiguration;
 import org.drools.grid.timer.impl.SchedulerImpl;
 import org.drools.grid.timer.impl.SchedulerLocalConfiguration;
 import org.drools.grid.timer.impl.SchedulerRemoteConfiguration;
@@ -52,7 +56,7 @@
 
     private Acceptor acc = new MinaAcceptor();
     private SystemEventListener l = SystemEventListenerFactory.getSystemEventListener();
-
+    private Map<String, GridServiceDescription> coreServicesMap;
     @Override
     public void setUp() {
     }
@@ -106,13 +110,13 @@
     public void testDistributedJobSchedullingLocal() {
 
         GridImpl grid = new GridImpl(new ConcurrentHashMap<String, Object>());
-        grid.addService(Scheduler.class, new SchedulerImpl(grid));
+        grid.addService(Scheduler.class, new SchedulerImpl("myLocalSched",grid));
 
         Scheduler scheduler = grid.get(Scheduler.class);
 
         UuidJobHandle handle = new UuidJobHandle();
-        ScheduledJob sj1 = new ScheduledJob(handle, new MockJob(), new MockJobContext("xxx"), new MockTrigger(new Date(1000)));
-        ScheduledJob sj2 = new ScheduledJob(handle, new MockJob(), new MockJobContext("xxx"), new MockTrigger(new Date(1000)));
+        ScheduledJob sj1 = new ScheduledJob(handle, new MockJob(), new MockJobContext("xxx"), new MockTrigger(new Date(1000)), new ScheduledJobConfiguration(1));
+        ScheduledJob sj2 = new ScheduledJob(handle, new MockJob(), new MockJobContext("xxx"), new MockTrigger(new Date(1000)), new ScheduledJobConfiguration(1));
 
         scheduler.scheduleJob(sj1);
 
@@ -120,88 +124,92 @@
 
     }
 
+    /*
+     * Test Including:
+     *    - 1 Core Service White Pages 
+     *    - 1 Core Service Scheduler
+     *    - 1 MultiplexService 
+     *    - 1 White Pages (Local)
+     *    - 1 Scheduler (Local)
+     *
+     */
     public void testDistributedJobSchedulingRemote() {
         //Core services Map Definition
-        Map<String, GridServiceDescription> coreServicesMap = new HashMap<String, GridServiceDescription>();//Hazelcast.newHazelcastInstance( null ).getMap( CoreServicesWhitePages.class.getName() );
-        //SystemEvent Listener
-        SystemEventListener l = SystemEventListenerFactory.getSystemEventListener();
+        coreServicesMap = new HashMap<String, GridServiceDescription>();//Hazelcast.newHazelcastInstance( null ).getMap( CoreServicesWhitePages.class.getName() );
+        
 
-
         //Grid View 
-        GridImpl grid = new GridImpl(new ConcurrentHashMap<String, Object>());
+        GridImpl grid1 = new GridImpl(new ConcurrentHashMap<String, Object>());
+        //Configure grid with: 
+        //  core whitepages
+        //  core scheduler
+        //  local whitepages
+        //  local scheduler
+        //  expose multiplex socket
+        configureGrid1(grid1, 5012);
+        
 
-        //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(coreServicesMap);
-        conf.addConfiguration(coreSeviceSchedulerConf);
-
         
-        GridPeerServiceConfiguration socketConf = new MultiplexSocketServiceCongifuration(new MultiplexSocketServerImpl("127.0.0.1",
-                new MinaAcceptorFactoryService(),
-                l));
-        conf.addConfiguration(socketConf);
-
-        GridPeerServiceConfiguration wplConf = new WhitePagesLocalConfiguration();
-        conf.addConfiguration(wplConf);
-
-        GridPeerServiceConfiguration wpsc = new WhitePagesSocketConfiguration(5012);
-        conf.addConfiguration(wpsc);
-
-
-        //Create a Local Scheduler
-        GridPeerServiceConfiguration schlConf = new SchedulerLocalConfiguration();
-        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(5012);
-        conf.addConfiguration(schlsc);
-
-        conf.configure(grid);
-
-
-
         GridImpl grid2 = new GridImpl(new ConcurrentHashMap<String, Object>());
-        conf = new GridPeerConfiguration();
-
-        coreSeviceWPConf = new CoreServicesWhitePagesConfiguration(coreServicesMap);
-        conf.addConfiguration(coreSeviceWPConf);
-
         Connector conn = new MinaConnector();
-
-        ConversationManager cm = new ConversationManagerImpl("s1",
-                conn,
-                l);
-
-        GridPeerServiceConfiguration wprConf = new WhitePagesRemoteConfiguration(cm);
-        conf.addConfiguration(wprConf);
-
-        GridPeerServiceConfiguration schedRemoteClientConf = new SchedulerRemoteConfiguration(cm);
-        conf.addConfiguration(schedRemoteClientConf);
-
-        conf.configure(grid2);
-
+        configureGrid2(grid2, conn);
+        
+        
+        //Create a Job
         UuidJobHandle handle = new UuidJobHandle();
-        ScheduledJob sj1 = new ScheduledJob(handle, new MockJob(), new MockJobContext("xxx"), new MockTrigger(new Date(1000)));
+        ScheduledJob sj1 = new ScheduledJob(handle, new MockJob(), new MockJobContext("xxx"), new MockTrigger(new Date(1000)), new ScheduledJobConfiguration(1));
 
+        //From grid2 I get the Scheduler (that it's a client)
         Scheduler scheduler = grid2.get(Scheduler.class);
 
+        //Schedule remotely the Job
         scheduler.scheduleJob(sj1);
+        
+        
         //Close the peer connection
         conn.close();
-        //Shutdown the MultiplexSocketService 
-        grid.get(MultiplexSocketService.class).close();
+        
+        //Shutdown the MultiplexSocketService
+        grid1.get(MultiplexSocketService.class).close();
 
 
 
 
     }
+    
+    public void testMultipleSchedulersTest(){
+          //Core services Map Definition
+        coreServicesMap = new HashMap<String, GridServiceDescription>();//Hazelcast.newHazelcastInstance( null ).getMap( CoreServicesWhitePages.class.getName() );
+        
+        //Grid View 
+        GridImpl grid1 = new GridImpl(new ConcurrentHashMap<String, Object>());
+        configureGrid1(grid1, 5012);
+        
+        
+        GridImpl grid2 = new GridImpl(new ConcurrentHashMap<String, Object>());
+        configureGrid1(grid2, 5013);
+        
+        
+        
+        GridImpl grid3 = new GridImpl(new ConcurrentHashMap<String, Object>());
+        Connector conn = new MinaConnector();
+        configureGrid3(grid3, conn);
+        
+        CoreServicesWhitePages corewp = grid3.get(CoreServicesWhitePages.class);
+        
+        GridServiceDescription gsd = corewp.lookup(Scheduler.class);
+                
+        Assert.assertEquals(2, ((InetSocketAddress[])gsd.getAddresses().values().iterator().next().getObject()).length);
+        
+        
+        conn.close();
+        grid1.get(MultiplexSocketService.class).close();
+        grid2.get(MultiplexSocketService.class).close();
+    
+    }
+    
 
     public static class MockJobContext implements JobContext, Serializable {
 
@@ -333,4 +341,87 @@
             throw new UnsupportedOperationException("not supported");
         }
     }
+    
+    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(),
+                l));
+        conf.addConfiguration(socketConf);
+        
+        //Configuring the WhitePages 
+        GridPeerServiceConfiguration wplConf = new WhitePagesLocalConfiguration();
+        conf.addConfiguration(wplConf);
+        
+        //Exposing Local WhitePages
+        GridPeerServiceConfiguration wpsc = new WhitePagesSocketConfiguration(port);
+        conf.addConfiguration(wpsc);
+
+
+        //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);
+
+        conf.configure(grid);
+        
+    
+    }
+    
+    private void configureGrid2(Grid grid2, Connector conn){
+        GridPeerConfiguration conf = new GridPeerConfiguration();
+
+        GridPeerServiceConfiguration coreSeviceWPConf = new CoreServicesWhitePagesConfiguration(coreServicesMap);
+        conf.addConfiguration(coreSeviceWPConf);
+
+
+        ConversationManager cm = new ConversationManagerImpl("s1",
+                conn,
+                l);
+
+        GridPeerServiceConfiguration wprConf = new WhitePagesRemoteConfiguration(cm);
+        conf.addConfiguration(wprConf);
+
+        GridPeerServiceConfiguration schedRemoteClientConf = new SchedulerRemoteConfiguration( cm);
+        conf.addConfiguration(schedRemoteClientConf);
+
+        conf.configure(grid2);
+    }
+    
+    
+    private void configureGrid3(Grid grid3, Connector conn){
+        GridPeerConfiguration conf = new GridPeerConfiguration();
+
+        GridPeerServiceConfiguration coreSeviceWPConf = new CoreServicesWhitePagesConfiguration(coreServicesMap);
+        conf.addConfiguration(coreSeviceWPConf);
+
+
+        ConversationManager cm = new ConversationManagerImpl("s1",
+                conn,
+                l);
+
+        GridPeerServiceConfiguration wprConf = new WhitePagesRemoteConfiguration(cm);
+        conf.addConfiguration(wprConf);
+
+        GridPeerServiceConfiguration schedRemoteClientConf = new SchedulerRemoteConfiguration(cm);
+        conf.addConfiguration(schedRemoteClientConf);
+
+        conf.configure(grid3);
+    }
 }

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-10-26 19:27:47 UTC (rev 35750)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl2/src/test/java/org/drools/io/mina/WhitePagesTest.java	2010-10-26 19:35:21 UTC (rev 35751)
@@ -1,8 +1,10 @@
 package org.drools.io.mina;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import junit.framework.Assert;
 
 import junit.framework.TestCase;
 
@@ -25,6 +27,8 @@
 import org.drools.grid.service.directory.impl.WhitePagesLocalConfiguration;
 import org.drools.grid.service.directory.impl.WhitePagesRemoteConfiguration;
 import org.drools.grid.service.directory.impl.WhitePagesSocketConfiguration;
+import org.drools.grid.timer.Scheduler;
+import org.drools.grid.timer.impl.SchedulerLocalConfiguration;
 
 
 public class WhitePagesTest extends TestCase {
@@ -94,5 +98,45 @@
         conn.close();
         grid1.get(MultiplexSocketService.class).close();
     }
+    
+    public void testWhitePagesLookupServices(){
+        Map<String, GridServiceDescription> coreServicesMap = new HashMap<String, GridServiceDescription>();//Hazelcast.newHazelcastInstance( null ).getMap( CoreServicesWhitePages.class.getName() );
 
+        SystemEventListener l = SystemEventListenerFactory.getSystemEventListener();
+
+        GridImpl grid1 = new GridImpl( new ConcurrentHashMap<String, Object>() );
+
+        GridPeerConfiguration conf = new GridPeerConfiguration();
+
+        GridPeerServiceConfiguration coreSeviceConf = new CoreServicesWhitePagesConfiguration( coreServicesMap );
+        conf.addConfiguration( coreSeviceConf );
+        
+        GridPeerServiceConfiguration wplConf = new WhitePagesLocalConfiguration();
+        conf.addConfiguration( wplConf );
+        
+        //Create a Local Scheduler
+        GridPeerServiceConfiguration schlConf = new SchedulerLocalConfiguration("myLocalSched1");
+        conf.addConfiguration(schlConf);
+        
+        //Create a Local Scheduler
+        GridPeerServiceConfiguration schlConf2 = new SchedulerLocalConfiguration("myLocalSched2");
+        conf.addConfiguration(schlConf2);
+    
+        conf.configure( grid1 );
+        
+        
+        WhitePages wplocal= grid1.get(WhitePages.class);
+        
+        GridServiceDescription schedulersgsd = wplocal.lookup(Scheduler.class.getName());
+        
+        Assert.assertEquals(2, schedulersgsd.getAddresses().size());
+        
+        
+        
+        
+        
+    }
+    
+    
+
 }



More information about the jboss-svn-commits mailing list