[jboss-svn-commits] JBL Code SVN: r33115 - in labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid: drools-grid-api and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 27 09:22:33 EDT 2010


Author: salaboy21
Date: 2010-05-27 09:22:31 -0400 (Thu, 27 May 2010)
New Revision: 33115

Added:
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeLocalImpl.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/BlockingGenericIoWriter.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/ClientGenericMessageReceiver.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/CollectionClient.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/GenericMessageHandler.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/GenericMessageHandlerImpl.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/MessageSession.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/NodeData.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/Command.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/CommandName.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/ExecutionNodeClientConnectCommand.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/ExecutionNodeContext.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/LookupCommand.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/RegisterCommand.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/RegisterRemoteWorkItemHandlerCommand.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/AbstractBaseResponseHandler.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/AbstractBlockingResponseHandler.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/BlockingMessageResponseHandler.java
Removed:
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java
Modified:
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/pom.xml
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericConnection.java
   labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/strategies/StaticIncrementalSelectionStrategy.java
Log:
moving everything and refactoring apis

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-client-api)

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-client-api/pom.xml	2010-05-26 14:50:52 UTC (rev 33093)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/pom.xml	2010-05-27 13:22:31 UTC (rev 33115)
@@ -9,8 +9,8 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>jar</packaging>
-    <name>Drools :: Grid :: Client API</name>
-    <artifactId>drools-grid-client-api</artifactId>
+    <name>Drools :: Grid :: API</name>
+    <artifactId>drools-grid-api</artifactId>
     <build>
         <plugins>
             <plugin>
@@ -35,10 +35,17 @@
         <dependency>
             <groupId>org.drools</groupId>
             <artifactId>drools-api</artifactId>
-            <version>5.1.0.SNAPSHOT</version>
         </dependency>
-
-        
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-core</artifactId>
+            <type>jar</type>
+        </dependency>
+         <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-compiler</artifactId>
+            <type>jar</type>
+        </dependency>
     </dependencies>
       
 

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeLocalImpl.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeLocalImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeLocalImpl.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,82 @@
+/*
+ *  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.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.drools.KnowledgeBase;
+import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.GenericNodeConnector;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryNodeLocalImpl implements DirectoryNodeService {
+
+    private String id;
+    private Map<String, String> directoryMap = new HashMap<String, String>();
+    private List<GenericNodeConnector> services = new ArrayList<GenericNodeConnector>();
+
+    public DirectoryNodeLocalImpl() {
+        this.id = UUID.randomUUID().toString();
+    }
+
+    public String getId() throws RemoteException {
+        return this.id;
+    }
+
+    public void register(String executorId, String sessionServiceId) throws RemoteException {
+        System.out.println("Registering: " + executorId + " -- " + sessionServiceId);
+        directoryMap.put(executorId, sessionServiceId);
+    }
+
+    public GenericNodeConnector lookup(String executorId) throws RemoteException {
+        GenericNodeConnector sessionService = null;
+        String sessionServiceId = (String) directoryMap.get(executorId);
+        System.out.println("Registry = " + directoryMap.toString());
+        System.out.println("Nodes Services = " + services);
+        for (GenericNodeConnector ss : services) {
+            System.out.println("Session Service id = " + ss.getId() + "needs to match with =" + sessionServiceId);
+            if (ss.getId().equals(sessionServiceId)) {
+                sessionService = ss;
+            }
+        }
+
+        return sessionService;
+    }
+
+    public void registerKBase(String kbaseId, String sessionServiceId) throws RemoteException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public KnowledgeBase lookupKBase(String kbaseId) throws RemoteException {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void addService(GenericNodeConnector service) {
+        services.add(service);
+    }
+
+    public Map<String, String> getDirectoryMap() {
+        return directoryMap;
+    }
+}

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-client-api/src/main/java/org/drools/grid/GenericConnection.java	2010-05-26 14:50:52 UTC (rev 33093)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericConnection.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -14,12 +14,9 @@
  *  limitations under the License.
  *  under the License.
  */
-
 package org.drools.grid;
 
 import java.util.List;
