[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