[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