-import org.drools.grid.DirectoryNodeService;
-import org.drools.grid.ExecutionNode;
 import org.drools.grid.strategies.NodeSelectionStrategy;
 import org.drools.grid.strategies.DirectoryServiceSelectionStrategy;
 
@@ -30,11 +27,16 @@
 public interface GenericConnection {
 
     public void addNodeConnector(GenericNodeConnector nodeConnector);
+
     public void addDirectoryNode(DirectoryNodeService directory);
+
     public List<GenericNodeConnector> getNodeConnectors();
+
     public List<DirectoryNodeService> getDirectories();
+
     public ExecutionNode getExecutionNode(NodeSelectionStrategy strategy);
+
     public ExecutionNode getExecutionNode();
+
     public DirectoryNodeService getDirectoryNode(DirectoryServiceSelectionStrategy directorySelectionStrategy);
-
 }

Deleted: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-client-api/src/main/java/org/drools/grid/GenericNodeConnector.java	2010-05-26 14:50:52 UTC (rev 33093)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -1,16 +0,0 @@
-package org.drools.grid;
-
-import org.drools.grid.internal.Message;
-import org.drools.grid.internal.GenericIoWriter;
-import java.rmi.RemoteException;
-
-public interface GenericNodeConnector extends GenericIoWriter {
-
-    boolean connect() throws RemoteException;
-
-    void disconnect() throws RemoteException;
-
-    Message write(Message msg) throws RemoteException;
-
-    String getId() throws RemoteException;
-}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/internal/GenericNodeConnector.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,17 @@
+package org.drools.grid;
+
+import java.rmi.RemoteException;
+import org.drools.grid.internal.GenericIoWriter;
+import org.drools.grid.internal.Message;
+
+public interface GenericNodeConnector extends GenericIoWriter {
+
+    boolean connect() throws RemoteException;;
+
+    void disconnect() throws RemoteException;;
+
+    Message write(Message msg) throws RemoteException;;
+
+    String getId() throws RemoteException;;
+
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/BlockingGenericIoWriter.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/internal/BlockingGenericIoWriter.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/BlockingGenericIoWriter.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/BlockingGenericIoWriter.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,32 @@
+/**
+ * 
+ */
+package org.drools.grid.internal;
+
+import org.drools.grid.internal.GenericIoWriter;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageResponseHandler;
+
+
+public class BlockingGenericIoWriter implements GenericIoWriter {
+    
+    private Message msg;
+
+    public void write(Message message) {
+        this.msg = message;
+    }
+    
+    public Message getMessage() {
+        return this.msg;
+    }
+
+    public void write(Message msg,
+                      MessageResponseHandler responseHandler) {
+        if ( responseHandler == null ) {
+            this.msg = msg;
+        } else {
+            throw new UnsupportedOperationException();
+        }
+    }
+    
+}
\ No newline at end of file

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/ClientGenericMessageReceiver.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/internal/ClientGenericMessageReceiver.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/ClientGenericMessageReceiver.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/ClientGenericMessageReceiver.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,18 @@
+package org.drools.grid.internal;
+
+import org.drools.grid.internal.GenericIoWriter;
+import org.drools.grid.internal.GenericIoWriter;
+import org.drools.grid.internal.MessageResponseHandler;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageResponseHandler;
+
+public interface ClientGenericMessageReceiver {
+
+    public abstract void addResponseHandler(int id,
+                                            MessageResponseHandler responseHandler);
+
+    public abstract void messageReceived(GenericIoWriter writer,
+                                         Message msg) throws Exception;
+
+}
\ No newline at end of file

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/CollectionClient.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/internal/CollectionClient.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/CollectionClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/CollectionClient.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,84 @@
+package org.drools.grid.internal;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+public class CollectionClient<T>
+    implements
+    Collection {
+    private String parentInstanceId;
+
+    public CollectionClient(String parentInstanceId) {
+        this.parentInstanceId = parentInstanceId;
+    }
+
+    public String getParentInstanceId() {
+        return this.parentInstanceId;
+    }
+
+    public boolean add(Object e) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean addAll(Collection c) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public void clear() {
+        // TODO Auto-generated method stub
+
+    }
+
+    public boolean contains(Object o) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean containsAll(Collection c) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean isEmpty() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public Iterator iterator() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean remove(Object o) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean removeAll(Collection c) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean retainAll(Collection c) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public int size() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public Object[] toArray() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Object[] toArray(Object[] a) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/GenericMessageHandler.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/internal/GenericMessageHandler.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/GenericMessageHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/GenericMessageHandler.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,11 @@
+package org.drools.grid.internal;
+
+import org.drools.grid.internal.GenericIoWriter;
+import org.drools.grid.internal.Message;
+
+public interface GenericMessageHandler {
+
+    public abstract void messageReceived(GenericIoWriter session,
+                                         Message msg) throws Exception;
+
+}
\ No newline at end of file

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/GenericMessageHandlerImpl.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/internal/GenericMessageHandlerImpl.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/GenericMessageHandlerImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/GenericMessageHandlerImpl.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,69 @@
+package org.drools.grid.internal;
+
+import org.drools.grid.internal.GenericIoWriter;
+import org.drools.grid.internal.Message;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.SystemEventListener;
+import org.drools.command.FinishedCommand;
+import org.drools.command.impl.ContextImpl;
+import org.drools.command.impl.GenericCommand;
+import org.drools.runtime.impl.ExecutionResultImpl;
+
+public class GenericMessageHandlerImpl implements GenericMessageHandler {
+    private SystemEventListener systemEventListener;
+
+    private NodeData  data;
+
+    public GenericMessageHandlerImpl(NodeData data,
+                                 SystemEventListener systemEventListener) {
+        this.systemEventListener = systemEventListener;
+        this.data = data;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.vsm.GenericMessageHandler#messageReceived(org.drools.vsm.GenericIoWriter, org.drools.vsm.Message)
+     */
+    public void messageReceived(GenericIoWriter session,
+                                Message msg) throws Exception {
+        systemEventListener.debug( "Message receieved : " + msg );
+
+
+        // we always need to process a List, for genericity, but don't force a List on the payload
+        List<GenericCommand> commands;
+        if ( msg.getPayload() instanceof List ) {
+            commands = (List<GenericCommand>) msg.getPayload();
+        } else {
+            commands = new ArrayList<GenericCommand>();
+            commands.add( (GenericCommand) msg.getPayload() );
+        }
+
+        // Setup the evaluation context 
+        ContextImpl localSessionContext = new ContextImpl( "session_" + msg.getSessionId(),
+                                                           this.data.getContextManager(),
+                                                           this.data.getTemp() );        
+        ExecutionResultImpl localKresults = new ExecutionResultImpl();
+        localSessionContext.set( "kresults_" + msg.getSessionId(),
+                                 localKresults );
+        
+        for ( GenericCommand cmd : commands ) {
+            // evaluate the commands
+            cmd.execute( localSessionContext );
+        }
+
+        if ( !msg.isAsync() && localKresults.getIdentifiers().isEmpty() ) {
+            // if it's not an async invocation and their are no results, just send a simple notification message
+            session.write( new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        new FinishedCommand() ), null );
+        } else {
+            // return the payload
+            session.write( new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        localKresults ), null );
+        }
+    }
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/MessageSession.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/internal/MessageSession.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/MessageSession.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/MessageSession.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,57 @@
+/*
+ *  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.internal;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ *
+ * @author salaboy
+ */
+public class MessageSession {
+
+    public AtomicInteger    counter;
+    private int sessionId = -1;
+
+    public MessageSession() {
+        counter = new AtomicInteger();
+    }
+
+
+
+    public AtomicInteger getCounter() {
+        return counter;
+    }
+
+    public void setCounter(AtomicInteger counter) {
+        this.counter = counter;
+    }
+
+    public int getSessionId() {
+        return sessionId;
+    }
+
+    public void setSessionId(int sessionId) {
+        this.sessionId = sessionId;
+    }
+
+    public int getNextId() {
+        return this.counter.incrementAndGet();
+    }
+
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/NodeData.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/internal/NodeData.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/NodeData.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/NodeData.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,67 @@
+package org.drools.grid.internal;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.drools.command.Context;
+import org.drools.command.ContextManager;
+import org.drools.command.impl.ContextImpl;
+import org.drools.grid.ContextManagerImpl;
+
+public class NodeData {
+    private ContextManager contextManager;
+
+    private Context        root;
+    private Context        temp;
+
+    public static String   ROOT                 = "ROOT";
+    public static String   TEMP                 = "__TEMP__";
+    public static String   NODE_DATA = "__NodeData__";
+
+    private AtomicInteger  sessionIdCounter     = new AtomicInteger();
+
+    public NodeData() {
+        // Setup ROOT context, this will hold all long lived intances and instanceIds
+        this.contextManager = new ContextManagerImpl();
+
+        this.root = new ContextImpl( ROOT,
+                                     this.contextManager );
+        ((ContextManagerImpl) this.contextManager).addContext( this.root );
+        this.root.set( NODE_DATA,
+                       this );
+        // Setup TEMP context, this will hold all short lived instanceId and instances
+        // TODO: TEMP context should have a time/utilisation eviction queue added 
+        this.temp = new ContextImpl( TEMP,
+                                     this.contextManager,
+                                     this.root );
+        ((ContextManagerImpl) this.contextManager).addContext( this.temp );
+    }
+
+    public AtomicInteger getSessionIdCounter() {
+        return sessionIdCounter;
+    }
+
+    public ContextManager getContextManager() {
+        return contextManager;
+    }
+
+    public void setContextManager(ContextManager contextManager) {
+        this.contextManager = contextManager;
+    }
+
+    public Context getRoot() {
+        return root;
+    }
+
+    public void setRoot(Context root) {
+        this.root = root;
+    }
+
+    public Context getTemp() {
+        return temp;
+    }
+
+    public void setTemp(Context temp) {
+        this.temp = temp;
+    }
+
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/Command.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/commands/Command.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/Command.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/Command.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,48 @@
+package org.drools.grid.internal.commands;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class Command implements Serializable {
+    
+    private int id;
+    
+    private CommandName name;    
+    
+    private List<Object> arguments;
+    
+    public Command(int id, CommandName name, List<Object> arguments) {
+        super();
+        this.id = id;
+        this.arguments = arguments;
+        this.name = name;
+    }
+    
+    
+    
+    public int getId() {
+        return id;
+    }
+
+
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+
+
+    public CommandName getName() {
+        return name;
+    }
+    public void setName(CommandName name) {
+        this.name = name;
+    }
+    public List<Object> getArguments() {
+        return arguments;
+    }
+    public void setArguments(List<Object> arguments) {
+        this.arguments = arguments;
+    }
+            
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/CommandName.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/commands/CommandName.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/CommandName.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/CommandName.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,79 @@
+package org.drools.grid.internal.commands;
+
+
+public enum CommandName {   
+    OperationRequest,
+    OperationResponse,
+    
+    ClaimRequest,
+    ClaimResponse,
+    
+    StartRequest,
+    StartResponse,
+    
+    StopRequest,
+    StopResponse,
+    
+    ReleaseRequest,
+    ReleaseResponse,  
+    
+    SuspendRequest,
+    SuspendResponse, 
+    
+    ResumeRequest,
+    ResumeResponse, 
+    
+    SkipRequest,
+    SkipResponse,  
+    
+    DelegateRequest,
+    DelegateResponse,
+    
+    ForwardRequest,
+    ForwardResponse,
+    
+    CompleteRequest,
+    CompleteResponse,   
+    
+    FailRequest,
+    FailResponse,
+    
+    GetTaskRequest,
+    GetTaskResponse,
+    
+    AddTaskRequest,
+    AddTaskResponse,
+    
+    AddAttachmentRequest,
+    AddAttachmentResponse,    
+    DeleteAttachmentRequest,
+    DeleteAttachmentResponse,
+        
+    SetDocumentContentRequest,
+    SetDocumentContentResponse,
+    GetContentRequest,
+    GetContentResponse,
+    
+    AddCommentRequest,
+    AddCommentResponse,    
+    DeleteCommentRequest,    
+    DeleteCommentResponse,    
+    
+    QueryTasksOwned,    
+    QueryTasksAssignedAsBusinessAdministrator,
+    QueryTasksAssignedAsExcludedOwner,
+    QueryTasksAssignedAsPotentialOwner,
+    QueryTasksAssignedAsPotentialOwnerWithGroup,
+    QueryTasksAssignedAsPotentialOwnerByGroup,
+    QuerySubTasksAssignedAsPotentialOwner,
+    QueryGetSubTasksByParentTaskId,
+    QueryTasksAssignedAsRecipient,
+    QueryTasksAssignedAsTaskInitiator,
+    QueryTasksAssignedAsTaskStakeholder,    
+    QueryTaskSummaryResponse,
+    
+    RegisterForEventRequest,
+    EventTriggerResponse,
+    
+    RegisterClient
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/ExecutionNodeClientConnectCommand.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/commands/ExecutionNodeClientConnectCommand.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/ExecutionNodeClientConnectCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/ExecutionNodeClientConnectCommand.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,34 @@
+package org.drools.grid.internal.commands;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.grid.internal.NodeData;
+
+public class ExecutionNodeClientConnectCommand
+    implements
+    GenericCommand<Integer> {
+    
+    private String outIdentifier;
+
+    
+
+    public ExecutionNodeClientConnectCommand(String outIdentifier) {
+        this.outIdentifier = outIdentifier;
+    }
+
+
+
+    public Integer execute(Context context) {
+        NodeData data = (NodeData) context.get( NodeData.NODE_DATA );
+        
+        Integer sessionId = data.getSessionIdCounter().getAndIncrement();
+        if ( this.outIdentifier != null ) {
+            ((ExecutionResultImpl)((KnowledgeCommandContext) context).getExecutionResults()).getResults().put( this.outIdentifier, sessionId );
+        } 
+        
+        return sessionId;
+    }
+
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/ExecutionNodeContext.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/commands/ExecutionNodeContext.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/ExecutionNodeContext.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/ExecutionNodeContext.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,40 @@
+package org.drools.grid.internal.commands;
+
+import org.drools.command.Context;
+import org.drools.command.ContextManager;
+import org.drools.grid.internal.NodeData;
+
+public class ExecutionNodeContext
+    implements
+    Context {
+    private Context            context;
+    private NodeData data;
+
+    public ExecutionNodeContext(Context context,
+                                       NodeData data) {
+        this.data = data;
+    }
+
+    public NodeData getServiceManagerData() {
+        return this.data;
+    }
+
+    public ContextManager getContextManager() {
+        return context.getContextManager();
+    }
+
+    public String getName() {
+        return context.getName();
+    }
+
+    public Object get(String identifier) {
+        return context.get( identifier );
+    }
+
+    public void set(String identifier,
+                    Object value) {
+        context.set( identifier,
+                     value );
+    }
+
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/LookupCommand.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/commands/LookupCommand.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/LookupCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/LookupCommand.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,39 @@
+package org.drools.grid.internal.commands;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.grid.internal.NodeData;
+
+public class LookupCommand
+    implements
+    GenericCommand<String> {
+
+    private String identifier;
+
+    private String outIdentifier;
+
+    public LookupCommand(String identfier) {
+        this.identifier = identfier;
+    }
+
+    public LookupCommand(String identfier,
+                         String outIdentifier) {
+        this.identifier = identfier;
+        this.outIdentifier = outIdentifier;
+    }
+
+    public String execute(Context context) {
+        NodeData data = (NodeData) context.get( NodeData.NODE_DATA );
+
+        String instanceId = (String) data.getRoot().get( identifier );
+
+        if ( this.outIdentifier != null ) {
+            ((ExecutionResultImpl) ((KnowledgeCommandContext) context).getExecutionResults()).getResults().put( this.outIdentifier,
+                                                                                                                instanceId );
+        }
+        return instanceId;
+    }
+
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/RegisterCommand.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/commands/RegisterCommand.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/RegisterCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/RegisterCommand.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,32 @@
+package org.drools.grid.internal.commands;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.grid.internal.NodeData;
+
+public class RegisterCommand
+    implements
+    GenericCommand<Void> {
+
+    private String identifier;
+    private String instanceId;
+    private int    type;
+
+    public RegisterCommand(String identifier,
+                           String instanceId,
+                           int type) {
+        this.identifier = identifier;
+        this.instanceId = instanceId;
+        this.type = type;
+    }
+
+    public Void execute(Context context) {
+        NodeData data = (NodeData) context.get( NodeData.NODE_DATA );
+
+        data.getRoot().set( identifier,
+                            type + ":" + instanceId );
+
+        return null;
+    }
+
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/RegisterRemoteWorkItemHandlerCommand.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/commands/RegisterRemoteWorkItemHandlerCommand.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/RegisterRemoteWorkItemHandlerCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/commands/RegisterRemoteWorkItemHandlerCommand.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,75 @@
+package org.drools.grid.internal.commands;
+
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.WorkItemHandler;
+
+public class RegisterRemoteWorkItemHandlerCommand implements GenericCommand<Object> {
+	
+	private String handler;
+	private String workItemName;
+
+        public RegisterRemoteWorkItemHandlerCommand() {
+        }
+
+        public RegisterRemoteWorkItemHandlerCommand(String workItemName, String handler) {
+            this.handler = handler;
+            this.workItemName = workItemName;
+        }
+        
+	public String getHandler() {
+		return handler;
+	}
+
+	public void setHandler(String handler) {
+		this.handler = handler;
+	}
+
+	public String getWorkItemName() {
+		return workItemName;
+	}
+
+	public void setWorkItemName(String workItemName) {
+		this.workItemName = workItemName;
+	}
+
+    public Object execute(Context context) {
+        StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession(); 
+        WorkItemHandler workItemHandler = null;
+        try {
+             Class t = Class.forName(handler);
+             Constructor c = t.getConstructor(KnowledgeRuntime.class);
+             workItemHandler =  (WorkItemHandler) c.newInstance(ksession);
+        } catch (InstantiationException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IllegalAccessException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IllegalArgumentException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (InvocationTargetException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (NoSuchMethodException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (SecurityException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (ClassNotFoundException ex) {
+            Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        ksession.getWorkItemManager().registerWorkItemHandler(workItemName, workItemHandler);
+		return null;
+	}
+
+	public String toString() {
+		return "session.getWorkItemManager().registerWorkItemHandler("
+			+ workItemName + ", " + handler +  ");";
+	}
+
+}
\ No newline at end of file

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/AbstractBaseResponseHandler.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/AbstractBaseResponseHandler.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/AbstractBaseResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/AbstractBaseResponseHandler.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,69 @@
+package org.drools.grid.internal.responsehandlers;
+
+import java.lang.reflect.Constructor;
+
+import org.drools.grid.internal.MessageResponseHandler;
+
+/**
+ * Abstract base class for client ResponseHandlers. Provides synchonized access to <field>done</field> which represents
+ * if the response is completed. Also has an <field>error</field> which will be set when there is a problem with
+ * a response. Users of this class should check to see if the response completed successfully, via
+ * the <method>isDone</method> and the <method>hasError</method>.
+ * <p/>
+ * Please note that the <field>error</field> is actually the Exception that occured on the server while
+ * processing the request.
+ *
+ * @author <a href="mailto:stampy88 at yahoo.com">dave sinclair</a>
+ */
+public abstract class AbstractBaseResponseHandler
+    implements
+    MessageResponseHandler {
+    private volatile boolean done;
+    private RuntimeException error;
+
+    public synchronized boolean hasError() {
+        return error != null;
+    }
+
+    public synchronized RuntimeException getError() {
+        return error;
+    }
+
+    public synchronized void setError(RuntimeException error) {
+        this.error = error;
+        notifyAll();
+    }
+
+    public synchronized boolean isDone() {
+        return done;
+    }
+
+    protected synchronized void setDone(boolean done) {
+        this.done = done;
+        notifyAll();
+    }
+
+    /**
+     * This method will take the specified serverSideException, and create a new one for the client based
+     * on the serverSideException. This is done so a proper stack trace can be made for the client, as opposed
+     * to seeing the server side stack.
+     *
+     * @param serverSideException exception used to create client side exception
+     * @return client side exception
+     */
+    protected static RuntimeException createSideException(RuntimeException serverSideException) {
+        RuntimeException clientSideException;
+
+        try {
+            Constructor< ? extends RuntimeException> constructor = serverSideException.getClass().getConstructor( String.class );
+
+            clientSideException = constructor.newInstance( "Server-side Exception: " + serverSideException.getMessage() );
+        } catch ( Exception e ) {
+            // this should never happen - if it does, it is a programming error
+            throw new RuntimeException( "Could not create client side exception",
+                                        e );
+        }
+
+        return clientSideException;
+    }
+}

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/AbstractBlockingResponseHandler.java (from rev 32892, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/AbstractBlockingResponseHandler.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/AbstractBlockingResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/AbstractBlockingResponseHandler.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,37 @@
+/**
+ *
+ */
+package org.drools.grid.internal.responsehandlers;
+
+public abstract class AbstractBlockingResponseHandler extends AbstractBaseResponseHandler {
+
+    /**
+     * This method will wait the specified amount of time in milliseconds for the response to
+     * be completed. Completed is determined via the <field>done</field>. Returns true if the
+     * reponse was completed in time, false otherwise. If an error occurs, this method will throw
+     * a subclass of <code>RuntimeException</code> specific to the error.
+     *
+     * @param time max time to wait
+     * @return true if response is available, false otherwise
+     *
+     * @see org.drools.task.service.PermissionDeniedException
+     * @see org.drools.task.service.CannotAddTaskException
+     * @see javax.persistence.PersistenceException
+     */
+    public synchronized boolean waitTillDone(long time) {
+
+        if ( !isDone() ) {
+            try {
+                wait( time );
+            } catch ( InterruptedException e ) {
+                // swallow and return state of done
+            }
+        }
+
+        if ( hasError() ) {
+            throw createSideException( getError() );
+        }
+
+        return isDone();
+    }
+}
\ No newline at end of file

Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/BlockingMessageResponseHandler.java (from rev 33093, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/BlockingMessageResponseHandler.java)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/BlockingMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/internal/responsehandlers/BlockingMessageResponseHandler.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -0,0 +1,32 @@
+/**
+ *
+ */
+package org.drools.grid.internal.responsehandlers;
+
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageResponseHandler;
+
+public class BlockingMessageResponseHandler extends AbstractBlockingResponseHandler
+    implements
+    MessageResponseHandler {
+    private static final int ATTACHMENT_ID_WAIT_TIME = 100000;
+    private static final int CONTENT_ID_WAIT_TIME    = 50000;
+
+    private volatile Message message;
+
+    public synchronized void receive(Message message) {
+        this.message = message;
+        setDone( true );
+    }
+
+    public Message getMessage() {
+        boolean done = waitTillDone( CONTENT_ID_WAIT_TIME );
+
+        if ( !done ) {
+            throw new RuntimeException( "Timeout : unable to retrieve Object Id" );
+        }
+
+        return this.message;
+    }
+
+}
\ No newline at end of file

Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/strategies/StaticIncrementalSelectionStrategy.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-client-api/src/main/java/org/drools/grid/strategies/StaticIncrementalSelectionStrategy.java	2010-05-26 14:50:52 UTC (rev 33093)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/strategies/StaticIncrementalSelectionStrategy.java	2010-05-27 13:22:31 UTC (rev 33115)
@@ -20,8 +20,8 @@
 
 import org.drools.grid.GenericConnection;
 import org.drools.grid.GenericNodeConnector;
+ 
 
-
 /**
  *
  * @author salaboy



More information about the jboss-svn-commits mailing list