[jboss-svn-commits] JBL Code SVN: r33929 - in labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid: drools-grid-remote-api/src/main/java/org/drools/grid/remote and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jul 16 00:48:41 EDT 2010
Author: salaboy21
Date: 2010-07-16 00:48:40 -0400 (Fri, 16 Jul 2010)
New Revision: 33929
Modified:
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericDirectoryConnector.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GridConnection.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryNodeRemoteClient.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryServerMessageHandlerImpl.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GridTopology.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/BasicAPITestWithMina.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterDirectoryTest.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterMinaDirectoryTest.java
Log:
adding support for getting an execution Environment based on a connector
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericDirectoryConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericDirectoryConnector.java 2010-07-16 00:37:02 UTC (rev 33928)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericDirectoryConnector.java 2010-07-16 04:48:40 UTC (rev 33929)
@@ -26,11 +26,11 @@
public String getId() throws ConnectorException, RemoteException;
- void connect() throws ConnectorException;
+ void connect() throws ConnectorException, RemoteException;
- void disconnect() throws ConnectorException;
+ void disconnect() throws ConnectorException, RemoteException;
- public DirectoryNodeService getDirectoryNodeService() throws ConnectorException;
+ public DirectoryNodeService getDirectoryNodeService() throws ConnectorException, RemoteException;
public GenericConnection getConnection();
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GridConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GridConnection.java 2010-07-16 00:37:02 UTC (rev 33928)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GridConnection.java 2010-07-16 04:48:40 UTC (rev 33929)
@@ -91,28 +91,34 @@
}
public DirectoryNodeService getDirectoryNode(DirectorySelectionStrategy strategy) throws ConnectorException {
- if (directoryNodeConnectors.isEmpty()) {
- //Should I return null or add a local directory?
- DirectoryNodeService localDirectory = new DirectoryNodeLocalImpl();
- addDirectoryNode(localDirectory);
- return localDirectory.getDirectoryNodeService();
-
- }
+
+ if (directoryNodeConnectors.isEmpty()) {
+ //Should I return null or add a local directory?
+ DirectoryNodeService localDirectory = new DirectoryNodeLocalImpl();
+ addDirectoryNode(localDirectory);
+ DirectoryNodeService directoryNodeService = null;
+ try {
+ directoryNodeService = localDirectory.getDirectoryNodeService();
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridConnection.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ return directoryNodeService;
+ }
+ GenericDirectoryConnector connector = null;
+ //if the strategy is null use the default one
+ DirectoryNodeService directoryNode = null;
+ try {
+ if (strategy == null) {
+ connector = getBestDirectory(new StaticIncrementalDirectorySelectionStrategy());
+ } else {
+ connector = getBestDirectory(strategy);
+ }
+ connector.connect();
+ directoryNode = connector.getDirectoryNodeService();
- GenericDirectoryConnector connector = null;
- //if the strategy is null use the default one
- if (strategy == null) {
- connector = getBestDirectory(new StaticIncrementalDirectorySelectionStrategy());
- } else {
- connector = getBestDirectory(strategy);
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridConnection.class.getName()).log(Level.SEVERE, null, ex);
}
-
-
- connector.connect();
-
- DirectoryNodeService directoryNode = connector.getDirectoryNodeService();
-
-
return directoryNode;
}
@@ -172,8 +178,12 @@
}
for(GenericDirectoryConnector connector : directoryNodeConnectors){
- connector.connect();
- directories.add(connector.getDirectoryNodeService());
+ try {
+ connector.connect();
+ directories.add(connector.getDirectoryNodeService());
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridConnection.class.getName()).log(Level.SEVERE, null, ex);
+ }
}
return directories;
}
@@ -191,7 +201,11 @@
}
}
for (GenericDirectoryConnector connector : directoryNodeConnectors) {
- connector.disconnect();
+ try {
+ connector.disconnect();
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridConnection.class.getName()).log(Level.SEVERE, null, ex);
+ }
}
for (GenericHumanTaskConnector connector : humanTaskNodeConnectors) {
connector.disconnect();
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java 2010-07-16 00:37:02 UTC (rev 33928)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java 2010-07-16 04:48:40 UTC (rev 33929)
@@ -65,6 +65,7 @@
DirectoryNodeService directoryNode = connection.getDirectoryNode();
try {
+ System.out.println("!!!!!!!!>>>>>>>>>>Registering in DirectoryNode the session = "+identifier);
directoryNode.register(identifier, client.getId());
} catch (RemoteException ex) {
Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryNodeRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryNodeRemoteClient.java 2010-07-16 00:37:02 UTC (rev 33928)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryNodeRemoteClient.java 2010-07-16 04:48:40 UTC (rev 33929)
@@ -33,6 +33,7 @@
import org.drools.grid.internal.commands.SimpleCommandName;
import org.drools.grid.internal.responsehandlers.BlockingMessageDirectoryMapRequestResponseHandler;
import org.drools.grid.internal.responsehandlers.BlockingMessageResponseHandler;
+import org.drools.grid.remote.GenericConnectorFactory;
import org.drools.grid.remote.mina.MinaIoHandler;
/**
@@ -62,7 +63,15 @@
}
public GenericNodeConnector lookup(String resourceId) throws ConnectorException {
- throw new UnsupportedOperationException("Not supported yet.");
+ System.out.println(">>>>>>>>>>>>>>>>Looking for resource = "+resourceId);
+ List<Object> args = new ArrayList<Object>(1);
+ args.add(resourceId);
+ SimpleCommand cmd = new SimpleCommand(connector.counter.getAndIncrement(), SimpleCommandName.RequestLookupSessionId, args);
+ Message msg = new Message(connector.getSessionId(), connector.counter.incrementAndGet(), false, cmd);
+ BlockingMessageDirectoryMapRequestResponseHandler handler = new BlockingMessageDirectoryMapRequestResponseHandler();
+ write(msg, handler);
+ SimpleCommand resultcmd = (SimpleCommand)handler.getMessage().getPayload();
+ return GenericConnectorFactory.newNodeConnector((String)resultcmd.getArguments().get(0));
}
public void registerKBase(String kbaseId, String resourceId) throws ConnectorException {
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryServerMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryServerMessageHandlerImpl.java 2010-07-16 00:37:02 UTC (rev 33928)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/DirectoryServerMessageHandlerImpl.java 2010-07-16 04:48:40 UTC (rev 33929)
@@ -117,6 +117,7 @@
case RequestLookupSessionId: {
String executorId = (String) cmd.getArguments().get(0);
+ System.out.println(">>>>>>>>>>>>>>>Directory map before looking ="+executorId +" ---> "+directory.getExecutorsMap());
String resourceId = directory.getExecutorsMap().get(executorId);
List<Object> results = new ArrayList<Object>(1);
results.add(resourceId);
@@ -127,6 +128,7 @@
resultsCmnd ), null);
break;
}
+
default: {
systemEventListener.debug("Unknown command recieved on server");
}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GridTopology.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GridTopology.java 2010-07-16 00:37:02 UTC (rev 33928)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GridTopology.java 2010-07-16 04:48:40 UTC (rev 33929)
@@ -30,6 +30,7 @@
private String topologyName;
private Map<String, ExecutionEnvironment> executionEnvironments = new HashMap<String, ExecutionEnvironment>();
+ private Map<String, ExecutionEnvironment> executionEnvironmentsByConnectorId = new HashMap<String, ExecutionEnvironment>();
private Map<String, DirectoryInstance> directories = new HashMap<String, DirectoryInstance>();
private Map<String, TaskServerInstance> taskServerInstance = new HashMap<String, TaskServerInstance>();
private final ExecutionEnvironmentSelectionStrategy DEFAULT_EXECTUTION_STRATEGY = new ExecutionEnvByPrioritySelectionStrategy();
@@ -67,6 +68,13 @@
}
//Adding the env to the local cache
executionEnvironments.put(name, environment);
+ try {
+ executionEnvironmentsByConnectorId.put(connector.getId(), environment);
+ } catch (ConnectorException ex) {
+ Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, ex);
+ }
//Register all the Execution Environments into the current directories
registerResourceInCurrentDirectories(name, provider.getId());
@@ -85,6 +93,18 @@
return executionEnvironments.get(name);
}
+ public ExecutionEnvironment getExecutionEnvironment(GenericNodeConnector connector){
+ ExecutionEnvironment ee = null;
+ try {
+ ee = executionEnvironmentsByConnectorId.get(connector.getId());
+ } catch (ConnectorException ex) {
+ Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ return ee;
+ }
+
public ExecutionEnvironment getBestExecutionEnvironment(ExecutionEnvironmentSelectionStrategy strategy) {
System.out.println("Current Exec used in the strategy = " + executionEnvironments);
return strategy.getBestExecutionEnvironment(executionEnvironments);
@@ -207,7 +227,11 @@
Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, ex);
}
}
- directory.getConnector().disconnect();
+ try {
+ directory.getConnector().disconnect();
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, ex);
+ }
} catch (ConnectorException e) {
Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, e);
}
@@ -226,7 +250,11 @@
Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, ex);
}
}
- directory.getConnector().disconnect();
+ try {
+ directory.getConnector().disconnect();
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, ex);
+ }
} catch (ConnectorException e) {
Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, e);
}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/BasicAPITestWithMina.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/BasicAPITestWithMina.java 2010-07-16 00:37:02 UTC (rev 33928)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/BasicAPITestWithMina.java 2010-07-16 04:48:40 UTC (rev 33929)
@@ -12,11 +12,13 @@
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactoryService;
import org.drools.SystemEventListenerFactory;
+import org.drools.builder.DirectoryLookupFactoryService;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactoryService;
import org.drools.builder.ResourceType;
import org.drools.grid.ConnectorException;
import org.drools.grid.ExecutionNode;
+import org.drools.grid.GenericNodeConnector;
import org.drools.grid.internal.GenericMessageHandlerImpl;
import org.drools.grid.internal.NodeData;
import org.drools.grid.remote.mina.MinaAcceptor;
@@ -90,7 +92,7 @@
}
@Test
- public void singleMinaProvider() throws ConnectorException {
+ public void singleMinaProvider() throws ConnectorException, RemoteException, RemoteException, RemoteException, RemoteException {
//This APIs are used to create the Execution Environment Topology that will define which logical set of nodes
//will be used for a specific situation/use case.
@@ -160,6 +162,9 @@
}
+
+
+
@Test
public void multiMinaProvider() throws ConnectorException {
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterDirectoryTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterDirectoryTest.java 2010-07-16 00:37:02 UTC (rev 33928)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterDirectoryTest.java 2010-07-16 04:48:40 UTC (rev 33929)
@@ -93,7 +93,7 @@
@Test
public void multiDirectoryLocalTest() throws ConnectorException, RemoteException {
- System.out.println("Second Test!!");
+
GridTopology grid = new GridTopology("MyBusinessUnit");
GenericProvider localDirProvider = new LocalProvider();
GenericProvider localDirProvider2 = new LocalProvider();
@@ -125,6 +125,8 @@
//Assert.assertEquals(3, dir2.getExecutorsMap().size());
// the only thing that is for sure is
+ System.out.println("dir1 exec map"+dir.getExecutorsMap());
+ System.out.println("dir2 exec map"+dir2.getExecutorsMap());
Assert.assertTrue( (dir2.getExecutorsMap().size() + dir.getExecutorsMap().size()) > 4 );
grid.disconectAllClients();
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterMinaDirectoryTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterMinaDirectoryTest.java 2010-07-16 00:37:02 UTC (rev 33928)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterMinaDirectoryTest.java 2010-07-16 04:48:40 UTC (rev 33929)
@@ -32,6 +32,7 @@
import org.drools.grid.ConnectorException;
import org.drools.grid.DirectoryNodeService;
import org.drools.grid.ExecutionNode;
+import org.drools.grid.GenericNodeConnector;
import org.drools.grid.internal.GenericMessageHandlerImpl;
import org.drools.grid.internal.NodeData;
import org.drools.grid.remote.directory.DirectoryServerMessageHandlerImpl;
@@ -220,5 +221,90 @@
}
+ @Test
+ public void directoryInstanceRetriveKSessionFromEE() throws ConnectorException, RemoteException {
+
+ //This APIs are used to create the Execution Environment Topology that will define which logical set of nodes
+ //will be used for a specific situation/use case.
+
+ //The Execution Environment Topology will contain the Runtime state, persistent in time to be able to restore the
+ //topology in case of failure or restarting
+ grid = new GridTopology("MyCompanyTopology");
+
+
+ //Create the provider
+ MinaProvider provider = new MinaProvider("127.0.0.1", 9124);
+ GenericProvider remoteDirProvider = new MinaProvider("127.0.0.1", 9123);
+ //Register the provider into the topology
+
+ grid.registerDirectoryInstance("MyMinaDir", remoteDirProvider);
+ grid.registerExecutionEnvironment("MyMinaExecutionEnv1", provider);
+
+ //Then we can get the registered Execution Environments by Name
+
+ ExecutionEnvironment ee = grid.getExecutionEnvironment("MyMinaExecutionEnv1");
+ Assert.assertNotNull(ee);
+
+ // Give me an ExecutionNode in the selected environment
+ // For the Mina we have just one Execution Node per server instance
+ ExecutionNode node = ee.getExecutionNode();
+
+ Assert.assertNotNull(node);
+
+
+ // Do a basic Runtime Test that register a ksession and fire some rules.
+ String str = "";
+ str += "package org.drools \n";
+ str += "global java.util.List list \n";
+ str += "rule rule1 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello1!!!\" ); \n";
+ str += "end \n";
+ str += "rule rule2 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello2!!!\" ); \n";
+ str += "end \n";
+
+
+ KnowledgeBuilder kbuilder =
+ node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+ kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes()),
+ ResourceType.DRL);
+
+ if (kbuilder.hasErrors()) {
+ System.out.println("Errors: " + kbuilder.getErrors());
+ }
+
+ KnowledgeBase kbase =
+ node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+ Assert.assertNotNull(kbase);
+
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ Assert.assertNotNull(ksession);
+
+ node.get(DirectoryLookupFactoryService.class).register("sessionName", ksession);
+ DirectoryInstance directoryInstance = grid.getDirectoryInstance();
+ DirectoryNodeService directory = directoryInstance.getDirectoryService();
+ GenericNodeConnector connector = directory.lookup("sessionName");
+
+ directoryInstance.getConnector().disconnect();
+
+ grid.disconectAllClients();
+ //System.out.println("Connector -->"+connector.getId());
+
+ node = grid.getExecutionEnvironment(connector).getExecutionNode();
+//
+ ksession = (StatefulKnowledgeSession) node.get(DirectoryLookupFactoryService.class).lookup("sessionName");
+ Assert.assertNotNull(ksession);
+
+ }
+
+
}
More information about the jboss-svn-commits
mailing list