[jboss-svn-commits] JBL Code SVN: r33634 - in labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid: drools-grid-api and 45 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jun 25 00:31:36 EDT 2010
Author: salaboy21
Date: 2010-06-25 00:31:31 -0400 (Fri, 25 Jun 2010)
New Revision: 33634
Added:
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorType.java
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-distributed-api/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/pom.xml
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DistributedConnectionNode.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GridConnectionOLDDELETE.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/RioNodeConnector.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkingMemoryEntryPointGridClient.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/GetWorkingMemoryEntryPointGridCommand.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/resources/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/distributed/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/distributed/AppTest.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/pom.xml
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/strategies/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/strategies/GetMinimalKsessionNodes.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/RioResourceLocator.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/drools/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/drools/executionNodeService.groovy
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/manager-config.groovy
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/start-monitor.groovy
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/test-config.groovy
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java
Removed:
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.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/ConnectorException.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeService.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ExecutionNodeService.java
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/GenericHumanTaskConnector.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/GridConnection.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/NodeConnectionType.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalConnectionNode.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalDirectoryConnector.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalNodeConnector.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-api/src/main/java/org/drools/grid/remote/GenericConnectorFactory.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/RemoteConnectionNode.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-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/MinaRemoteDirectoryConnector.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/main/java/org/drools/grid/remote/mina/MinaRemoteNodeConnector.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GenericHumanTaskProvider.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/main/java/org/drools/grid/services/local/LocalDirectoryProvider.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalNodeProvider.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
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterTaskTest.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/ServiceAPITest.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/MinaRemoteHumanTaskConnector.java
labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/pom.xml
Log:
Adding Distributed Node API + impl project + tests
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/pom.xml 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/pom.xml 2010-06-25 04:31:31 UTC (rev 33634)
@@ -46,6 +46,7 @@
<artifactId>drools-compiler</artifactId>
<type>jar</type>
</dependency>
+
</dependencies>
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorException.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorException.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorException.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -10,7 +10,7 @@
}
public ConnectorException(Throwable cause) {
- super(cause);
+ super(cause.getMessage(),cause);
}
public ConnectorException(String message, Throwable cause) {
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorType.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorType.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ConnectorType.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,24 @@
+/*
+ * 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;
+
+/**
+ *
+ * @author salaboy
+ */
+public enum ConnectorType { LOCAL, REMOTE, DISTRIBUTED }
Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeLocalImpl.java (from rev 33584, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/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-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,122 @@
+/*
+ * 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 org.drools.KnowledgeBase;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryNodeLocalImpl implements DirectoryNodeService {
+
+ private String id;
+ private Map<String, String> directoryMap = new HashMap<String, String>();
+ private Map<String, String> directoryKbasesMap = new HashMap<String, String>();
+ private List<GenericNodeConnector> services = new ArrayList<GenericNodeConnector>();
+
+ public DirectoryNodeLocalImpl() {
+ this.id = "Local:Directory:";
+ }
+
+ public String getId() throws ConnectorException {
+ return this.id;
+ }
+
+ public void register(String executorId, String resourceId) throws ConnectorException, RemoteException {
+ System.out.println("Registering: " + executorId + " -- " + resourceId);
+ directoryMap.put(executorId, resourceId);
+
+ }
+
+ public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException, RemoteException {
+ System.out.println("Registering: " + executorId + " -- " + resourceConnector.getId());
+ directoryMap.put(executorId, resourceConnector.getId());
+ services.add(resourceConnector);
+
+ }
+
+ public GenericNodeConnector lookup(String executorId) throws ConnectorException, RemoteException {
+ GenericNodeConnector nodeConnector = 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)) {
+ nodeConnector = ss;
+ }
+ }
+
+ return nodeConnector;
+ }
+
+ public void registerKBase(String kbaseId, String resourceId) throws ConnectorException, RemoteException {
+ this.directoryKbasesMap.put(kbaseId, resourceId);
+ }
+
+ public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException, RemoteException {
+ //this.directoryKbasesMap.get(kbaseId); //based on the id I should create a kbase client
+
+ return null;
+
+ }
+
+
+ public Map<String, String> getDirectoryMap() throws ConnectorException, RemoteException {
+ return this.directoryMap;
+ }
+
+ public String lookupId(String resourceId) {
+ return this.directoryMap.get(resourceId);
+ }
+
+ public void dispose() throws ConnectorException {
+ //do nothing, it's local.
+ }
+
+ public void connect() throws ConnectorException {
+ //do nothing it's local!
+ }
+
+ public void disconnect() throws ConnectorException {
+ //do nothing
+ }
+
+ public DirectoryNodeService getDirectoryNodeService() throws ConnectorException {
+ return this;
+ }
+
+ public GenericConnection getConnection() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+
+
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+ return ConnectorType.LOCAL;
+ }
+
+
+
+}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeService.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeService.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/DirectoryNodeService.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -5,6 +5,7 @@
package org.drools.grid;
+import java.rmi.RemoteException;
import java.util.Map;
import org.drools.KnowledgeBase;
@@ -15,16 +16,15 @@
* @author salaboy
*/
-public interface DirectoryNodeService {
+public interface DirectoryNodeService extends GenericDirectoryConnector {
- public void register(String executorId, String resourceId) throws ConnectorException;
- public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException;
- public GenericNodeConnector lookup(String resourceId) throws ConnectorException;
- public String lookupId(String resourceId) throws ConnectorException;
- public void registerKBase(String kbaseId, String resourceId) throws ConnectorException;
- public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException;
- public void addService(GenericNodeConnector service);
- public Map<String, String> getDirectoryMap() throws ConnectorException;
- public void dispose() throws ConnectorException;
+ public void register(String executorId, String resourceId) throws ConnectorException, RemoteException;
+ public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException, RemoteException;
+ public GenericNodeConnector lookup(String resourceId) throws ConnectorException, RemoteException;
+ public String lookupId(String resourceId) throws ConnectorException, RemoteException;
+ public void registerKBase(String kbaseId, String resourceId) throws ConnectorException, RemoteException;
+ public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException, RemoteException;
+ public Map<String, String> getDirectoryMap() throws ConnectorException, RemoteException;
+ public void dispose() throws ConnectorException, RemoteException;
}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ExecutionNodeService.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ExecutionNodeService.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/ExecutionNodeService.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -4,6 +4,7 @@
*/
package org.drools.grid;
+import java.rmi.RemoteException;
import org.drools.grid.internal.Message;
@@ -12,7 +13,7 @@
* @author salaboy
*/
public interface ExecutionNodeService extends GenericNodeConnector{
- public Message write(Message msg) throws ConnectorException;
+ public Message write(Message msg) throws ConnectorException, RemoteException;
double getLoad() throws ConnectorException;
void setLoad(double load) throws ConnectorException;
double getKsessionCounter() throws ConnectorException;
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-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericDirectoryConnector.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -16,13 +16,15 @@
*/
package org.drools.grid;
+import java.rmi.RemoteException;
+
/**
*
* @author salaboy
*/
public interface GenericDirectoryConnector {
- public String getId() throws ConnectorException;
+ public String getId() throws ConnectorException, RemoteException;
void connect() throws ConnectorException;
@@ -32,5 +34,7 @@
public GenericConnection getConnection();
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException ;
+
}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericHumanTaskConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericHumanTaskConnector.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericHumanTaskConnector.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -16,6 +16,7 @@
*/
package org.drools.grid;
+import java.rmi.RemoteException;
import org.drools.grid.internal.GenericIoWriter;
import org.drools.grid.internal.Message;
@@ -37,4 +38,6 @@
Message write(Message msg) throws ConnectorException;
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException ;
+
}
Modified: 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/GenericNodeConnector.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GenericNodeConnector.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -1,20 +1,23 @@
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 {
- void connect() throws ConnectorException;
+ void connect() throws ConnectorException, RemoteException;
- void disconnect() throws ConnectorException;
+ void disconnect() throws ConnectorException, RemoteException;
- Message write(Message msg) throws ConnectorException;
+ Message write(Message msg) throws ConnectorException, RemoteException;
- String getId() throws ConnectorException;
+ String getId() throws ConnectorException, RemoteException;
- GenericConnection getConnection();
+ GenericConnection getConnection() throws ConnectorException ;
- NodeConnectionType getNodeConnectionType();
+ NodeConnectionType getNodeConnectionType() throws ConnectorException, RemoteException ;
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException ;
+
}
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-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/GridConnection.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -16,8 +16,11 @@
*/
package org.drools.grid;
+import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.drools.grid.strategies.DirectorySelectionStrategy;
import org.drools.grid.strategies.HumanTaskSelectionStrategy;
@@ -28,7 +31,7 @@
*
* @author salaboy
*/
-public class GridConnection implements GenericConnection {
+public class GridConnection implements GenericConnection {
private List<GenericNodeConnector> executionNodeConnectors;
private List<GenericDirectoryConnector> directoryNodeConnectors;
@@ -66,15 +69,23 @@
} else {
connector = getBestNode(strategy);
}
- NodeConnectionType type = connector.getNodeConnectionType();
+ System.out.println(">>>>>>>> Connector = " + connector);
+ NodeConnectionType type;
+ try {
+ type = connector.getNodeConnectionType();
+ System.out.println(">>>>>>>> Type = " + type);
+ connector.connect();
- connector.connect();
+ type.setConnector(connector);
+ type.setConnection(this);
+ type.init();
+ node = NodeFactory.newExecutionNode(type);
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridConnection.class.getName()).log(Level.SEVERE, null, ex);
+ }
- type.setConnector(connector);
- type.setConnection(this);
- type.init();
- node = NodeFactory.newExecutionNode(type);
+
// node = new ExecutionNode();
// node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderRemoteClient(connector));
// node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderRemoteClient(connector));
@@ -84,7 +95,12 @@
public DirectoryNodeService getDirectoryNode(DirectorySelectionStrategy directorySelectionStrategy) throws ConnectorException {
if (directoryNodeConnectors.isEmpty()) {
- return null;
+ //Should I return null or add a local directory?
+//
+ DirectoryNodeService localDirectory = new DirectoryNodeLocalImpl();
+ addDirectoryNode(localDirectory);
+ return localDirectory.getDirectoryNodeService();
+ // return null;
}
GenericDirectoryConnector connector = directoryNodeConnectors.get(0);
@@ -138,8 +154,19 @@
return executionNodes;
}
- public List<DirectoryNodeService> getDirectoryNodes() {
- throw new UnsupportedOperationException("not Implemented yet!");
+ public List<DirectoryNodeService> getDirectoryNodes() throws ConnectorException {
+ List<DirectoryNodeService> directories = new ArrayList<DirectoryNodeService>();
+ if (directoryNodeConnectors.isEmpty()) {
+ //Should I return null or add a local directory?
+ DirectoryNodeService localDirectory = new DirectoryNodeLocalImpl();
+ addDirectoryNode(localDirectory);
+ // return null;
+ }
+ for(GenericDirectoryConnector connector : directoryNodeConnectors){
+ connector.connect();
+ directories.add(connector.getDirectoryNodeService());
+ }
+ return directories;
}
public List<HumanTaskNodeService> getHumanTaskNodes() {
@@ -148,7 +175,11 @@
public void dispose() throws ConnectorException {
for (GenericNodeConnector connector : executionNodeConnectors) {
- connector.disconnect();
+ try {
+ connector.disconnect();
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridConnection.class.getName()).log(Level.SEVERE, null, ex);
+ }
}
for (GenericDirectoryConnector connector : directoryNodeConnectors) {
connector.disconnect();
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/NodeConnectionType.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/NodeConnectionType.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-api/src/main/java/org/drools/grid/NodeConnectionType.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -28,5 +28,6 @@
public void setConnection(GenericConnection connection);
public Set<Class<?>> getServicesKeys();
public <T> T getServiceImpl(Class<T> clazz);
+ public ConnectorType getConnectorType();
public void init();
}
Property changes on: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api
___________________________________________________________________
Name: svn:ignore
+ target
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/pom.xml (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/pom.xml 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>drools-grid</artifactId>
+ <groupId>org.drools</groupId>
+ <version>5.1.0.SNAPSHOT</version>
+ </parent>
+
+ <artifactId>drools-grid-distributed-api</artifactId>
+
+ <name>Drools :: Grid :: Distributed API</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-api</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-grid-api</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-grid-remote-api</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
+ </dependencies>
+</project>
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,170 @@
+/*
+ * 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.distributed;
+
+import java.rmi.RemoteException;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.DirectoryNodeService;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.grid.ConnectorType;
+import org.drools.grid.GenericConnection;
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.NodeConnectionType;
+import org.drools.grid.NodeFactory;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+import org.drools.grid.internal.commands.LookupCommand;
+import org.drools.grid.internal.commands.RegisterCommand;
+import org.drools.grid.remote.GenericConnectorFactory;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryLookupProviderGridClient implements DirectoryLookupFactoryService {
+
+ private GenericConnection connection;
+ private GenericNodeConnector currentConnector;
+ private MessageSession messageSession;
+
+ public DirectoryLookupProviderGridClient(GenericNodeConnector connector, GenericConnection connection) {
+ this.currentConnector = connector;
+ this.connection = connection;
+ this.messageSession = new MessageSession();
+ }
+
+ public void register(String identifier,
+ CommandExecutor executor) {
+
+ try {
+ String commandId = "client.lookup" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+ int type;
+ if (executor instanceof StatefulKnowledgeSession) {
+ type = 0;
+ } else {
+ throw new IllegalArgumentException("Type is not supported for registration");
+ }
+ Message msg = new Message(messageSession.getSessionId(), messageSession.getCounter().incrementAndGet(), false, new KnowledgeContextResolveFromContextCommand(new RegisterCommand(identifier, ((StatefulKnowledgeSessionGridClient) executor).getInstanceId(), type), null, null, null, null));
+ //System.out.println("Registering " + identifier + " - - " + currentService.getId());
+ for (DirectoryNodeService directory : connection.getDirectoryNodes()) {
+ try {
+ try {
+ directory.register(identifier, currentConnector.getId());
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ } catch (ConnectorException ex) {
+ Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ try {
+ Object object = currentConnector.write(msg).getPayload();
+ if (!(object instanceof FinishedCommand)) {
+ throw new RuntimeException("Response was not correctly ended");
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to execute message", e);
+ }
+ } catch (ConnectorException ex) {
+ Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ }
+
+ public CommandExecutor lookup(String identifier) {
+
+ CommandExecutor executor = null;
+ try {
+ String commandId = "client.lookup" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+ Message msg = new Message(messageSession.getSessionId(), messageSession.getCounter().incrementAndGet(), false, new KnowledgeContextResolveFromContextCommand(new LookupCommand(identifier, commandId), null, null, null, kresultsId));
+ //System.out.println("Looking up the session with identifier = "+identifier);
+ //First I need to get the correct client ExecutionNodeService with the identifier
+ //Look in all the DirectoryNodes
+ //DirectoryNodeService directory = (DirectoryNodeService) gridClient.getDirectories().iterator().next();
+ for (DirectoryNodeService directory : connection.getDirectoryNodes()) {
+
+ try {
+
+ if(directory.getConnectorType() == ConnectorType.DISTRIBUTED){
+ currentConnector = directory.lookup(identifier);
+ }else{
+ String connectorString = directory.lookupId(identifier);
+ currentConnector = GenericConnectorFactory.newNodeConnector(connectorString);
+ currentConnector.connect();
+ }
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (ConnectorException ex) {
+ Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ try {
+ Object object = currentConnector.write(msg).getPayload();
+ if (object == null) {
+ throw new RuntimeException("Response was not correctly received");
+ }
+ String value = (String) ((ExecutionResults) object).getValue(commandId);
+ String type = String.valueOf(value.charAt(0));
+ String instanceId = value.substring(2);
+
+ switch (Integer.parseInt(type)) {
+ case 0: {
+ executor = new StatefulKnowledgeSessionGridClient(instanceId, currentConnector, messageSession);
+ break;
+ }
+ default: {
+ }
+ }
+
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to execute message", e);
+ }
+ } // public Map<String, Map<String, String>> getDirectoryMap(){
+ catch (ConnectorException ex) {
+ Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ return executor;
+ }
+// public Map<String, Map<String, String>> getDirectoryMap(){
+// Map<String, Map<String, String>> directoryMap = new HashMap<String,Map<String, String>>();
+// for (DirectoryNodeService directory : gridClient.getDirectories()) {
+// try {
+// directoryMap.put(directory.getId(), directory.getDirectoryMap());
+// } catch (RemoteException ex) {
+// Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+// }
+//
+//
+// }
+// return directoryMap;
+//
+// }
+
+ public Map<String, String> getDirectoryMap() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DistributedConnectionNode.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DistributedConnectionNode.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/DistributedConnectionNode.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,76 @@
+/*
+ * 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.distributed;
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.ConnectorType;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.NodeConnectionType;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DistributedConnectionNode implements NodeConnectionType, Serializable {
+
+ private final Map<Class<?>, Object> services = new ConcurrentHashMap<Class<?>, Object>();
+ private GenericNodeConnector connector;
+ private GenericConnection connection;
+
+ public DistributedConnectionNode() {
+ }
+
+ public DistributedConnectionNode(GenericNodeConnector connector, GenericConnection connection) {
+
+ this.connector = connector;
+ this.connection = connection;
+
+ }
+
+ public void init() {
+ services.put(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderGridClient(connector, connection));
+ services.put(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderGridClient(connector, connection));
+ services.put(DirectoryLookupFactoryService.class, new DirectoryLookupProviderGridClient(connector, connection));
+ }
+
+ public Set<Class<?>> getServicesKeys() {
+ return services.keySet();
+ }
+
+ public <T> T getServiceImpl(Class<T> clazz) {
+ return (T) services.get(clazz);
+ }
+
+ public void setConnector(GenericNodeConnector connector) {
+ this.connector = connector;
+ }
+
+ public void setConnection(GenericConnection connection) {
+ this.connection = connection;
+ }
+
+ public ConnectorType getConnectorType() {
+ return ConnectorType.DISTRIBUTED;
+ }
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,135 @@
+package org.drools.grid.distributed;
+
+import org.drools.grid.DirectoryNodeService;
+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;
+import org.drools.grid.internal.NodeData;
+import org.drools.grid.internal.GenericIoWriter;
+import org.drools.grid.internal.GenericMessageHandler;
+import org.drools.grid.internal.Message;
+
+
+public class GenericMessageGridHandlerImpl implements GenericMessageHandler {
+ private SystemEventListener systemEventListener;
+
+ private NodeData data;
+ private DirectoryNodeService directory;
+
+ public GenericMessageGridHandlerImpl(NodeData data,
+ SystemEventListener systemEventListener) {
+ this.systemEventListener = systemEventListener;
+ this.data = data;
+
+// Class[] classes = new Class[]{org.drools.grid.DirectoryNodeService.class};
+// ServiceTemplate tmpl = new ServiceTemplate(null, classes,null);
+//
+// LookupDiscoveryManager lookupDiscovery = null;
+// try {
+// lookupDiscovery = new LookupDiscoveryManager(LookupDiscoveryManager.ALL_GROUPS, null, null);
+// } catch (IOException ex) {
+// Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+// }
+//
+// System.out.println("Discovering Manager service ...");
+//
+// ServiceDiscoveryManager serviceDiscovery = null;
+// try {
+// serviceDiscovery = new ServiceDiscoveryManager(lookupDiscovery, new LeaseRenewalManager());
+// } catch (IOException ex) {
+// Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+// }
+//
+// /* Wait no more then 10 seconds to discover the service */
+// ServiceItem item = null;
+// try {
+// try {
+// item = serviceDiscovery.lookup(tmpl, null, 1000);
+// } catch (RemoteException ex) {
+// Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+// }
+// } catch (InterruptedException ex) {
+// Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+// }
+// serviceDiscovery.terminate();
+//
+// if(item != null) {
+// System.out.println("Discovered Registry service");
+// if(item.service instanceof DirectoryNodeService){
+// registry = (DirectoryNodeService)item.service;
+//
+// }
+//
+//
+// } else {
+// System.out.println("Registry service not discovered, make sure the"+
+// "service is deployed");
+// }
+
+ }
+
+
+
+
+
+
+ /* (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 );
+ //@TODO: replace with Environment ?? this needs to change..
+ localSessionContext.set("registry", directory);
+
+ for ( GenericCommand cmd : commands ) {
+ // evaluate the commands
+ cmd.execute( localSessionContext );
+ }
+
+ if(localSessionContext.get("kbase") != null){
+ session.write( new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ localSessionContext.get("kbase") ), null );
+
+ } else 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 );
+ }
+ }
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GridConnectionOLDDELETE.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GridConnectionOLDDELETE.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/GridConnectionOLDDELETE.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,186 @@
+/*
+ * 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.distributed;
+
+/**
+ *
+ * @author salaboy
+ */
+public class GridConnectionOLDDELETE {//implements GenericConnection {
+
+// static {
+// System.setSecurityManager(new RMISecurityManager() {
+//
+// @Override
+// public void checkPermission(Permission perm) {
+// }
+// });
+//
+// }
+// //Cached Services
+// private List<GenericNodeConnector> nodeConnectors;
+// //Cached Directories
+// private List<DirectoryNodeService> directories;
+//
+// public GridConnectionOLDDELETE() {
+// this.nodeConnectors = new ArrayList<GenericNodeConnector>();
+// this.directories = new ArrayList<DirectoryNodeService>();
+// }
+//
+// public void addNodeConnector(GenericNodeConnector service) {
+//
+// this.nodeConnectors.add(service);
+//
+// }
+//
+// public void addDirectoryNode(DirectoryNodeService directory) {
+// this.directories.add(directory);
+// }
+//
+// // In real scenarios this method will be in charge of populating
+// // all the ExecutionNodeService and DirectoryServices
+// public boolean connect() throws IOException, RemoteException, InterruptedException {
+// Logger.getLogger("org.rioproject.associations").setLevel(Level.FINEST);
+// AssociationDescriptor descriptorExecutionNode = AssociationDescriptor.create("ExecutionNodeService",
+// "nodeConnectorsInj",
+// org.drools.grid.ExecutionNodeService.class,
+// DiscoveryGroupManagement.ALL_GROUPS);
+// AssociationDescriptor descriptorDirectoryNode = AssociationDescriptor.create("DirectoryNodeService",
+// "directoriesInj",
+// org.drools.grid.DirectoryNodeService.class,
+// DiscoveryGroupManagement.ALL_GROUPS);
+// /*
+// * Create and configure association management. Make sure to set
+// * the backend, this is the object that has the setter method provided
+// * above. For our case its "this".
+// */
+// AssociationMgmt aMgr = new AssociationMgmt();
+// aMgr.setBackend(this);
+// aMgr.addAssociationDescriptors(descriptorExecutionNode, descriptorDirectoryNode);
+//
+//
+//
+// Iterable<org.drools.grid.ExecutionNodeService> executionNodes = aMgr.getAssociations("ExecutionNodeService", null)[0];
+// for (ExecutionNodeService executionNodeService : executionNodes) {
+// addNodeConnector(executionNodeService);
+// }
+//
+// Iterable<org.drools.grid.DirectoryNodeService> directoryNodes = aMgr.getAssociations("DirectoryNodeService", null)[0];
+// for (DirectoryNodeService directoryNodeService : directoryNodes) {
+// addDirectoryNode(directoryNodeService);
+// }
+//
+// long waited = 0;
+// while (nodeConnectors.size() == 0 && waited < 30000) {
+// Thread.sleep(500);
+// waited += 500;
+// }
+//
+// if (nodeConnectors.size() > 0 && directories.size() > 0) {
+// return true;
+// }
+//
+//
+//
+// return false;
+// }
+//
+// @Override
+// public ExecutionNode getExecutionNode(NodeSelectionStrategy strategy) {
+// ExecutionNode node = null;
+// GenericNodeConnector currentNode = null;
+// try {
+//
+// //if the strategy is null use the default one
+// if (strategy == null) {
+// currentNode = getBestNode(new StaticIncrementalSelectionStrategy(this));
+// } else {
+// strategy.setConnection(this);
+// currentNode = getBestNode(strategy);
+// }
+// if (currentNode.connect()) {
+// node = new ExecutionNode();
+// node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderGridClient(currentNode, this));
+// node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderGridClient(currentNode, this));
+// node.set(DirectoryLookupFactoryService.class, new DirectoryLookupProviderGridClient(currentNode, this));
+// }
+//
+// } catch (RemoteException ex) {
+// Logger.getLogger(GridConnectionOLDDELETE.class.getName()).log(Level.SEVERE, null, ex);
+// }
+// return node;
+// }
+//
+// public GenericNodeConnector getBestNode(NodeSelectionStrategy nodeSelectionStrategy) {
+// return nodeSelectionStrategy.getBestNode();
+//
+//
+// }
+//
+// public void setNodeConnectorsInj(Iterable<ExecutionNodeService> nodes) {
+// for (ExecutionNodeService node : nodes) {
+// addNodeConnector(node);
+// }
+//
+//
+// }
+//
+// public void setDirectoriesInj(Iterable<DirectoryNodeService> nodes) {
+// for (DirectoryNodeService node : nodes) {
+// addDirectoryNode(node);
+// }
+//
+//
+// }
+//
+// public List<DirectoryNodeService> getDirectories() {
+// return (List<DirectoryNodeService>) directories;
+//
+//
+// }
+//
+// public void setDirectories(List<DirectoryNodeService> directories) {
+// this.directories = directories;
+//
+//
+// }
+//
+// public List<GenericNodeConnector> getNodeConnectors() {
+// return nodeConnectors;
+//
+//
+// }
+//
+// public void setNodeConnectors(List<GenericNodeConnector> services) {
+// this.nodeConnectors = services;
+//
+//
+// }
+//
+// @Override
+// public DirectoryNodeService getDirectoryNode(DirectoryServiceSelectionStrategy directorySelectionStrategy) {
+// return ((List<DirectoryNodeService>) directories).get(0);
+//
+//
+// }
+//
+// @Override
+// public ExecutionNode getExecutionNode() {
+// return getExecutionNode(null);
+//
+// }
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,203 @@
+package org.drools.grid.distributed;
+
+import org.drools.grid.ConnectorException;
+import org.drools.grid.DirectoryNodeService;
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import java.util.Collection;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeBaseAddKnowledgePackagesCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definition.process.Process;
+import org.drools.definition.rule.Rule;
+import org.drools.definition.type.FactType;
+import org.drools.event.knowledgebase.KnowledgeBaseEventListener;
+import org.drools.grid.GenericConnection;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.grid.internal.CollectionClient;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+import org.drools.grid.distributed.command.NewStatefulKnowledgeSessionGridCommand;
+
+public class KnowledgeBaseGridClient
+ implements
+ KnowledgeBase {
+
+ private GenericNodeConnector connector;
+ private MessageSession messageSession;
+ private String instanceId;
+ private GenericConnection connection;
+
+ public KnowledgeBaseGridClient(String instanceId,
+ GenericNodeConnector client, MessageSession messageSession, GenericConnection connection) {
+ this.instanceId = instanceId;
+
+ this.connector = client;
+ this.messageSession = messageSession;
+ this.connection = connection;
+ }
+
+ public void addKnowledgePackages(Collection<KnowledgePackage> kpackages) {
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ String kuilderInstanceId = ((CollectionClient<KnowledgePackage>) kpackages).getParentInstanceId();
+ Message msg = new Message(messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand(new KnowledgeBaseAddKnowledgePackagesCommand(),
+ kuilderInstanceId,
+ instanceId,
+ null,
+ kresultsId));
+
+ //I should register the kbase ID??
+ DirectoryNodeService directory = null;
+ try {
+ //get best directory????????/
+ directory = connection.getDirectoryNode(null);
+ } catch (ConnectorException ex) {
+ Logger.getLogger(KnowledgeBaseGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ if (directory != null) {
+ try {
+ try {
+ directory.registerKBase(instanceId, connector.getId());
+ } catch (RemoteException ex) {
+ Logger.getLogger(KnowledgeBaseGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ } catch (ConnectorException ex) {
+ Logger.getLogger(KnowledgeBaseGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
+
+
+ try {
+ Object object = connector.write(msg).getPayload();
+
+ if (!(object instanceof FinishedCommand)) {
+ throw new RuntimeException("Response was not correctly ended");
+ }
+
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to execute message",
+ e);
+ }
+ }
+
+ public FactType getFactType(String packageName,
+ String typeName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgePackage getKnowledgePackage(String packageName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Collection<KnowledgePackage> getKnowledgePackages() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Process getProcess(String processId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Rule getRule(String packageName,
+ String ruleName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public StatefulKnowledgeSession newStatefulKnowledgeSession() {
+ return newStatefulKnowledgeSession(null,
+ null);
+ }
+
+ public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeSessionConfiguration conf,
+ Environment environment) {
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ String localId = UUID.randomUUID().toString();
+
+ Message msg = new Message(messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand("__TEMP__",
+ localId,
+ new KnowledgeContextResolveFromContextCommand(new NewStatefulKnowledgeSessionGridCommand(null, instanceId),
+ null,
+ instanceId,
+ null,
+ kresultsId)));
+
+ try {
+ Object object = connector.write(msg).getPayload();
+
+ if (!(object instanceof FinishedCommand)) {
+ throw new RuntimeException("Response was not correctly ended");
+ }
+
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to execute message",
+ e);
+ }
+
+ return new StatefulKnowledgeSessionGridClient(localId,
+ connector, messageSession);
+ }
+
+ public StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public StatelessKnowledgeSession newStatelessKnowledgeSession() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void removeKnowledgePackage(String packageName) {
+ // TODO Auto-generated method stub
+ }
+
+ public void removeProcess(String processId) {
+ // TODO Auto-generated method stub
+ }
+
+ public void removeRule(String packageName,
+ String ruleName) {
+ // TODO Auto-generated method stub
+ }
+
+ public void addEventListener(KnowledgeBaseEventListener listener) {
+ // TODO Auto-generated method stub
+ }
+
+ public Collection<KnowledgeBaseEventListener> getKnowledgeBaseEventListeners() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void removeEventListener(KnowledgeBaseEventListener listener) {
+ // TODO Auto-generated method stub
+ }
+
+ public void removeFunction(String packageName, String ruleName) {
+ // TODO Auto-generated method stub
+ }
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,123 @@
+package org.drools.grid.distributed;
+
+
+import org.drools.grid.ExecutionNodeService;
+import java.util.Properties;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.SystemEventListenerFactory;
+
+import org.drools.command.FinishedCommand;
+import org.drools.command.NewKnowledgeBaseCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.grid.GenericConnection;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+
+
+public class KnowledgeBaseProviderGridClient
+ implements
+ KnowledgeBaseFactoryService {
+
+ private GenericConnection connection;
+ private String localId = "";
+ private GenericNodeConnector connector;
+ private MessageSession messageSession;
+
+ public KnowledgeBaseProviderGridClient(GenericNodeConnector connector, GenericConnection connection) {
+
+ this.connection = connection;
+ this.messageSession = new MessageSession();
+ this.connector = new RioNodeConnector("client 1", SystemEventListenerFactory.getSystemEventListener(), (ExecutionNodeService) connector);
+
+ }
+
+
+ public Environment newEnvironment() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBase newKnowledgeBase() {
+ return newKnowledgeBase( ( KnowledgeBaseConfiguration ) null );
+ }
+
+ public KnowledgeBase newKnowledgeBase(KnowledgeBaseConfiguration conf) {
+ //return new NewKnowledgeBaseCommand(null);
+ if(localId == null || localId.equals("")){
+ localId = UUID.randomUUID().toString();
+ }
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new NewKnowledgeBaseCommand( conf ) ) );
+ try {
+ Object object = connector.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ return new KnowledgeBaseGridClient( localId,
+ connector, messageSession, connection);
+
+ }
+
+ public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration() {
+ // TODO: change this to use a remote implementation instead the local factory?
+ return KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
+ }
+
+ public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration(Properties properties,
+ ClassLoader classLoader) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeSessionConfiguration newKnowledgeSessionConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeSessionConfiguration newKnowledgeSessionConfiguration(Properties properties) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBase newKnowledgeBase(String kbaseId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBase newKnowledgeBase(String kbaseId,
+ KnowledgeBaseConfiguration conf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String getLocalId() {
+ return localId;
+ }
+
+ public void setLocalId(String localId) {
+ this.localId = localId;
+ }
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,147 @@
+package org.drools.grid.distributed;
+
+import org.drools.KnowledgeBase;
+
+import java.util.Collection;
+
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.ResourceConfiguration;
+import org.drools.builder.ResourceType;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.builder.KnowledgeBuilderAddCommand;
+import org.drools.command.builder.KnowledgeBuilderGetErrorsCommand;
+import org.drools.command.builder.KnowledgeBuilderHasErrorsCommand;
+import org.drools.definition.KnowledgePackage;
+import org.drools.io.Resource;
+import org.drools.runtime.ExecutionResults;
+import org.drools.grid.internal.CollectionClient;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+
+
+public class KnowledgeBuilderGridClient
+ implements
+ KnowledgeBuilder {
+ //private GridExecutionNodeConnection nodeConnection;
+ private String instanceId;
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+
+ public KnowledgeBuilderGridClient(String instanceId,
+ GenericNodeConnector client, MessageSession messageSession) {
+ this.instanceId = instanceId;
+ //this.nodeConnection = nodeConnection;
+ this.client = client;
+ this.messageSession = messageSession;
+
+
+ }
+
+ public void add(Resource resource,
+ ResourceType resourceType) {
+ add( resource,
+ resourceType,
+ null );
+ }
+
+ public void add(Resource resource,
+ ResourceType resourceType,
+ ResourceConfiguration configuration) {
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderAddCommand( resource,
+ resourceType,
+ configuration ),
+ instanceId,
+ null,
+ null,
+ null ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ }
+
+ public KnowledgeBuilderErrors getErrors() {
+ String commandId = "kbuilder.getErrors_" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderGetErrorsCommand( commandId ),
+ instanceId,
+ null,
+ null,
+ kresultsId ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return (KnowledgeBuilderErrors) ((ExecutionResults) object).getValue( commandId );
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ }
+
+ public Collection<KnowledgePackage> getKnowledgePackages() {
+ return new CollectionClient<KnowledgePackage>( this.instanceId );
+ }
+
+ public boolean hasErrors() {
+ String commandId = "kbuilder.hasErrors_" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.getNextId(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderHasErrorsCommand( commandId ),
+ instanceId,
+ null,
+ null,
+ kresultsId ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return (Boolean) ((ExecutionResults) object).getValue( commandId );
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+
+
+ }
+
+ @Override
+ public KnowledgeBase newKnowledgeBase() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,99 @@
+/**
+ *
+ */
+package org.drools.grid.distributed;
+
+
+import org.drools.grid.ExecutionNodeService;
+import java.util.Properties;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.SystemEventListenerFactory;
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.command.FinishedCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.command.builder.NewKnowledgeBuilderCommand;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+
+
+public class KnowledgeBuilderProviderGridClient
+ implements
+ KnowledgeBuilderFactoryService {
+
+ private MessageSession messageSession;
+ private GenericNodeConnector client;
+
+
+
+ public KnowledgeBuilderProviderGridClient(GenericNodeConnector connector, GenericConnection connection) {
+ this.messageSession = new MessageSession();
+ client = new RioNodeConnector("client 1", SystemEventListenerFactory.getSystemEventListener(), (ExecutionNodeService) connector);
+
+ }
+
+ public DecisionTableConfiguration newDecisionTableConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder() {
+ String localId = UUID.randomUUID().toString();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new NewKnowledgeBuilderCommand( null ) ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ return new KnowledgeBuilderGridClient( localId,
+ client, messageSession );
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBuilderConfiguration conf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase,
+ KnowledgeBuilderConfiguration conf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration(Properties properties,
+ ClassLoader classLoader) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/RioNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/RioNodeConnector.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/RioNodeConnector.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,102 @@
+package org.drools.grid.distributed;
+
+import java.net.SocketAddress;
+import java.rmi.RemoteException;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.drools.SystemEventListener;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.NodeConnectionType;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageResponseHandler;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.GridConnection;
+
+public class RioNodeConnector
+ implements GenericNodeConnector {
+
+ protected final String name;
+ protected AtomicInteger counter;
+ protected ExecutionNodeService executionNode;
+ protected SocketAddress address;
+ protected SystemEventListener eventListener;
+
+ public RioNodeConnector(String name,
+ SystemEventListener eventListener) {
+ if (name == null) {
+ throw new IllegalArgumentException("Name can not be null");
+ }
+ this.name = name;
+ this.counter = new AtomicInteger();
+ this.eventListener = eventListener;
+
+ }
+
+ public RioNodeConnector(String name,
+ SystemEventListener eventListener,
+ ExecutionNodeService executionNode) {
+ if (name == null) {
+ throw new IllegalArgumentException("Name can not be null");
+ }
+ this.name = name;
+ this.counter = new AtomicInteger();
+ this.eventListener = eventListener;
+ this.executionNode = executionNode;
+
+
+ }
+
+
+ public Message write(Message msg) throws ConnectorException, RemoteException {
+ if (executionNode != null) {
+
+
+ Message returnMessage = this.executionNode.write(msg);
+ return returnMessage;
+
+
+ }
+ throw new IllegalStateException("sessionService should not be null");
+ }
+
+ public void write(Message msg,
+ MessageResponseHandler responseHandler) {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getId() throws ConnectorException, RemoteException {
+
+ return executionNode.getId();
+
+
+ }
+
+ public void setNodeService(Object object) {
+ this.executionNode = (ExecutionNodeService) object;
+
+
+ }
+
+ public void connect() throws ConnectorException {
+ //do nothing, here we use auto discover
+ }
+
+ public void disconnect() throws ConnectorException {
+ //I don't need to be disconected
+ }
+
+ public GenericConnection getConnection() throws ConnectorException {
+ return new GridConnection();
+ }
+
+ public NodeConnectionType getNodeConnectionType() throws ConnectorException {
+ return new DistributedConnectionNode();
+ }
+
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+ return ConnectorType.DISTRIBUTED;
+ }
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,511 @@
+package org.drools.grid.distributed;
+
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.drools.KnowledgeBase;
+import org.drools.command.Command;
+import org.drools.command.ExecuteCommand;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.GetGlobalCommand;
+import org.drools.command.runtime.SetGlobalCommand;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.event.process.ProcessEventListener;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.runtime.Calendars;
+import org.drools.runtime.Environment;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.ExitPoint;
+import org.drools.runtime.Globals;
+import org.drools.runtime.ObjectFilter;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.runtime.rule.Agenda;
+import org.drools.runtime.rule.AgendaFilter;
+import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.QueryResults;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+import org.drools.grid.distributed.command.GetWorkingMemoryEntryPointGridCommand;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+import org.drools.grid.internal.commands.RegisterRemoteWorkItemHandlerCommand;
+import org.drools.grid.remote.internal.commands.GetWorkItemManagerCommand;
+import org.drools.grid.remote.internal.commands.StartProcessRemoteCommand;
+import org.drools.time.SessionClock;
+
+
+public class StatefulKnowledgeSessionGridClient
+ implements
+ StatefulKnowledgeSession {
+
+ private GenericNodeConnector connector;
+ private String instanceId;
+ private MessageSession messageSession;
+
+
+
+
+
+
+ public StatefulKnowledgeSessionGridClient(String instanceId, GenericNodeConnector connector, MessageSession messageSession) {
+ this.instanceId = instanceId;
+ this.connector = connector;
+ this.messageSession = messageSession;
+ }
+
+
+
+
+ public String getInstanceId() {
+ return this.instanceId;
+ }
+
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public int getId() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int fireAllRules() {
+ String commandId = "ksession.fireAllRules" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.getCounter().incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new FireAllRulesCommand( commandId ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ Object object = connector.write( msg ).getPayload();
+
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return (Integer) ((ExecutionResults) object).getValue( commandId );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+ }
+
+ public int fireAllRules(int max) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int fireAllRules(AgendaFilter agendaFilter) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public void fireUntilHalt() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void fireUntilHalt(AgendaFilter agendaFilter) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public ExecutionResults execute(Command command) {
+ String commandId = "ksession.execute" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new ExecuteCommand( commandId,
+ command ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object object = connector.write( msg ).getPayload();
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return (ExecutionResults) ((ExecutionResults) object).getValue( commandId );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+ }
+
+ public Environment getEnvironment() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Object getGlobal(String identifier) {
+ String commandId = "ksession.execute" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new GetGlobalCommand( identifier ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object result = connector.write( msg ).getPayload();
+ if ( result == null ) {
+ throw new RuntimeException( "Response was not correctly received = null" );
+ }
+
+ return result;
+
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+ }
+
+ public Globals getGlobals() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBase getKnowledgeBase() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public <T extends SessionClock> T getSessionClock() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void registerExitPoint(String name,
+ ExitPoint exitPoint) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setGlobal(String identifier,
+ Object object) {
+ String commandId = "ksession.execute" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new SetGlobalCommand( identifier,
+ object ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object result = connector.write( msg ).getPayload();
+ if ( result == null ) {
+ throw new RuntimeException( "Response was not correctly received = null" );
+ }
+
+ if ( !(result instanceof FinishedCommand)) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ }
+
+ public void unregisterExitPoint(String name) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Agenda getAgenda() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public QueryResults getQueryResults(String query) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public QueryResults getQueryResults(String query,
+ Object[] arguments) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public WorkingMemoryEntryPoint getWorkingMemoryEntryPoint(String name) {
+ String commandId = "ksession.execute" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new GetWorkingMemoryEntryPointGridCommand( name ),
+ null,
+ null,
+ instanceId,
+ name,
+ kresultsId ) );
+
+ try {
+ Object object = connector.write( msg ).getPayload();
+
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return new WorkingMemoryEntryPointGridClient(name, connector, messageSession);
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ }
+
+ public Collection< ? extends WorkingMemoryEntryPoint> getWorkingMemoryEntryPoints() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void halt() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public FactHandle getFactHandle(Object object) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public <T extends FactHandle> Collection<T> getFactHandles() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public <T extends FactHandle> Collection<T> getFactHandles(ObjectFilter filter) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Object getObject(FactHandle factHandle) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Collection<Object> getObjects() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Collection<Object> getObjects(ObjectFilter filter) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public FactHandle insert(Object object) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void retract(FactHandle handle) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void update(FactHandle handle,
+ Object object) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void abortProcessInstance(long id) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public ProcessInstance getProcessInstance(long id) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Collection<ProcessInstance> getProcessInstances() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public WorkItemManager getWorkItemManager() {
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ true,
+ new KnowledgeContextResolveFromContextCommand( new GetWorkItemManagerCommand(),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ Object payload = connector.write( msg ).getPayload();
+ WorkItemManager workItemManager = (WorkItemManager) ((ExecutionResults) payload).getValue( "workItemManager" );
+ ((WorkItemManagerGridClient)workItemManager).setClient(connector);
+ ((WorkItemManagerGridClient)workItemManager).setMessageSession(messageSession);
+ ((WorkItemManagerGridClient)workItemManager).setInstanceId(instanceId);
+ return workItemManager;
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message", e );
+ }
+ }
+
+ public void registerWorkItemHandler(String name, String workItemHandler){
+
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new RegisterRemoteWorkItemHandlerCommand(name, workItemHandler ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ connector.write( msg );
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+
+ }
+
+ public void signalEvent(String type,
+ Object event) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public ProcessInstance startProcess(String processId) {
+ String commandId = "ksession.execute" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new StartProcessRemoteCommand( processId ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object object = connector.write( msg ).getPayload();
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return (ProcessInstance) ((ExecutionResults) object).getValue( processId );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ }
+
+ public ProcessInstance startProcess(String processId,
+ Map<String, Object> parameters) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void addEventListener(WorkingMemoryEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void addEventListener(AgendaEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Collection<AgendaEventListener> getAgendaEventListeners() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Collection<WorkingMemoryEventListener> getWorkingMemoryEventListeners() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void removeEventListener(WorkingMemoryEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeEventListener(AgendaEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void addEventListener(ProcessEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Collection<ProcessEventListener> getProcessEventListeners() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void removeEventListener(ProcessEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public String getEntryPointId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public long getFactCount() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public void signalEvent(String type,
+ Object event,
+ long processInstanceId) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Calendars getCalendars() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,69 @@
+package org.drools.grid.distributed;
+
+
+import java.io.Serializable;
+import java.util.Map;
+
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.process.CompleteWorkItemCommand;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+
+
+/**
+ *
+ * @author Lucas Amador
+ * @author salaboy: salaboy at gmail.com
+ */
+public class WorkItemManagerGridClient implements WorkItemManager, Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ //private GridExecutionNodeConnection nodeConnection;
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+ private String instanceId;
+
+ public void abortWorkItem(long id) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void completeWorkItem(long id, Map<String, Object> results) {
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ true,
+ new KnowledgeContextResolveFromContextCommand( new CompleteWorkItemCommand(id, results),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ client.write( msg );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message", e );
+ }
+ }
+
+ public void registerWorkItemHandler(String workItemName, WorkItemHandler handler) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void setClient(GenericNodeConnector client) {
+ this.client = client;
+ }
+
+ public void setMessageSession(MessageSession messageSession) {
+ this.messageSession = messageSession;
+ }
+
+
+
+ public void setInstanceId(String instanceId) {
+ this.instanceId = instanceId;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkingMemoryEntryPointGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkingMemoryEntryPointGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/WorkingMemoryEntryPointGridClient.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,128 @@
+/*
+ * 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.distributed;
+
+import java.util.Collection;
+import org.drools.FactException;
+import org.drools.FactHandle;
+import org.drools.WorkingMemoryEntryPoint;
+import org.drools.command.ExecuteCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.rule.InsertObjectCommand;
+import org.drools.command.runtime.rule.InsertObjectInEntryPointCommand;
+import org.drools.common.DisconnectedFactHandle;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageSession;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.ObjectFilter;
+
+/**
+ *
+ * @author salaboy
+ */
+public class WorkingMemoryEntryPointGridClient implements WorkingMemoryEntryPoint{
+
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+ private String instanceId;
+
+ public WorkingMemoryEntryPointGridClient(String instanceId, GenericNodeConnector client, MessageSession messageSession) {
+ this.client = client;
+ this.messageSession = messageSession;
+ this.instanceId = instanceId;
+ }
+
+
+
+ public FactHandle insert(Object object) throws FactException {
+ String commandId = "ksession.insert" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new InsertObjectInEntryPointCommand(object, String.valueOf(object.hashCode()) ),
+ null,
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object result = client.write( msg ).getPayload();
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+ FactHandle handle = new DisconnectedFactHandle(((ExecutionResults) result).getFactHandle( String.valueOf(object.hashCode()) ).toString()) ;
+
+ return handle;
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+ }
+
+ public FactHandle insert(Object object, boolean dynamic) throws FactException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void retract(org.drools.runtime.rule.FactHandle handle) throws FactException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void update(org.drools.runtime.rule.FactHandle handle, Object object) throws FactException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public WorkingMemoryEntryPoint getWorkingMemoryEntryPoint(String name) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getEntryPointId() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public org.drools.runtime.rule.FactHandle getFactHandle(Object object) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Object getObject(org.drools.runtime.rule.FactHandle factHandle) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Collection<Object> getObjects() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Collection<Object> getObjects(ObjectFilter filter) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public <T extends org.drools.runtime.rule.FactHandle> Collection<T> getFactHandles() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public <T extends org.drools.runtime.rule.FactHandle> Collection<T> getFactHandles(ObjectFilter filter) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public long getFactCount() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/GetWorkingMemoryEntryPointGridCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/GetWorkingMemoryEntryPointGridCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/GetWorkingMemoryEntryPointGridCommand.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.distributed.command;
+
+/**
+ *
+ * @author salaboy
+ */
+
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+
+public class GetWorkingMemoryEntryPointGridCommand
+ implements
+ GenericCommand<WorkingMemoryEntryPoint> {
+
+ private String name;
+
+ public GetWorkingMemoryEntryPointGridCommand(String name) {
+ this.name = name;
+ }
+
+ public WorkingMemoryEntryPoint execute(Context context) {
+ StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
+ WorkingMemoryEntryPoint ep = ksession.getWorkingMemoryEntryPoint( name );
+
+ context.getContextManager().getDefaultContext().set(name, ep); //setWorkingMemoryEntryPoint( ep );
+ //((KnowledgeCommandContext) context.getContextManager() ).set(name, ep);
+ return ep;
+ }
+
+ public String toString() {
+ return "session.getWorkingMemoryEntryPoint( " + name + " );";
+ }
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,67 @@
+package org.drools.grid.distributed.command;
+
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.KnowledgeBase;
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.grid.ConnectorException;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.DirectoryNodeService;
+
+
+public class NewStatefulKnowledgeSessionGridCommand
+ implements
+ GenericCommand<StatefulKnowledgeSession> {
+
+ private KnowledgeSessionConfiguration ksessionConf;
+ private String kbaseId;
+
+ public NewStatefulKnowledgeSessionGridCommand(KnowledgeSessionConfiguration ksessionConf) {
+ this.ksessionConf = ksessionConf;
+ }
+
+ public NewStatefulKnowledgeSessionGridCommand(KnowledgeSessionConfiguration ksessionConf, String kbaseId) {
+ this.ksessionConf = ksessionConf;
+ this.kbaseId = kbaseId;
+ }
+
+
+ public StatefulKnowledgeSession execute(Context context) {
+
+ KnowledgeBase kbase = ((KnowledgeCommandContext) context).getKnowledgeBase();
+ DirectoryNodeService registry = (DirectoryNodeService)context.get("registry");
+// System.out.println("Inside Grid Command!!!!!!!!");
+// System.out.println("Registry = "+registry);
+// System.out.println("KbaseId = "+kbaseId);
+ StatefulKnowledgeSession ksession;
+
+ if( kbase == null){
+
+ try {
+ //@TODO: need to find the best way to injec the service in the command or the command executor.
+ //lookup in the registry service.
+ kbase = registry.lookupKBase(kbaseId);
+ } catch (RemoteException ex) {
+ Logger.getLogger(NewStatefulKnowledgeSessionGridCommand.class.getName()).log(Level.SEVERE, null, ex);
+
+ } catch (ConnectorException ex) {
+ Logger.getLogger(NewStatefulKnowledgeSessionGridCommand.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ }
+ if ( this.ksessionConf == null ) {
+ System.out.println("Kbase inside the newStatefull Session = "+kbase);
+ ksession = kbase.newStatefulKnowledgeSession();
+
+ } else {
+ ksession = kbase.newStatefulKnowledgeSession( this.ksessionConf, null );
+ }
+
+ return ksession;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/distributed/AppTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/distributed/AppTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-api/src/test/java/org/drools/distributed/AppTest.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,38 @@
+package org.drools.distributed;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
Property changes on: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio
___________________________________________________________________
Name: svn:ignore
+ target
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/pom.xml (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/pom.xml 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>drools-grid</artifactId>
+ <groupId>org.drools</groupId>
+ <version>5.1.0.SNAPSHOT</version>
+ </parent>
+ <artifactId>drools-grid-distributed-rio</artifactId>
+
+ <name>Drools :: Grid :: Distributed Node :: Rio</name>
+ <packaging>oar</packaging>
+
+ <dependencies>
+
+ <!-- Drools Runtime -->
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-api</artifactId>
+
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-core</artifactId>
+
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-compiler</artifactId>
+
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-grid-api</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-grid-distributed-api</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ </dependency>
+
+ <!-- RIO Runtime -->
+ <dependency>
+ <groupId>org.rioproject</groupId>
+ <artifactId>rio</artifactId>
+ <version>4.1-SNAPSHOT</version>
+ </dependency>
+
+ <!-- RIO Test framework -->
+ <dependency>
+ <groupId>org.rioproject</groupId>
+ <artifactId>rio-test</artifactId>
+ <version>4.1-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- RIO Gnostic -->
+ <dependency>
+ <groupId>org.rioproject</groupId>
+ <artifactId>gnostic</artifactId>
+ <version>4.1-SNAPSHOT</version>
+
+ </dependency>
+
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>net.jini</groupId>
+ <artifactId>jsk-lib</artifactId>
+ <version>2.1</version>
+ <type>jar</type>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-rio-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <opstring>src/main/resources/org/drools/executionNodeService.groovy</opstring>
+ <createJar>
+ <classifier>dl</classifier>
+ <ins>
+ <in>org.drools.grid</in>
+ <!--in>org.rioproject.gnostic</in-->
+ </ins>
+ <topclasses>
+ <topclass>org.drools.grid.ExecutionNodeService</topclass>
+ <!--topclass>org.drools.grid.generic.DirectoryNodeService</topclass-->
+ <topclass>org.drools.grid.distributed.RioNodeConnector</topclass>
+ <topclass>org.drools.grid.distributed.util.IDEntry</topclass>
+ <topclass>org.drools.grid.distributed.command.NewStatefulKnowledgeSessionGridCommand</topclass>
+ <topclass>org.drools.impl.SystemEventListenerServiceImpl</topclass>
+ <!--topclass>org.rioproject.gnostic.Gnostic</topclass-->
+ </topclasses>
+ </createJar>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>**/*IT*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>failsafe-maven-plugin</artifactId>
+ <version>2.4.3-alpha-1</version>
+ <configuration>
+ <forkMode>always</forkMode>
+ <argLine>-DRIO_TEST_ATTACH</argLine>
+ <systemProperties>
+
+ <property>
+ <name>opstring</name>
+ <value>src/main/resources/org/drools/executionNodeService.groovy</value>
+ </property>
+ <property>
+ <name>org.rioproject.test.config</name>
+ <value>src/test/conf/test-config.groovy</value>
+ </property>
+
+ <property>
+ <name>org.rioproject.test.manager.config</name>
+ <value>src/test/conf/manager-config.groovy</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+
+
+</project>
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,168 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.grid.distributed.impl;
+
+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.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.GetKnowledgeBaseCommand;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.internal.Message;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.GenericNodeConnector;
+
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryNodeServiceImpl implements DirectoryNodeService{
+
+ private String id;
+
+ private Map<String, String> directoryMap = new HashMap<String, String>();
+
+ private Map<String, String> kbaseDirectoryMap = new HashMap<String, String>();
+
+ private Iterable<ExecutionNodeService> executionNodes;
+
+ public DirectoryNodeServiceImpl() {
+ executionNodes = new ArrayList<ExecutionNodeService>();
+ this.id = "Distributed:Directory";
+ }
+
+
+ @Override
+ public String getId() {
+ return id;
+ }
+
+
+ @Override
+ public void register(String sessionId, String nodeServiceId) throws ConnectorException, RemoteException {
+ //System.out.println("Registering: "+ sessionId + " -- "+nodeServiceId);
+ directoryMap.put(sessionId, nodeServiceId);
+ for(ExecutionNodeService node : executionNodes){
+ if(node.getId().equals(nodeServiceId)){
+ node.incrementKsessionCounter();
+ }
+ }
+ }
+
+
+ @Override
+ public GenericNodeConnector lookup(String sessionId) throws ConnectorException, RemoteException {
+ ExecutionNodeService nodeService = null;
+ String sessionServiceId = (String)directoryMap.get(sessionId);
+ //System.out.println("Registry = "+ directoryMap.toString());
+ //System.out.println("Nodes Services = "+nodeServices);
+ for(ExecutionNodeService ss : executionNodes){
+ //System.out.println("Session Service id = "+ss.getId() + "needs to match with ="+sessionServiceId);
+ if(ss.getId().equals(sessionServiceId)){
+ nodeService = ss;
+ }
+ }
+
+ return nodeService;
+ }
+
+
+ public void setExecutionNodes(Iterable<ExecutionNodeService> executionNodes) {
+ this.executionNodes = executionNodes;
+ }
+
+ @Override
+ public void registerKBase(String kbaseId, String nodeServiceId) throws ConnectorException {
+ //System.out.println("Registering KnowledgeBase = "+kbaseId +" -in NS=" +nodeServiceId);
+ kbaseDirectoryMap.put(kbaseId, nodeServiceId);
+ }
+
+ @Override
+ public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException, RemoteException{
+ ExecutionNodeService executionNode = null;
+ String nodeServiceId = (String)kbaseDirectoryMap.get(kbaseId);
+ //System.out.println("Kbase Registry = "+ kbaseDirectoryMap.toString());
+ //System.out.println("Session Services = "+nodeService);
+ for(ExecutionNodeService ns : executionNodes){
+ //System.out.println("Node Service id = "+ns.getId() + "needs to match with ="+nodeServiceId);
+ if(ns.getId().equals(nodeServiceId)){
+ executionNode = ns;
+ }
+ }
+ //System.out.println("Node Service = "+nodeService);
+
+ try {
+ //@TODO: This is a bad hack.. I need to improve this a lot
+ Message msg = executionNode.write(new Message(999,1000,false, new KnowledgeContextResolveFromContextCommand( new GetKnowledgeBaseCommand(), null, kbaseId, null, null)));
+ //System.out.println("MSG returned by nodeService = "+msg);
+ if (msg.getPayload() instanceof KnowledgeBase) {
+ //System.out.println("Kbase in the payload: "+(KnowledgeBase)msg.getPayload());
+ return (KnowledgeBase)msg.getPayload();
+ }
+ return null;
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+ }
+
+
+
+ @Override
+ public Map<String, String> getDirectoryMap() throws ConnectorException{
+ return directoryMap;
+ }
+
+ @Override
+ public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public String lookupId(String resourceId) throws ConnectorException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void dispose() throws ConnectorException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void connect() throws ConnectorException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void disconnect() throws ConnectorException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public DirectoryNodeService getDirectoryNodeService() throws ConnectorException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public GenericConnection getConnection() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+ return ConnectorType.DISTRIBUTED;
+ }
+
+
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2009 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.distributed.impl;
+
+import java.rmi.RemoteException;
+import java.util.UUID;
+
+import org.drools.SystemEventListener;
+import org.drools.SystemEventListenerFactory;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.NodeConnectionType;
+import org.drools.grid.internal.BlockingGenericIoWriter;
+import org.drools.grid.internal.GenericMessageHandler;
+import org.drools.grid.internal.Message;
+import org.drools.grid.internal.MessageResponseHandler;
+import org.drools.grid.internal.NodeData;
+import org.drools.grid.distributed.GenericMessageGridHandlerImpl;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.GridConnection;
+import org.drools.grid.distributed.DistributedConnectionNode;
+import org.drools.grid.distributed.util.IDEntry;
+
+import org.rioproject.core.jsb.ServiceBeanContext;
+import org.rioproject.watch.CounterWatch;
+import org.rioproject.watch.GaugeWatch;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ExecutionNodeServiceImpl implements ExecutionNodeService {
+
+ private GenericMessageHandler handler;
+ private String id;
+ private GaugeWatch loadWatch;
+ private CounterWatch ksessionCounter;
+ private Long instanceID;
+
+ public ExecutionNodeServiceImpl() {
+ this.id = "Distributed:Node:"+UUID.randomUUID().toString();
+ handler = new GenericMessageGridHandlerImpl(new NodeData(), SystemEventListenerFactory.getSystemEventListener());
+ }
+
+ public ExecutionNodeServiceImpl(NodeData data,
+ SystemEventListener systemEventListener) {
+ handler = new GenericMessageGridHandlerImpl(data, systemEventListener);
+ }
+
+ @Override
+ public Message write(Message msg) {
+ BlockingGenericIoWriter blockingWriter = new BlockingGenericIoWriter();
+ try {
+ handler.messageReceived(blockingWriter, msg);
+ } catch (Exception e) {
+
+ //throw new RemoteException(e.getMessage());
+ }
+
+ return blockingWriter.getMessage();
+ }
+
+ public GenericMessageHandler getGenericMessageHandler() {
+ return this.handler;
+ }
+
+ @Override
+ public void write(Message msg,
+ MessageResponseHandler responseHandler) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setServiceBeanContext(ServiceBeanContext context) {
+ context.addAttribute(new IDEntry(this.id));
+ loadWatch = new GaugeWatch("load");
+ ksessionCounter = new CounterWatch("ksessionCounter");
+ context.getWatchRegistry().register(loadWatch);
+ context.getWatchRegistry().register(ksessionCounter);
+ instanceID = context.getServiceBeanConfig().getInstanceID();
+ }
+
+ @Override
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+
+
+
+ @Override
+ public double getLoad() {
+ return loadWatch.getLastCalculableValue();
+ }
+
+
+ @Override
+ public void setLoad(double load) {
+ double last = loadWatch.getLastCalculableValue();
+ loadWatch.addValue(load);
+ boolean verified = loadWatch.getLastCalculableValue() == load;
+ if (!verified)
+ System.err.println(System.currentTimeMillis() + " "+
+ "---> ["+instanceID+"] was [" + loadWatch.getLastCalculableValue() +
+ "], SET FAILED [" + load + "] " +
+ "breached=" +
+ loadWatch.getThresholdManager().getThresholdCrossed());
+ else
+ System.err.println(System.currentTimeMillis() + " "+
+ "---> ["+instanceID+"] Load now [" + load + "] " +
+ "breached=" +
+ loadWatch.getThresholdManager().getThresholdCrossed());
+ }
+
+
+ @Override
+ public double getKsessionCounter() {
+ return ksessionCounter.getLastCalculableValue();
+ }
+
+
+ @Override
+ public void incrementKsessionCounter() {
+ double last = ksessionCounter.getLastCalculableValue();
+ ksessionCounter.increment();
+
+ System.err.println(System.currentTimeMillis() + " "+
+ "---> ["+instanceID+"] was [" + ksessionCounter.getLastCalculableValue() +
+ "], " +
+ "breached=" +
+ ksessionCounter.getThresholdManager().getThresholdCrossed());
+
+ }
+
+ @Override
+ public void connect() throws ConnectorException {
+ // do nothing
+ }
+
+ @Override
+ public void disconnect() throws ConnectorException {
+ // do nothing
+ }
+
+ @Override
+ public GenericConnection getConnection() throws ConnectorException {
+ return new GridConnection();
+ }
+
+ @Override
+ public NodeConnectionType getNodeConnectionType() throws ConnectorException {
+ return new DistributedConnectionNode();
+ }
+
+ @Override
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+ return ConnectorType.DISTRIBUTED;
+ }
+
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/strategies/GetMinimalKsessionNodes.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/strategies/GetMinimalKsessionNodes.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/strategies/GetMinimalKsessionNodes.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,60 @@
+/*
+ * 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.distributed.strategies;
+
+import java.rmi.RemoteException;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.GenericConnection;
+import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.strategies.NodeSelectionStrategy;
+
+/**
+ *
+ * @author salaboy
+ */
+public class GetMinimalKsessionNodes implements NodeSelectionStrategy {
+
+
+
+ public GenericNodeConnector getBestNode(List<GenericNodeConnector> connectors) {
+ Double min = null;
+ GenericNodeConnector selectedConnector = null;
+ for (GenericNodeConnector nodeConnector : connectors) {
+ try {
+ Double currentCounter = null;
+ currentCounter = ((ExecutionNodeService) nodeConnector).getKsessionCounter();
+ if (min == null) {
+ min = currentCounter;
+ selectedConnector = nodeConnector;
+ }
+ if (min > currentCounter) {
+ min = currentCounter;
+ selectedConnector = nodeConnector;
+ }
+ } catch (ConnectorException ex) {
+ Logger.getLogger(GetMinimalKsessionNodes.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ }
+
+ return selectedConnector;
+ }
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,22 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.grid.distributed.util;
+
+/**
+ *
+ * @author salaboy
+ */
+public class IDEntry extends net.jini.entry.AbstractEntry{
+ public String id;
+
+ public IDEntry() {
+ super();
+ }
+
+ public IDEntry(String id) {
+ this. id = id;
+ }
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/RioResourceLocator.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/RioResourceLocator.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/java/org/drools/grid/distributed/util/RioResourceLocator.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,52 @@
+/*
+ * 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.distributed.util;
+
+import java.io.IOException;
+
+import net.jini.core.lookup.ServiceItem;
+import net.jini.core.lookup.ServiceTemplate;
+import net.jini.discovery.LookupDiscoveryManager;
+import net.jini.lease.LeaseRenewalManager;
+import net.jini.lookup.ServiceDiscoveryManager;
+import org.drools.grid.ExecutionNodeService;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RioResourceLocator {
+ public static ExecutionNodeService locateResource(String id) throws IOException, InterruptedException{
+ IDEntry[] ids = new IDEntry[]{new IDEntry(id)};
+ Class[] classes = new Class[]{ExecutionNodeService.class};
+ ServiceTemplate tmpl = new ServiceTemplate(null, classes, ids);
+ LookupDiscoveryManager ldm =
+ new LookupDiscoveryManager(LookupDiscoveryManager.ALL_GROUPS,
+ null,
+ null);
+ System.out.println("Discovering ExecutionNodeService service ..."+id);
+ ServiceDiscoveryManager sdm =
+ new ServiceDiscoveryManager(ldm, new LeaseRenewalManager());
+ /* Wait no more then 10 seconds to discover the service */
+ ServiceItem item = sdm.lookup(tmpl, null, 10000);
+
+ ExecutionNodeService executionNode = (ExecutionNodeService) item.service;
+
+ return executionNode;
+ }
+}
Copied: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/drools/executionNodeService.groovy (from rev 33555, labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-rio/src/main/resources/org/drools/executionNodeService.groovy)
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/drools/executionNodeService.groovy (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/main/resources/org/drools/executionNodeService.groovy 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,80 @@
+import org.rioproject.config.Constants
+import java.util.logging.Level
+
+import org.rioproject.resources.servicecore.Service
+
+deployment(name:'executionNodeService', debug: 'true') {
+
+ logging {
+ logger 'org.rioproject.resolver', Level.ALL
+ logger 'org.rioproject.associsations' , Level.ALL
+ }
+ /* Configuration for the discovery group that the service should join.
+ * This first checks if the org.rioproject.groups property is set, if not
+ * the user name is used */
+ groups System.getProperty(Constants.GROUPS_PROPERTY_NAME,
+ System.getProperty('user.name'))
+
+ /* Declares the artifacts required for deployment. Note the 'dl'
+ * classifier used for the 'download' jar */
+ artifact id:'service', 'org.drools:drools-grid-distributed-rio:5.1.0.SNAPSHOT'
+ artifact id:'service-dl', 'org.drools:drools-grid-distributed-rio:dl:5.1.0.SNAPSHOT'
+
+ /*
+ * Declare the service to be deployed. The number of instances deployed
+ * defaults to 1. If you require > 1 instances change as needed
+ */
+ service(name: 'ExecutionNodeService') {
+ interfaces {
+ classes 'org.drools.grid.ExecutionNodeService'
+ artifact ref:'service-dl'
+ }
+ implementation(class:'org.drools.grid.distributed.impl.ExecutionNodeServiceImpl') {
+ artifact ref:'service'
+ }
+ /*sla(id:'load', low:10, high: 30) {
+ rule resource: 'ScalingRuleHandler', max:5
+ }*/
+// sla(id:'ksessionCounter', low:1, high: 4) {
+// rule resource: 'ScalingRuleHandlerCounter', max:5
+// }
+ maintain 2
+ }
+// service(name: 'DirectoryNodeService') {
+// interfaces {
+// classes 'org.drools.grid.DirectoryNodeService'
+// artifact ref:'service-dl'
+// }
+// implementation(class:'org.drools.grid.distributed.impl.DirectoryNodeServiceImpl') {
+// artifact ref:'service'
+// }
+//
+// association (name:'ExecutionNodeService', type:'uses', property:'nodeServices')
+//
+// maintain 1
+// }
+
+// service(name: 'Gnostic') {
+// interfaces {
+// classes 'org.rioproject.gnostic.Gnostic'
+// artifact ref: 'service-dl'
+// }
+// implementation(class: 'org.rioproject.gnostic.GnosticImpl') {
+// artifact ref: 'service'
+// }
+//
+// parameters {
+// parameter name: "create-core-associations", value: "yes"
+// }
+//
+// associations {
+// ['ExecutionNodeService'].each {
+// association name: "$it",
+// type: 'uses', property: 'service',
+// serviceType: Service.name
+// }
+// }
+// maintain 1
+// }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/manager-config.groovy
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/manager-config.groovy (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/manager-config.groovy 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,53 @@
+/*
+ * Copyright to the original author or authors.
+ *
+ * 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.
+ */
+
+import org.rioproject.config.Constants
+
+/*
+* Configuration properties for the Gnostic
+*/
+manager {
+ execClassPath =
+ '${RIO_HOME}${/}lib${/}boot.jar${:}${RIO_HOME}${/}lib/${/}start.jar${:}${JAVA_HOME}${/}lib${/}tools.jar${:}${RIO_HOME}${/}lib${/}groovy-all.jar'
+
+ inheritOptions = true
+
+ jvmOptions = '''
+ -XX:+UseConcMarkSweepGC -XX:+AggressiveOpts
+ -Djava.security.policy=${RIO_HOME}${/}policy${/}policy.all
+ -DRIO_HOME=${RIO_HOME} -Dorg.rioproject.groups=${org.rioproject.groups}'''
+
+ mainClass = 'com.sun.jini.start.ServiceStarter'
+
+ /* The ${service} token will be replaced by the name of the starter file.
+ * For start-reggie the service name will be reggie, for start-monitor the
+ * service name will be monitor, etc ... */
+ String logExt = System.getProperty(Constants.GROUPS_PROPERTY_NAME,
+ System.getProperty('user.name'))
+ String logDir = '/tmp/logs/rio/'
+ String opSys = System.getProperty('os.name')
+ if(opSys.startsWith("Windows"))
+ logDir = '${java.io.tmpdir}/logs/rio/'
+ log = logDir + logExt + '/${service}.log'
+
+ /*
+ * Remove any previously created service log files
+ */
+ cleanLogs = true
+
+ monitorStarter = '${user.dir}${/}src${/}test${/}conf${/}start-monitor.groovy'
+ cybernodeStarter = '${RIO_HOME}/config/start-cybernode.groovy'
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/start-monitor.groovy
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/start-monitor.groovy (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/start-monitor.groovy 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,38 @@
+/*
+ * This configuration is used by the com.sun.jini.start utility to start a
+ * ProvisionMonitor, including an embedded Webster
+ */
+
+import org.rioproject.config.Component
+
+import org.rioproject.boot.ServiceDescriptorUtil;
+import com.sun.jini.start.ServiceDescriptor;
+
+ at Component('com.sun.jini.start')
+class StartMonitorConfig {
+
+ ServiceDescriptor[] getServiceDescriptors() {
+ String m2Home = "${System.getProperty("user.home")}/.m2"
+ String rioHome = System.getProperty('RIO_HOME')
+ String cwd = System.getProperty('user.dir')
+ println "\n********\n$cwd\n********"
+
+ def websterRoots = [rioHome+'/lib-dl', ';',
+ rioHome+'/lib', ';',
+ m2Home+'/repository', ';',
+ cwd+'/target/']
+
+ String policyFile = rioHome+'/policy/policy.all'
+ String monitorConfig = rioHome+'/config/monitor.groovy'
+ String reggieConfig = rioHome+'/config/reggie.groovy'
+
+ def serviceDescriptors = [
+ ServiceDescriptorUtil.getWebster(policyFile, '0', (String[])websterRoots),
+ ServiceDescriptorUtil.getLookup(policyFile, reggieConfig),
+ ServiceDescriptorUtil.getMonitor(policyFile, monitorConfig)
+ ]
+
+ return (ServiceDescriptor[])serviceDescriptors
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/test-config.groovy
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/test-config.groovy (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/conf/test-config.groovy 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,13 @@
+/*
+ * Configuration file for integration test cases
+ */
+ITGridExecutionTest {
+ groups = "ITGridExecutionTest"
+ numCybernodes = 1
+ numMonitors = 1
+ //numLookups = 1
+ opstring = 'src/main/resources/org/drools/executionNodeService.groovy'
+ autoDeploy = true
+ //harvest = true
+}
+
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,340 @@
+/*
+ * 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.distributed;
+
+
+import java.rmi.RemoteException;
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ExecutionNode;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.builder.ResourceType;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.grid.GridConnection;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.strategies.StaticIncrementalSelectionStrategy;
+import org.drools.runtime.ExecutionResults;
+import org.junit.Assert;
+import org.junit.Test;
+/**
+ *
+ * @author salaboy
+ */
+
+public abstract class ExecutionNodeBaseTest {
+
+ protected ExecutionNode node;
+ protected GridConnection connection = new GridConnection();
+ public ExecutionNodeBaseTest() {
+
+ }
+
+
+ @Test
+ public void fireAllRules(){
+ StaticIncrementalSelectionStrategy.counter = 0;
+ 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";
+
+ Assert.assertNotNull(node);
+
+ KnowledgeBuilder kbuilder =
+ node.get(KnowledgeBuilderFactoryService.class)
+ .newKnowledgeBuilder();
+ Assert.assertNotNull(kbuilder);
+
+ 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);
+
+ int fired = ksession.fireAllRules();
+ Assert.assertEquals( 2, fired );
+
+
+ }
+
+ @Test
+ public void testExecute() throws Exception {
+ StaticIncrementalSelectionStrategy.counter = 0;
+ 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";
+
+ Assert.assertNotNull(node);
+
+ KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+ Assert.assertNotNull(kbuilder);
+ 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();
+
+ ExecutionResults results = ksession.execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2,
+ (int) (Integer) results.getValue( "fired" ) );
+ }
+//
+ @Test
+ public void testVsmPipeline() throws Exception {
+ StaticIncrementalSelectionStrategy.counter = 0;
+ 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( \"hello3!!!\" ); \n";
+ str += "end \n";
+ str += "rule rule2 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello4!!!\" ); \n";
+ str += "end \n";
+
+ Assert.assertNotNull(node);
+
+ KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+ Assert.assertNotNull(kbuilder);
+
+ 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();
+
+ node.get(DirectoryLookupFactoryService.class).register( "ksession1", ksession );
+
+ ExecutionResults results = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2, (int ) ( Integer) results.getValue( "fired" ) );
+ }
+//
+ @Test
+ public void testNamedService() throws Exception {
+ StaticIncrementalSelectionStrategy.counter = 1;
+ System.out.println("Running ===============> testNamedService");
+ 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();
+ Assert.assertNotNull(kbuilder);
+
+ 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();
+ System.out.println("registering a session!!!!!!!");
+ node.get(DirectoryLookupFactoryService.class).register( "ksession1",
+ ksession );
+ System.out.println("Lookup ksession1!!!!!!!!!!!!!");
+ ExecutionResults results = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2,
+ (int) (Integer) results.getValue( "fired" ) );
+ System.out.println("TEst ENDED =========>");
+ }
+ @Test
+ public void twoSessionsIntoDifferentSessionServices() throws RemoteException, ConnectorException{
+ StaticIncrementalSelectionStrategy.counter = 0;
+ 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();
+ Assert.assertNotNull(kbuilder);
+
+ 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 ksession1 = kbase.newStatefulKnowledgeSession();
+ System.out.println("registering ksession1!");
+ node.get(DirectoryLookupFactoryService.class).register( "ksession1", ksession1 );
+
+ System.out.println("Let's go for the Second ksession");
+ //Switching to another node
+ node = connection.getExecutionNode(null);
+
+ KnowledgeBuilder kbuilder2 = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+ Assert.assertNotNull(kbuilder2);
+
+ kbuilder2.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder2.hasErrors() ) {
+ System.out.println( "Errors: " + kbuilder2.getErrors() );
+ }
+
+
+ KnowledgeBase kbase2 = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+ Assert.assertNotNull(kbase2);
+
+
+ kbase2.addKnowledgePackages( kbuilder2.getKnowledgePackages() );
+
+ StatefulKnowledgeSession ksession2 = kbase2.newStatefulKnowledgeSession();
+ System.out.println("registering ksession2!");
+ node.get(DirectoryLookupFactoryService.class).register( "ksession2", ksession2 );
+
+ System.out.println("Lookuping up ksession1 !");
+ ExecutionResults results1 = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2,
+ (int) (Integer) results1.getValue( "fired" ) );
+
+ System.out.println("Lookuping up ksession2 !");
+ ExecutionResults results2 = node.get(DirectoryLookupFactoryService.class).lookup( "ksession2" ).execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2,
+ (int) (Integer) results2.getValue( "fired" ) );
+
+ }
+
+// @Test
+// public void scalingUp(){
+// for(int i=1; i<20; i++) {
+// List<GenericNodeConnector> services = connection.getNodeConnectors();
+// for(GenericNodeConnector serviceConnector : services) {
+// if(serviceConnector instanceof ExecutionNodeService){
+// Throwable thrown = null;
+// try {
+// double d = ((ExecutionNodeService)serviceConnector).getLoad();
+// if(d<80)
+// ((ExecutionNodeService)serviceConnector).setLoad(d+10);
+// else
+// ((ExecutionNodeService)serviceConnector).setLoad(d);
+// Thread.sleep(5000);
+// } catch (Exception e) {
+// thrown = e;
+// }
+// Assert.assertNull(thrown);
+// }
+// }
+// }
+//
+// }
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-distributed-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -0,0 +1,60 @@
+package org.drools.grid.distributed;
+
+import org.drools.grid.ConnectorException;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.AcceptorService;
+import junit.framework.Assert;
+
+import net.jini.core.lookup.ServiceItem;
+import org.junit.After;
+
+
+
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.rioproject.test.RioTestRunner;
+import org.rioproject.test.SetTestManager;
+import org.rioproject.test.TestManager;
+
+ at RunWith(RioTestRunner.class)
+public class ITGridExecutionTest extends ExecutionNodeBaseTest {
+
+ AcceptorService server;
+ @SetTestManager
+ static TestManager testManager;
+
+ @Before
+ public void setUp() throws Exception {
+
+ Assert.assertNotNull(testManager);
+// //setup all the services using the Rio Test Framework
+// //In real scenarios all this code will happen inside the connection.connect() method
+//
+// DirectoryNodeService directoryService = (DirectoryNodeService) testManager.waitForService(DirectoryNodeService.class);
+// Assert.assertNotNull(directoryService);
+// Gnostic service = (Gnostic)testManager.waitForService(Gnostic.class);
+//
+// connection.addDirectoryNode(directoryService);
+
+ ExecutionNodeService executionNode = (ExecutionNodeService) testManager.waitForService(ExecutionNodeService.class);
+ ServiceItem[] nodeServiceItems = testManager.getServiceItems(ExecutionNodeService.class);
+ System.out.println("ExecutionNodes Items =" + nodeServiceItems.length);
+
+ for (int i = 0; i < nodeServiceItems.length; i++) {
+ if (nodeServiceItems[i].service instanceof ExecutionNodeService) {
+ connection.addExecutionNode((ExecutionNodeService) nodeServiceItems[i].service);
+ }
+ }
+
+ //Get an execution node using the default/round robin strategy
+ node = connection.getExecutionNode();
+ System.out.println("ExecutionNode = "+ node);
+
+
+ }
+ @After
+ public void tearDown() throws ConnectorException {
+ connection.dispose();
+ }
+}
Deleted: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -1,102 +0,0 @@
-/*
- * 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.local;
-
-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.ConnectorException;
-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 ConnectorException {
- return this.id;
- }
-
- public void register(String executorId, String resourceId) throws ConnectorException {
- System.out.println("Registering: " + executorId + " -- " + resourceId);
- directoryMap.put(executorId, resourceId);
-
- }
-
- public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException {
- System.out.println("Registering: " + executorId + " -- " + resourceConnector.getId());
- directoryMap.put(executorId, resourceConnector.getId());
- services.add(resourceConnector);
-
- }
-
- public GenericNodeConnector lookup(String executorId) throws ConnectorException {
- 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 resourceId) throws ConnectorException {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- public void addService(GenericNodeConnector service) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- public Map<String, String> getDirectoryMap() {
- return this.directoryMap;
- }
-
- public String lookupId(String resourceId) {
- return this.directoryMap.get(resourceId);
- }
-
- public void dispose() throws ConnectorException {
- //do nothing, it's local.
- }
-
-
-
-}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalConnectionNode.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalConnectionNode.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalConnectionNode.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -24,9 +24,16 @@
import org.drools.KnowledgeBaseFactoryService;
import org.drools.builder.DirectoryLookupFactoryService;
import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.ConnectorType;
import org.drools.grid.GenericConnection;
+import org.drools.grid.GenericConnection;
import org.drools.grid.GenericNodeConnector;
+import org.drools.grid.GenericNodeConnector;
import org.drools.grid.NodeConnectionType;
+import org.drools.grid.NodeConnectionType;
+import org.drools.grid.local.DirectoryLookupProviderLocalClient;
+import org.drools.grid.local.KnowledgeBaseProviderLocalClient;
+import org.drools.grid.local.KnowledgeBuilderProviderLocalClient;
/**
*
@@ -63,4 +70,8 @@
// do nothing
}
+ public ConnectorType getConnectorType() {
+ return ConnectorType.LOCAL;
+ }
+
}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalDirectoryConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalDirectoryConnector.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalDirectoryConnector.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -17,7 +17,9 @@
package org.drools.grid.local;
+import java.rmi.RemoteException;
import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
import org.drools.grid.DirectoryNodeService;
import org.drools.grid.GenericConnection;
import org.drools.grid.GenericDirectoryConnector;
@@ -45,7 +47,7 @@
}
public String getId() throws ConnectorException {
- return "Local:";
+ return "Local:Directory";
}
public DirectoryNodeService getDirectoryNodeService(){
@@ -56,4 +58,8 @@
return connection;
}
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+ return ConnectorType.LOCAL;
+ }
+
}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalNodeConnector.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-local/src/main/java/org/drools/grid/local/LocalNodeConnector.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -17,7 +17,9 @@
package org.drools.grid.local;
+import java.rmi.RemoteException;
import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
import org.drools.grid.GenericConnection;
import org.drools.grid.GenericNodeConnector;
import org.drools.grid.GridConnection;
@@ -56,11 +58,15 @@
public void write(Message msg, MessageResponseHandler responseHandler) {
throw new UnsupportedOperationException("Not supported yet.");
}
- public GenericConnection getConnection(){
+ public GenericConnection getConnection() throws ConnectorException {
return this.connection;
}
- public NodeConnectionType getNodeConnectionType() {
+ public NodeConnectionType getNodeConnectionType() throws ConnectorException {
return new LocalConnectionNode();
}
+
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+ return ConnectorType.LOCAL;
+ }
}
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-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -16,6 +16,7 @@
*/
package org.drools.grid.remote;
+import java.rmi.RemoteException;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -63,7 +64,11 @@
}
DirectoryNodeService directoryNode = connection.getDirectoryNode();
- directoryNode.register(identifier, client.getId());
+ try {
+ directoryNode.register(identifier, client.getId());
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
Message msg = new Message(messageSession.getSessionId(),
@@ -83,9 +88,12 @@
} catch (Exception e) {
throw new RuntimeException("Unable to execute message", e);
}
+ try {
+ directoryNode.dispose();
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
- directoryNode.dispose();
-
} catch (ConnectorException ex) {
Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
}
@@ -99,10 +107,20 @@
String kresultsId = "kresults_" + messageSession.getSessionId();
Message msg = new Message(messageSession.getSessionId(), messageSession.getCounter().incrementAndGet(), false, new KnowledgeContextResolveFromContextCommand(new LookupCommand(identifier, commandId), null, null, null, kresultsId));
DirectoryNodeService directoryNode = connection.getDirectoryNode();
- String connectorString = directoryNode.lookupId(identifier);
- directoryNode.dispose();
+ String connectorString = "";
+ try {
+ connectorString = directoryNode.lookupId(identifier);
+ directoryNode.dispose();
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
client = GenericConnectorFactory.newNodeConnector(connectorString);
- client.connect();
+ try {
+ client.connect();
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
//I need to add the new Connector to the connection to be able to clean it up/disconect it!
connection.addExecutionNode(client);
@@ -139,6 +157,9 @@
try {
DirectoryNodeService directoryNode = connection.getDirectoryNode();
directory = directoryNode.getDirectoryMap();
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+
} catch (ConnectorException 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-api/src/main/java/org/drools/grid/remote/GenericConnectorFactory.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/GenericConnectorFactory.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/GenericConnectorFactory.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -18,11 +18,13 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.drools.SystemEventListener;
import org.drools.SystemEventListenerFactory;
import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.ExecutionNodeService;
import org.drools.grid.GenericDirectoryConnector;
import org.drools.grid.GenericNodeConnector;
@@ -33,13 +35,54 @@
public class GenericConnectorFactory {
public static GenericNodeConnector newNodeConnector(String connectorString) {
+ System.out.println("Creating a connector for: " + connectorString);
String[] connectorDetails = connectorString.split(":");
+
String connectorType = connectorDetails[0];
- String connectorName = connectorDetails[1];
- String connectorAddress = connectorDetails[2];
- String connectorPort = connectorDetails[3];
+
+ if (connectorType.equals("Distributed")) {
+ String connectorBehavior = connectorDetails[1];
+ String connectorId = connectorDetails[2];
+ GenericNodeConnector connector = null;
+
+
+
+ try {
+ Class clazzLocator = Class.forName("org.drools.grid.distributed.util.RioResourceLocator");
+ Method locate = clazzLocator.getMethod("locateResource", String.class);
+ ExecutionNodeService execNode = (ExecutionNodeService)locate.invoke(clazzLocator, connectorString);
+
+ Class clazz = Class.forName("org.drools.grid.distributed.RioNodeConnector");
+ Constructor constructor = clazz.getConstructor(String.class, SystemEventListener.class, ExecutionNodeService.class);
+ connector = (GenericNodeConnector) constructor.newInstance("node1", SystemEventListenerFactory.getSystemEventListener(),
+ execNode);
+
+
+ } catch (InstantiationException ex) {
+ Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (IllegalAccessException ex) {
+ Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (IllegalArgumentException ex) {
+ Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (InvocationTargetException ex) {
+ Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (NoSuchMethodException ex) {
+ Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (SecurityException ex) {
+ Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (ClassNotFoundException ex) {
+ Logger.getLogger(GenericConnectorFactory.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ return connector;
+ }
+
+
if (connectorType.equals("Mina")) {
+ String connectorName = connectorDetails[1];
+ String connectorAddress = connectorDetails[2];
+ String connectorPort = connectorDetails[3];
GenericNodeConnector connector = null;
try {
@@ -69,6 +112,9 @@
return connector;
}
+
+
+
if (connectorType.equals("Local")) {
GenericNodeConnector connector = null;
try {
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/RemoteConnectionNode.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/RemoteConnectionNode.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/RemoteConnectionNode.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -23,6 +23,7 @@
import org.drools.KnowledgeBaseFactoryService;
import org.drools.builder.DirectoryLookupFactoryService;
import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.ConnectorType;
import org.drools.grid.GenericConnection;
import org.drools.grid.GenericNodeConnector;
import org.drools.grid.NodeConnectionType;
@@ -71,4 +72,8 @@
this.connection = connection;
}
+ public ConnectorType getConnectorType() {
+ return ConnectorType.REMOTE;
+ }
+
}
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-06-25 03:46:13 UTC (rev 33633)
+++ 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-06-25 04:31:31 UTC (rev 33634)
@@ -17,12 +17,15 @@
package org.drools.grid.remote.directory;
+import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.drools.KnowledgeBase;
import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.GenericConnection;
import org.drools.grid.GenericNodeConnector;
import org.drools.grid.internal.Message;
import org.drools.grid.internal.MessageResponseHandler;
@@ -134,4 +137,28 @@
}
+ public String getId() throws ConnectorException {
+ return "Remote:Directory";
+ }
+
+ public void connect() throws ConnectorException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void disconnect() throws ConnectorException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public DirectoryNodeService getDirectoryNodeService() throws ConnectorException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public GenericConnection getConnection() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+ return ConnectorType.REMOTE;
+ }
+
}
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-06-25 03:46:13 UTC (rev 33633)
+++ 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-06-25 04:31:31 UTC (rev 33634)
@@ -11,7 +11,7 @@
import org.drools.SystemEventListener;
import org.drools.grid.DirectoryNodeService;
-import org.drools.grid.local.DirectoryNodeLocalImpl;
+import org.drools.grid.DirectoryNodeLocalImpl;
import org.drools.grid.internal.GenericIoWriter;
import org.drools.grid.internal.GenericMessageHandler;
import org.drools.grid.internal.Message;
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/MinaRemoteDirectoryConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/MinaRemoteDirectoryConnector.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-dir-mina/src/main/java/org/drools/grid/remote/directory/MinaRemoteDirectoryConnector.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -19,6 +19,7 @@
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import java.rmi.RemoteException;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
@@ -32,6 +33,7 @@
import org.drools.SystemEventListener;
import org.drools.SystemEventListenerFactory;
import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
import org.drools.grid.DirectoryNodeService;
import org.drools.grid.GenericConnection;
import org.drools.grid.GenericDirectoryConnector;
@@ -122,6 +124,10 @@
return this.connection;
}
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+ return ConnectorType.REMOTE;
+ }
+
}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/main/java/org/drools/grid/remote/mina/MinaRemoteNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/main/java/org/drools/grid/remote/mina/MinaRemoteNodeConnector.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/main/java/org/drools/grid/remote/mina/MinaRemoteNodeConnector.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -2,6 +2,7 @@
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import java.rmi.RemoteException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -14,6 +15,7 @@
import org.drools.SystemEventListener;
import org.drools.SystemEventListenerFactory;
import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
import org.drools.grid.GenericConnection;
import org.drools.grid.GenericNodeConnector;
import org.drools.grid.NodeConnectionType;
@@ -121,16 +123,17 @@
return "Mina:" + this.name + ":" + hostName + ":" + hostPort;
}
- public void setSession(Object object) {
- this.session = (IoSession) object;
- }
- public GenericConnection getConnection() {
+ public GenericConnection getConnection() throws ConnectorException {
return this.connection;
}
- public NodeConnectionType getNodeConnectionType() {
+ public NodeConnectionType getNodeConnectionType() throws ConnectorException{
return new RemoteConnectionNode();
}
+
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+ return ConnectorType.REMOTE;
+ }
}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-remote-mina/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -24,7 +24,6 @@
import org.drools.SystemEventListenerFactory;
import org.drools.grid.internal.GenericMessageHandlerImpl;
import org.drools.grid.internal.NodeData;
-import org.drools.grid.local.DirectoryNodeLocalImpl;
import org.drools.grid.local.LocalDirectoryConnector;
import org.drools.grid.remote.mina.MinaAcceptor;
import org.drools.grid.remote.mina.MinaIoHandler;
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GenericHumanTaskProvider.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GenericHumanTaskProvider.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GenericHumanTaskProvider.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -2,7 +2,6 @@
import java.util.HashMap;
import java.util.Map;
-import org.drools.grid.GenericDirectoryConnector;
import org.drools.grid.GenericHumanTaskConnector;
/**
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-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/GridTopology.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -1,7 +1,10 @@
package org.drools.grid.services;
+import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.drools.grid.ConnectorException;
import org.drools.grid.DirectoryNodeService;
@@ -15,16 +18,10 @@
import org.drools.grid.strategies.ReturnAlwaysTheFirstSelectionStrategy;
/**
- * @author salaboy
- * ExecutionEnvironmentTopology describes the current topology of the grid
- * This topology description will be persistent, in case of failure
- * the topology can be restored.
- * This class will represent the configured topology related with a business case
- * and it will require that each execution environment is already started and running.
+ * @author salaboy
*/
public class GridTopology {
-
private String topologyName;
private Map<String, ExecutionEnvironment> executionEnvironments = new HashMap<String, ExecutionEnvironment>();
private Map<String, DirectoryInstance> directories = new HashMap<String, DirectoryInstance>();
@@ -36,9 +33,7 @@
}
-
-
- public void registerExecutionEnvironment(String name, GenericNodeProvider provider) throws ConnectorException{
+ public void registerExecutionEnvironment(String name, GenericNodeProvider provider) throws ConnectorException {
//Create the executionEnvironment using the provider
ExecutionEnvironment environment = new ExecutionEnvironment(name, provider);
//Get the connector
@@ -48,45 +43,45 @@
//Adding the connector to the conection collection of connectors
connection.addExecutionNode(connector);
//We need to add all the other exec envs connectors inside this connection
- for(ExecutionEnvironment e : executionEnvironments.values()){
+ for (ExecutionEnvironment e : executionEnvironments.values()) {
connection.addExecutionNode(e.getConnector());
}
//We need to add all the other directory connectors inside this connection
- for(DirectoryInstance d : directories.values()){
+ for (DirectoryInstance d : directories.values()) {
connection.addDirectoryNode(d.getConnector());
}
-
+
//Adding the connection to the Topology's list of connections
connections.put(name, connection);
//Adding the env to the local cache
executionEnvironments.put(name, environment);
//Register all the Execution Environments into the current directories
registerGridResourceInCurrentDirectories(name, provider.getId());
-
+
}
- public void registerDirectoryInstance(String name, GenericDirectoryProvider provider) throws ConnectorException{
+ public void registerDirectoryInstance(String name, GenericDirectoryProvider provider) throws ConnectorException {
DirectoryInstance directory = new DirectoryInstance(name, provider);
- GenericDirectoryConnector connector = directory.getConnector();
+ GenericDirectoryConnector connector = directory.getConnector();
GenericConnection connection = connector.getConnection();
connection.addDirectoryNode(connector);
-
- for(ExecutionEnvironment e : executionEnvironments.values()){
+
+ for (ExecutionEnvironment e : executionEnvironments.values()) {
connection.addExecutionNode(e.getConnector());
}
- for(DirectoryInstance d : directories.values()){
+ for (DirectoryInstance d : directories.values()) {
connection.addDirectoryNode(d.getConnector());
}
connections.put(name, connection);
directories.put(name, directory);
registerGridResourceInCurrentDirectories(name, provider.getId());
-
+
}
- public void registerTaskServerInstance(String name, GenericHumanTaskProvider provider) throws ConnectorException{
+ public void registerTaskServerInstance(String name, GenericHumanTaskProvider provider) throws ConnectorException {
TaskServerInstance taskServer = new TaskServerInstance(name, provider);
GenericHumanTaskConnector connector = taskServer.getConnector();
GenericConnection connection = connector.getConnection();
@@ -94,40 +89,37 @@
connections.put(name, connection);
taskServerInstance.put(name, taskServer);
registerGridResourceInCurrentDirectories(name, provider.getId());
-
+
}
- private void registerGridResourceInCurrentDirectories(String name, String resourceId) throws ConnectorException{
- for(DirectoryInstance directory : directories.values()){
-
- DirectoryNodeService directoryNode = directory.getDirectoryService();
- if( directoryNode != null){
+ private void registerGridResourceInCurrentDirectories(String name, String resourceId) throws ConnectorException {
+ for (DirectoryInstance directory : directories.values()) {
+
+ DirectoryNodeService directoryNode = directory.getDirectoryService();
+ if (directoryNode != null) {
+ try {
directoryNode.register(name, resourceId);
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridTopology.class.getName()).log(Level.SEVERE, null, ex);
}
- directory.getConnector().disconnect();
-
-
+ }
+ directory.getConnector().disconnect();
}
}
-
-
-
-
-
public ExecutionEnvironment getBestExecutionEnvironment(ExecutionEnvironmentSelectionStrategy strategy) {
- System.out.println("Current Exec used in the strategy = "+executionEnvironments);
+ System.out.println("Current Exec used in the strategy = " + executionEnvironments);
return strategy.getBestExecutionEnvironment(executionEnvironments);
}
-
public ExecutionNode getExecutionNode() {
return null;
}
//@TODO: need to add strategy to get the execution node here!!!
+
public ExecutionNode getExecutionNode(ExecutionEnvironment ee) throws ConnectorException {
- GenericConnection connection = connections.get(ee.getName());
+ GenericConnection connection = connections.get(ee.getName());
return connection.getExecutionNode(new ReturnAlwaysTheFirstSelectionStrategy());
}
@@ -139,18 +131,18 @@
return (DirectoryInstance) strategy.getBestGridResource(directories);
}
- public void disconectAllClients() throws ConnectorException {
+ public void disconectAllClients() throws ConnectorException, RemoteException {
for (String key : executionEnvironments.keySet()) {
- executionEnvironments.get(key).getConnector().disconnect();
- executionEnvironments.get(key).getConnector().getConnection().dispose();
+ executionEnvironments.get(key).getConnector().disconnect();
+ executionEnvironments.get(key).getConnector().getConnection().dispose();
}
for (String key : directories.keySet()) {
- directories.get(key).getConnector().disconnect();
- directories.get(key).getConnector().getConnection().dispose();
+ directories.get(key).getConnector().disconnect();
+ directories.get(key).getConnector().getConnection().dispose();
}
for (String key : taskServerInstance.keySet()) {
- taskServerInstance.get(key).getConnector().disconnect();
- taskServerInstance.get(key).getConnector().getConnection().dispose();
+ taskServerInstance.get(key).getConnector().disconnect();
+ taskServerInstance.get(key).getConnector().getConnection().dispose();
}
}
@@ -165,9 +157,4 @@
public TaskServerInstance getTaskServerInstance(String name) {
return taskServerInstance.get(name);
}
-
-
-
-
-
}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalDirectoryProvider.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalDirectoryProvider.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalDirectoryProvider.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -19,7 +19,7 @@
import java.util.UUID;
import org.drools.grid.GenericDirectoryConnector;
import org.drools.grid.GenericNodeConnector;
-import org.drools.grid.local.DirectoryNodeLocalImpl;
+import org.drools.grid.DirectoryNodeLocalImpl;
import org.drools.grid.local.LocalDirectoryConnector;
import org.drools.grid.local.LocalNodeConnector;
import org.drools.grid.services.DirectoryInstance;
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalNodeProvider.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalNodeProvider.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/main/java/org/drools/grid/services/local/LocalNodeProvider.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -19,7 +19,7 @@
import java.util.UUID;
import org.drools.grid.GenericDirectoryConnector;
import org.drools.grid.GenericNodeConnector;
-import org.drools.grid.local.DirectoryNodeLocalImpl;
+import org.drools.grid.DirectoryNodeLocalImpl;
import org.drools.grid.local.LocalDirectoryConnector;
import org.drools.grid.local.LocalNodeConnector;
import org.drools.grid.services.ExecutionEnvironment;
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-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/BasicAPITestWithMina.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -3,6 +3,7 @@
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import java.rmi.RemoteException;
import junit.framework.Assert;
@@ -73,7 +74,7 @@
}
@After
- public void stop() throws ConnectorException {
+ public void stop() throws ConnectorException, RemoteException {
grid.disconectAllClients();
Assert.assertEquals(0, server1.getCurrentSessions());
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-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterDirectoryTest.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -17,6 +17,7 @@
package org.drools.services;
+import java.rmi.RemoteException;
import org.drools.grid.ConnectorException;
import org.drools.grid.DirectoryNodeService;
import org.drools.grid.services.DirectoryInstance;
@@ -60,7 +61,7 @@
@Test
- public void directoryLocalTest() throws ConnectorException {
+ public void directoryLocalTest() throws ConnectorException, RemoteException {
System.out.println("First Test!!");
GridTopology grid = new GridTopology("MyBusinessUnit");
GenericDirectoryProvider localDirProvider = new LocalDirectoryProvider();
@@ -83,7 +84,7 @@
}
@Test
- public void multiDirectoryLocalTest() throws ConnectorException {
+ public void multiDirectoryLocalTest() throws ConnectorException, RemoteException {
System.out.println("Second Test!!");
GridTopology grid = new GridTopology("MyBusinessUnit");
GenericDirectoryProvider localDirProvider = new LocalDirectoryProvider();
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-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterMinaDirectoryTest.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -19,6 +19,7 @@
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import java.rmi.RemoteException;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.drools.KnowledgeBase;
@@ -113,7 +114,7 @@
}
@After
- public void tearDown() throws InterruptedException, ConnectorException {
+ public void tearDown() throws InterruptedException, ConnectorException, RemoteException {
grid.disconectAllClients();
@@ -129,7 +130,7 @@
}
@Test
- public void directoryRemoteTest() throws ConnectorException {
+ public void directoryRemoteTest() throws ConnectorException, RemoteException {
grid = new GridTopology("MyBusinessUnit");
GenericDirectoryProvider remoteDirProvider = new MinaDirectoryProvider("MyMinaDir", "127.0.0.1", 9123);
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterTaskTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterTaskTest.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/RegisterTaskTest.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -21,6 +21,7 @@
import java.io.Reader;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import java.rmi.RemoteException;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -179,7 +180,7 @@
}
@After
- public void tearDown() throws InterruptedException, ConnectorException {
+ public void tearDown() throws InterruptedException, ConnectorException, RemoteException {
client.disconnect();
grid.disconectAllClients();
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/ServiceAPITest.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/ServiceAPITest.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-services/src/test/java/org/drools/services/ServiceAPITest.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -89,7 +89,7 @@
}
@After
- public void tearDown() throws ConnectorException {
+ public void tearDown() throws ConnectorException, RemoteException {
System.out.println("Disconecting all clients");
grid.disconectAllClients();
System.out.println("Stoping Server 1!");
@@ -102,7 +102,7 @@
public void mixedTopologyMinaAndLocal() throws ConnectorException {
grid = new GridTopology("MyBusinessUnit");
- GenericNodeProvider minaProvider = new MinaNodeProvider("Mina1","127.0.0.1",9123 );
+ GenericNodeProvider minaProvider = new MinaNodeProvider("Mina1", "127.0.0.1", 9123 );
GenericNodeProvider localProvider = new LocalNodeProvider();
grid.registerExecutionEnvironment("MyMinaEnv", minaProvider);
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/MinaRemoteHumanTaskConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/MinaRemoteHumanTaskConnector.java 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/MinaRemoteHumanTaskConnector.java 2010-06-25 04:31:31 UTC (rev 33634)
@@ -2,6 +2,7 @@
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import java.rmi.RemoteException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -14,6 +15,7 @@
import org.drools.SystemEventListener;
import org.drools.SystemEventListenerFactory;
import org.drools.grid.ConnectorException;
+import org.drools.grid.ConnectorType;
import org.drools.grid.GenericConnection;
import org.drools.grid.GenericHumanTaskConnector;
import org.drools.grid.HumanTaskNodeService;
@@ -133,4 +135,8 @@
public HumanTaskNodeService getHumanTaskNodeService() throws ConnectorException {
return new HumanTaskServiceImpl(this, (int) this.session.getId());
}
+
+ public ConnectorType getConnectorType() throws ConnectorException, RemoteException {
+ return ConnectorType.REMOTE;
+ }
}
Modified: labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/pom.xml 2010-06-25 03:46:13 UTC (rev 33633)
+++ labs/jbossrules/branches/salaboy_drools_grid_api_separation/drools-grid/pom.xml 2010-06-25 04:31:31 UTC (rev 33634)
@@ -18,8 +18,9 @@
<module>drools-grid-remote-dir-mina</module>
<module>drools-grid-services</module>
<module>drools-grid-task</module>
-
+ <module>drools-grid-distributed-rio</module>
+ <module>drools-grid-distributed-api</module>
</modules>
-</project>
+</project>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list