[jboss-svn-commits] JBL Code SVN: r31965 - in labs/jbossrules/branches/salaboy_ServiceAPIs: drools-services and 19 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Mar 5 15:20:33 EST 2010
Author: salaboy21
Date: 2010-03-05 15:20:31 -0500 (Fri, 05 Mar 2010)
New Revision: 31965
Added:
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/pom.xml
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/LookupCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterRemoteWorkItemHandlerCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/ServiceManagerServerContext.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/StartProcessRemoteCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/GridConnection.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/LocalNodeConnection.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/Node.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/NodeConnection.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/RemoteNodeConnection.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/BlockingGenericIoWriter.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ClientGenericMessageReceiver.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/CollectionClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericConnector.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericIoWriter.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandlerImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/Message.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/MessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ServiceManagerData.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/command/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/command/ServiceManagerClientConnectCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBaseProviderLocalClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBuilderProviderLocalClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/ClientGenericMessageReceiverImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaAcceptor.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaConnector.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoWriter.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseProviderRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderProviderRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/ProcessInstanceRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBaseResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBlockingResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/BlockingMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/resources/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/LocalNodeServiceTest.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/NodeServiceLocatorBaseTest.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/RemoteNodeServiceTest.java
Log:
drools-services initial commit, need to fix a problem with Junit
Property changes on: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services
___________________________________________________________________
Name: svn:ignore
+ target
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/pom.xml (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/pom.xml 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,50 @@
+<?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</artifactId>
+ <groupId>org.drools</groupId>
+ <version>5.1.0.SNAPSHOT</version>
+ </parent>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-services</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ <name>drools-services</name>
+ <url>http://maven.apache.org</url>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.6</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- Drools Runtime -->
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-api</artifactId>
+
+ <type>jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-core</artifactId>
+
+ </dependency>
+
+ <!-- Apache Mina for default Service Remote Implementation -->
+ <dependency>
+ <groupId>org.apache.mina</groupId>
+ <artifactId>mina-core</artifactId>
+ <version>2.0.0-M6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-process-task</artifactId>
+
+ <type>jar</type>
+ </dependency>
+ </dependencies>
+</project>
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,29 @@
+package org.drools.command.vsm;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.vsm.remote.WorkItemManagerRemoteClient;
+
+/**
+ *
+ * @author Lucas Amador
+ *
+ */
+public class GetWorkItemManagerCommand implements GenericCommand<WorkItemManager> {
+
+ private static final long serialVersionUID = 1L;
+
+ public WorkItemManager execute(Context context) {
+ WorkItemManager workItemManager = ((KnowledgeCommandContext) context).getWorkItemManager();
+ ((ExecutionResultImpl)((KnowledgeCommandContext) context ).getExecutionResults()).getResults().put("workItemManager", getRemoteClient(workItemManager) );
+ return workItemManager;
+ }
+
+ private WorkItemManager getRemoteClient(WorkItemManager workItemManager) {
+ return new WorkItemManagerRemoteClient();
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/LookupCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/LookupCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/LookupCommand.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,39 @@
+package org.drools.command.vsm;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.vsm.ServiceManagerData;
+
+public class LookupCommand
+ implements
+ GenericCommand<String> {
+
+ private String identifier;
+
+ private String outIdentifier;
+
+ public LookupCommand(String identfier) {
+ this.identifier = identfier;
+ }
+
+ public LookupCommand(String identfier,
+ String outIdentifier) {
+ this.identifier = identfier;
+ this.outIdentifier = outIdentifier;
+ }
+
+ public String execute(Context context) {
+ ServiceManagerData data = (ServiceManagerData) context.get( ServiceManagerData.SERVICE_MANAGER_DATA );
+
+ String instanceId = (String) data.getRoot().get( identifier );
+
+ if ( this.outIdentifier != null ) {
+ ((ExecutionResultImpl) ((KnowledgeCommandContext) context).getExecutionResults()).getResults().put( this.outIdentifier,
+ instanceId );
+ }
+ return instanceId;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterCommand.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,32 @@
+package org.drools.command.vsm;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.vsm.ServiceManagerData;
+
+public class RegisterCommand
+ implements
+ GenericCommand<Void> {
+
+ private String identifier;
+ private String instanceId;
+ private int type;
+
+ public RegisterCommand(String identifier,
+ String instanceId,
+ int type) {
+ this.identifier = identifier;
+ this.instanceId = instanceId;
+ this.type = type;
+ }
+
+ public Void execute(Context context) {
+ ServiceManagerData data = (ServiceManagerData) context.get( ServiceManagerData.SERVICE_MANAGER_DATA );
+
+ data.getRoot().set( identifier,
+ type + ":" + instanceId );
+
+ return null;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterRemoteWorkItemHandlerCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterRemoteWorkItemHandlerCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/RegisterRemoteWorkItemHandlerCommand.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,75 @@
+package org.drools.command.vsm;
+
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.WorkItemHandler;
+
+public class RegisterRemoteWorkItemHandlerCommand implements GenericCommand<Object> {
+
+ private String handler;
+ private String workItemName;
+
+ public RegisterRemoteWorkItemHandlerCommand() {
+ }
+
+ public RegisterRemoteWorkItemHandlerCommand(String workItemName, String handler) {
+ this.handler = handler;
+ this.workItemName = workItemName;
+ }
+
+ public String getHandler() {
+ return handler;
+ }
+
+ public void setHandler(String handler) {
+ this.handler = handler;
+ }
+
+ public String getWorkItemName() {
+ return workItemName;
+ }
+
+ public void setWorkItemName(String workItemName) {
+ this.workItemName = workItemName;
+ }
+
+ public Object execute(Context context) {
+ StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
+ WorkItemHandler workItemHandler = null;
+ try {
+ Class t = Class.forName(handler);
+ Constructor c = t.getConstructor(KnowledgeRuntime.class);
+ workItemHandler = (WorkItemHandler) c.newInstance(ksession);
+ } catch (InstantiationException ex) {
+ Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (IllegalAccessException ex) {
+ Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (IllegalArgumentException ex) {
+ Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (InvocationTargetException ex) {
+ Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (NoSuchMethodException ex) {
+ Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (SecurityException ex) {
+ Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (ClassNotFoundException ex) {
+ Logger.getLogger(RegisterRemoteWorkItemHandlerCommand.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ ksession.getWorkItemManager().registerWorkItemHandler(workItemName, workItemHandler);
+ return null;
+ }
+
+ public String toString() {
+ return "session.getWorkItemManager().registerWorkItemHandler("
+ + workItemName + ", " + handler + ");";
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/ServiceManagerServerContext.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/ServiceManagerServerContext.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/ServiceManagerServerContext.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,40 @@
+package org.drools.command.vsm;
+
+import org.drools.command.Context;
+import org.drools.command.ContextManager;
+import org.drools.vsm.ServiceManagerData;
+
+public class ServiceManagerServerContext
+ implements
+ Context {
+ private Context context;
+ private ServiceManagerData data;
+
+ public ServiceManagerServerContext(Context context,
+ ServiceManagerData data) {
+ this.data = data;
+ }
+
+ public ServiceManagerData getServiceManagerData() {
+ return this.data;
+ }
+
+ public ContextManager getContextManager() {
+ return context.getContextManager();
+ }
+
+ public String getName() {
+ return context.getName();
+ }
+
+ public Object get(String identifier) {
+ return context.get( identifier );
+ }
+
+ public void set(String identifier,
+ Object value) {
+ context.set( identifier,
+ value );
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/StartProcessRemoteCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/StartProcessRemoteCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/command/vsm/StartProcessRemoteCommand.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,108 @@
+/*
+ * 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.command.vsm;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.vsm.remote.ProcessInstanceRemoteClient;
+
+/**
+ *
+ * @author salaboy
+ */
+public class StartProcessRemoteCommand implements GenericCommand<ExecutionResults>{
+ private String processId;
+ private Map<String, Object> parameters = new HashMap<String, Object>();
+ private List<Object> data = null;
+
+ public StartProcessRemoteCommand() {
+ }
+
+
+ public StartProcessRemoteCommand(String processId) {
+ this.processId = processId;
+ }
+
+ public List<Object> getData() {
+ return data;
+ }
+
+ public void setData(List<Object> data) {
+ this.data = data;
+ }
+
+ public Map<String, Object> getParameters() {
+ return parameters;
+ }
+
+ public void setParameters(Map<String, Object> parameters) {
+ this.parameters = parameters;
+ }
+
+ public String getProcessId() {
+ return processId;
+ }
+
+ public void setProcessId(String processId) {
+ this.processId = processId;
+ }
+
+
+ public ExecutionResults execute(Context context) {
+ StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
+
+ if (data != null) {
+ for (Object o: data) {
+ ksession.insert(o);
+ }
+ }
+ ProcessInstance processInstance = (ProcessInstance) ksession.startProcess(processId, parameters);
+
+ ((ExecutionResultImpl)((KnowledgeCommandContext) context ).getExecutionResults()).getResults().put( processId, getRemoteClient(processInstance) );
+
+ return ((ExecutionResultImpl)((KnowledgeCommandContext) context ).getExecutionResults());
+ }
+
+ public String toString() {
+ String result = "session.startProcess(" + processId + ", [";
+ if (parameters != null) {
+ int i = 0;
+ for (Map.Entry<String, Object> entry: parameters.entrySet()) {
+ if (i++ > 0) {
+ result += ", ";
+ }
+ result += entry.getKey() + "=" + entry.getValue();
+ }
+ }
+ result += "]);";
+ return result;
+ }
+
+ private ProcessInstance getRemoteClient(ProcessInstance processInstance) {
+ return new ProcessInstanceRemoteClient(processInstance.getId(), processInstance.getProcessId(),
+ processInstance.getProcessName(), processInstance.getState());
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/GridConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/GridConnection.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/GridConnection.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,58 @@
+/*
+ * 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.services;
+
+import java.util.List;
+
+/**
+ *
+ * @author salaboy
+ */
+public class GridConnection {
+ private List<Node> nodes;
+ private String url;
+
+ public GridConnection() {
+ }
+
+ public GridConnection(String url) {
+ this.url = url;
+ }
+
+ public List<Node> connect(){
+ return this.nodes;
+ }
+
+ public List<Node> getNodes() {
+ return nodes;
+ }
+
+ public void setNodes(List<Node> nodes) {
+ this.nodes = nodes;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/LocalNodeConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/LocalNodeConnection.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/LocalNodeConnection.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.services;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.vsm.local.KnowledgeBaseProviderLocalClient;
+import org.drools.vsm.local.KnowledgeBuilderProviderLocalClient;
+/**
+ *
+ * @author salaboy
+ */
+public class LocalNodeConnection implements NodeConnection {
+
+
+
+ public LocalNodeConnection() {
+ }
+
+
+ public Node connect() {
+ Node node = new Node();
+ node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderLocalClient() );
+ node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderLocalClient() );
+
+ return node;
+ }
+
+ public void disconnect() {
+
+ }
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/Node.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/Node.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/Node.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,56 @@
+/*
+ * 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.services;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ *
+ * @author salaboy
+ */
+public class Node {
+
+ private final Map<Class<?>, Object> services
+ = new ConcurrentHashMap<Class<?>, Object>();
+
+
+ public <T> T get(Class<T> interfaceClass) {
+ synchronized (interfaceClass) {
+ Object service = services.get(interfaceClass);
+ if (service == null) {
+ try {
+ Class<?> implementingClass = Class.forName(interfaceClass.getCanonicalName()+"Impl");
+
+ service = implementingClass.newInstance();
+ services.put(interfaceClass, service);
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ return interfaceClass.cast(service);
+ }
+ }
+ public <T> void set(Class<T> interfaceClass, T provider) {
+ synchronized (interfaceClass) {
+ services.put(interfaceClass, provider);
+ }
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/NodeConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/NodeConnection.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/NodeConnection.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,28 @@
+/*
+ * 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.services;
+
+/**
+ *
+ * @author salaboy
+ */
+public interface NodeConnection {
+ public Node connect();
+ public void disconnect();
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/RemoteNodeConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/RemoteNodeConnection.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/services/RemoteNodeConnection.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,95 @@
+/*
+ * 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.services;
+
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.vsm.GenericConnector;
+import org.drools.vsm.remote.KnowledgeBaseProviderRemoteClient;
+import org.drools.vsm.remote.KnowledgeBuilderProviderRemoteClient;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RemoteNodeConnection implements NodeConnection {
+
+ private String name;
+
+ public GenericConnector client;
+
+ private List<GenericConnector> services;
+
+ public AtomicInteger counter;
+
+ private int sessionId = -1;
+
+
+
+
+ public RemoteNodeConnection(String name, GenericConnector connector) {
+ this.name = name;
+ this.client = connector;
+ this.counter = new AtomicInteger();
+ }
+
+ public Node connect() {
+
+ if(client.connect()){
+
+ Node node = new Node();
+ node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderRemoteClient(this) );
+ node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderRemoteClient(this) );
+ return node;
+ }
+ return null;
+ }
+
+ public void disconnect(){
+ client.disconnect();
+ }
+ public GenericConnector getClient() {
+ return client;
+ }
+
+ public void setClient(GenericConnector client) {
+ this.client = client;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+
+
+
+ public int getSessionId() {
+ return sessionId;
+ }
+
+ public int getNextId() {
+ return this.counter.incrementAndGet();
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/BlockingGenericIoWriter.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/BlockingGenericIoWriter.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/BlockingGenericIoWriter.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,28 @@
+/**
+ *
+ */
+package org.drools.vsm;
+
+
+public class BlockingGenericIoWriter implements GenericIoWriter {
+
+ private Message msg;
+
+ public void write(Message message) {
+ this.msg = message;
+ }
+
+ public Message getMessage() {
+ return this.msg;
+ }
+
+ public void write(Message msg,
+ MessageResponseHandler responseHandler) {
+ if ( responseHandler == null ) {
+ this.msg = msg;
+ } else {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ClientGenericMessageReceiver.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ClientGenericMessageReceiver.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ClientGenericMessageReceiver.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,13 @@
+package org.drools.vsm;
+
+import org.drools.vsm.mina.MinaIoWriter;
+
+public interface ClientGenericMessageReceiver {
+
+ public abstract void addResponseHandler(int id,
+ MessageResponseHandler responseHandler);
+
+ public abstract void messageReceived(GenericIoWriter writer,
+ Message msg) throws Exception;
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/CollectionClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/CollectionClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/CollectionClient.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,84 @@
+package org.drools.vsm;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+public class CollectionClient<T>
+ implements
+ Collection {
+ private String parentInstanceId;
+
+ public CollectionClient(String parentInstanceId) {
+ this.parentInstanceId = parentInstanceId;
+ }
+
+ public String getParentInstanceId() {
+ return this.parentInstanceId;
+ }
+
+ public boolean add(Object e) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean addAll(Collection c) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public void clear() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public boolean contains(Object o) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean containsAll(Collection c) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean isEmpty() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public Iterator iterator() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public boolean remove(Object o) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean removeAll(Collection c) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean retainAll(Collection c) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public int size() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public Object[] toArray() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Object[] toArray(Object[] a) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericConnector.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericConnector.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,13 @@
+package org.drools.vsm;
+
+public interface GenericConnector extends GenericIoWriter {
+
+ boolean connect();
+
+ void disconnect();
+
+ Message write(Message msg);
+
+ //void write(Message msg);
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericIoWriter.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericIoWriter.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericIoWriter.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,6 @@
+package org.drools.vsm;
+
+public interface GenericIoWriter {
+ void write(Message msg,
+ MessageResponseHandler responseHandler);
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandler.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,8 @@
+package org.drools.vsm;
+
+public interface GenericMessageHandler {
+
+ public abstract void messageReceived(GenericIoWriter session,
+ Message msg) throws Exception;
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandlerImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/GenericMessageHandlerImpl.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,67 @@
+package org.drools.vsm;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.SystemEventListener;
+import org.drools.command.FinishedCommand;
+import org.drools.command.impl.ContextImpl;
+import org.drools.command.impl.GenericCommand;
+import org.drools.runtime.impl.ExecutionResultImpl;
+
+public class GenericMessageHandlerImpl implements GenericMessageHandler {
+ private SystemEventListener systemEventListener;
+
+ private ServiceManagerData data;
+
+ public GenericMessageHandlerImpl(ServiceManagerData data,
+ SystemEventListener systemEventListener) {
+ this.systemEventListener = systemEventListener;
+ this.data = data;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.GenericMessageHandler#messageReceived(org.drools.vsm.GenericIoWriter, org.drools.vsm.Message)
+ */
+ public void messageReceived(GenericIoWriter session,
+ Message msg) throws Exception {
+ systemEventListener.debug( "Message receieved : " + msg );
+
+
+ // we always need to process a List, for genericity, but don't force a List on the payload
+ List<GenericCommand> commands;
+ if ( msg.getPayload() instanceof List ) {
+ commands = (List<GenericCommand>) msg.getPayload();
+ } else {
+ commands = new ArrayList<GenericCommand>();
+ commands.add( (GenericCommand) msg.getPayload() );
+ }
+
+ // Setup the evaluation context
+ ContextImpl localSessionContext = new ContextImpl( "session_" + msg.getSessionId(),
+ this.data.getContextManager(),
+ this.data.getTemp() );
+ ExecutionResultImpl localKresults = new ExecutionResultImpl();
+ localSessionContext.set( "kresults_" + msg.getSessionId(),
+ localKresults );
+
+ for ( GenericCommand cmd : commands ) {
+ // evaluate the commands
+ cmd.execute( localSessionContext );
+ }
+
+ if ( !msg.isAsync() && localKresults.getIdentifiers().isEmpty() ) {
+ // if it's not an async invocation and their are no results, just send a simple notification message
+ session.write( new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ new FinishedCommand() ), null );
+ } else {
+ // return the payload
+ session.write( new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ localKresults ), null );
+ }
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/Message.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/Message.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/Message.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,52 @@
+package org.drools.vsm;
+
+import java.io.Serializable;
+import java.util.Map;
+
+public class Message
+ implements
+ Serializable {
+ private int sessionId;
+ private int responseId;
+ private boolean async;
+ private Object payload;
+
+ public Message(int sessionId,
+ int responseId,
+ boolean async,
+ Object payload) {
+ this.sessionId = sessionId;
+ this.async = async;
+ this.responseId = responseId;
+ this.payload = payload;
+ }
+
+ public Message(int sessionId,
+ Map<String, Integer> contextVars,
+ Object payload) {
+ this.sessionId = sessionId;
+ this.responseId = -1;
+ this.payload = payload;
+ }
+
+ public int getSessionId() {
+ return sessionId;
+ }
+
+ public int getResponseId() {
+ return responseId;
+ }
+
+ public boolean isAsync() {
+ return async;
+ }
+
+ public Object getPayload() {
+ return payload;
+ }
+
+ public String toString() {
+ return "sessionId=" + this.sessionId + " responseId=" + responseId + " async=" + this.async + " payload=" + this.payload;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/MessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/MessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/MessageResponseHandler.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,7 @@
+package org.drools.vsm;
+
+public interface MessageResponseHandler {
+ public void setError(RuntimeException error);
+
+ public void receive(Message message);
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ServiceManagerData.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ServiceManagerData.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/ServiceManagerData.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,66 @@
+package org.drools.vsm;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.drools.command.Context;
+import org.drools.command.ContextManager;
+import org.drools.command.impl.ContextImpl;
+
+public class ServiceManagerData {
+ private ContextManager contextManager;
+
+ private Context root;
+ private Context temp;
+
+ public static String ROOT = "ROOT";
+ public static String TEMP = "__TEMP__";
+ public static String SERVICE_MANAGER_DATA = "__ServiceManagerData__";
+
+ private AtomicInteger sessionIdCounter = new AtomicInteger();
+
+ public ServiceManagerData() {
+ // Setup ROOT context, this will hold all long lived intances and instanceIds
+ this.contextManager = new ContextManagerImpl();
+
+ this.root = new ContextImpl( ROOT,
+ this.contextManager );
+ ((ContextManagerImpl) this.contextManager).addContext( this.root );
+ this.root.set( SERVICE_MANAGER_DATA,
+ this );
+ // Setup TEMP context, this will hold all short lived instanceId and instances
+ // TODO: TEMP context should have a time/utilisation eviction queue added
+ this.temp = new ContextImpl( TEMP,
+ this.contextManager,
+ this.root );
+ ((ContextManagerImpl) this.contextManager).addContext( this.temp );
+ }
+
+ public AtomicInteger getSessionIdCounter() {
+ return sessionIdCounter;
+ }
+
+ public ContextManager getContextManager() {
+ return contextManager;
+ }
+
+ public void setContextManager(ContextManager contextManager) {
+ this.contextManager = contextManager;
+ }
+
+ public Context getRoot() {
+ return root;
+ }
+
+ public void setRoot(Context root) {
+ this.root = root;
+ }
+
+ public Context getTemp() {
+ return temp;
+ }
+
+ public void setTemp(Context temp) {
+ this.temp = temp;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/command/ServiceManagerClientConnectCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/command/ServiceManagerClientConnectCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/command/ServiceManagerClientConnectCommand.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,34 @@
+package org.drools.vsm.command;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.vsm.ServiceManagerData;
+
+public class ServiceManagerClientConnectCommand
+ implements
+ GenericCommand<Integer> {
+
+ private String outIdentifier;
+
+
+
+ public ServiceManagerClientConnectCommand(String outIdentifier) {
+ this.outIdentifier = outIdentifier;
+ }
+
+
+
+ public Integer execute(Context context) {
+ ServiceManagerData data = (ServiceManagerData) context.get( ServiceManagerData.SERVICE_MANAGER_DATA );
+
+ Integer sessionId = data.getSessionIdCounter().getAndIncrement();
+ if ( this.outIdentifier != null ) {
+ ((ExecutionResultImpl)((KnowledgeCommandContext) context).getExecutionResults()).getResults().put( this.outIdentifier, sessionId );
+ }
+
+ return sessionId;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBaseProviderLocalClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBaseProviderLocalClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBaseProviderLocalClient.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,59 @@
+package org.drools.vsm.local;
+
+import java.util.Properties;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+
+public class KnowledgeBaseProviderLocalClient
+ implements
+ KnowledgeBaseFactoryService {
+
+ public Environment newEnvironment() {
+ return KnowledgeBaseFactory.newEnvironment();
+ }
+
+ public KnowledgeBase newKnowledgeBase() {
+ return newKnowledgeBase( ( KnowledgeBaseConfiguration ) null );
+ }
+
+ public KnowledgeBase newKnowledgeBase(KnowledgeBaseConfiguration conf) {
+ return KnowledgeBaseFactory.newKnowledgeBase( conf );
+ }
+
+ public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration() {
+ 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;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBuilderProviderLocalClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBuilderProviderLocalClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/local/KnowledgeBuilderProviderLocalClient.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,51 @@
+/**
+ *
+ */
+package org.drools.vsm.local;
+
+import java.util.Properties;
+
+import org.drools.KnowledgeBase;
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+
+public class KnowledgeBuilderProviderLocalClient
+ implements
+ KnowledgeBuilderFactoryService {
+
+ public DecisionTableConfiguration newDecisionTableConfiguration() {
+ return KnowledgeBuilderFactory.newDecisionTableConfiguration();
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder() {
+ return KnowledgeBuilderFactory.newKnowledgeBuilder();
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBuilderConfiguration conf) {
+ return KnowledgeBuilderFactory.newKnowledgeBuilder( conf );
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase) {
+ return KnowledgeBuilderFactory.newKnowledgeBuilder( kbase );
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase,
+ KnowledgeBuilderConfiguration conf) {
+ return KnowledgeBuilderFactory.newKnowledgeBuilder( kbase,
+ conf );
+ }
+
+ public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration() {
+ return KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+ }
+
+ public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration(Properties properties,
+ ClassLoader classLoader) {
+ return KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration( properties,
+ classLoader );
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/ClientGenericMessageReceiverImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/ClientGenericMessageReceiverImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/ClientGenericMessageReceiverImpl.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,72 @@
+/**
+ *
+ */
+package org.drools.vsm.mina;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.drools.SystemEventListener;
+import org.drools.task.service.Command;
+
+
+
+import org.drools.vsm.ClientGenericMessageReceiver;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.GenericMessageHandler;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class ClientGenericMessageReceiverImpl
+ implements
+ ClientGenericMessageReceiver {
+ protected Map<Integer, MessageResponseHandler> responseHandlers;
+
+ private GenericMessageHandler handler;
+
+ private final SystemEventListener systemEventListener;
+
+ public ClientGenericMessageReceiverImpl(GenericMessageHandler handler,
+ SystemEventListener systemEventListener) {
+ this.handler = handler;
+ this.responseHandlers = new ConcurrentHashMap<Integer, MessageResponseHandler>();;
+ this.systemEventListener = systemEventListener;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.mina.ClientGenericMessageReceiver#addResponseHandler(int, org.drools.vsm.MessageResponseHandler)
+ */
+ public void addResponseHandler(int id,
+ MessageResponseHandler responseHandler) {
+ this.responseHandlers.put( id,
+ responseHandler );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.mina.ClientGenericMessageReceiver#messageReceived(org.drools.vsm.mina.MinaIoWriter, org.drools.vsm.Message)
+ */
+ public void messageReceived(GenericIoWriter writer,
+ Message msg) throws Exception {
+
+ systemEventListener.debug( "Message receieved : " + msg );
+
+ MessageResponseHandler responseHandler = (MessageResponseHandler) responseHandlers.remove( msg.getResponseId() );
+
+ if ( responseHandler != null ) {
+ Object payload = msg.getPayload();
+ if (payload instanceof Command && ((Command)msg.getPayload()).getArguments().size() > 0 &&
+ ((Command)msg.getPayload()).getArguments().get(0) instanceof RuntimeException)
+ payload = ((Command)msg.getPayload()).getArguments().get(0);
+ if (( payload != null && payload instanceof RuntimeException )) {
+ responseHandler.setError( (RuntimeException) payload );
+ } else {
+ responseHandler.receive( msg );
+ }
+ } else if ( handler != null ) {
+ this.handler.messageReceived( writer,
+ msg );
+ } else {
+ throw new RuntimeException( "Unable to process Message" );
+ }
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaAcceptor.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaAcceptor.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaAcceptor.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,45 @@
+package org.drools.vsm.mina;
+
+import java.io.IOException;
+import java.net.SocketAddress;
+
+import org.apache.mina.core.service.IoAcceptor;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
+import org.apache.mina.filter.logging.LoggingFilter;
+import org.apache.mina.transport.socket.SocketAcceptor;
+import org.drools.vsm.AcceptorService;
+
+public class MinaAcceptor
+ implements
+ AcceptorService {
+ protected SocketAcceptor acceptor;
+ protected SocketAddress address;
+
+ public MinaAcceptor(SocketAcceptor acceptor,
+ SocketAddress address) {
+ this.acceptor = acceptor;
+ this.address = address;
+ }
+
+ public synchronized void start() throws IOException {
+ acceptor.getFilterChain().addLast( "logger",
+ new LoggingFilter() );
+ acceptor.getFilterChain().addLast( "codec",
+ new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );
+ acceptor.getSessionConfig().setReadBufferSize( 2048 );
+ acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE,
+ 10 );
+ acceptor.bind( address );
+ }
+
+ public synchronized void stop() {
+ acceptor.dispose();
+ }
+
+ public synchronized IoAcceptor getIoAcceptor() {
+ return acceptor;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaConnector.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaConnector.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,112 @@
+package org.drools.vsm.mina;
+
+import java.net.SocketAddress;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.mina.core.future.ConnectFuture;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
+import org.apache.mina.transport.socket.SocketConnector;
+import org.drools.SystemEventListener;
+import org.drools.vsm.GenericConnector;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+import org.drools.vsm.responsehandlers.BlockingMessageResponseHandler;
+
+public class MinaConnector
+ implements
+ GenericConnector,
+ GenericIoWriter {
+ protected IoSession session;
+
+ protected final String name;
+ protected AtomicInteger counter;
+ protected SocketConnector connector;
+ protected SocketAddress address;
+ protected SystemEventListener eventListener;
+
+ public MinaConnector(String name,
+ SocketConnector connector,
+ SocketAddress address,
+ SystemEventListener eventListener) {
+ if ( name == null ) {
+ throw new IllegalArgumentException( "Name can not be null" );
+ }
+ this.name = name;
+ this.counter = new AtomicInteger();
+ this.address = address;
+ this.connector = connector;
+ this.eventListener = eventListener;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.mina.Messenger#connect()
+ */
+ public boolean connect() {
+ if ( session != null && session.isConnected() ) {
+ throw new IllegalStateException( "Already connected. Disconnect first." );
+ }
+
+ try {
+ this.connector.getFilterChain().addLast( "codec",
+ new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );
+
+ ConnectFuture future1 = this.connector.connect( this.address );
+ future1.await( 2000 );
+ if ( !future1.isConnected() ) {
+ eventListener.info( "unable to connect : " + address + " : " + future1.getException() );
+ return false;
+ }
+ eventListener.info( "connected : " + address );
+ this.session = future1.getSession();
+ return true;
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.mina.Messenger#disconnect()
+ */
+ public void disconnect() {
+ if ( session != null && session.isConnected() ) {
+ session.close();
+ session.getCloseFuture().join();
+ }
+ }
+
+ private void addResponseHandler(int id,
+ MessageResponseHandler responseHandler) {
+ ((MinaIoHandler) this.connector.getHandler()).addResponseHandler( id,
+ responseHandler );
+ }
+
+ public void write(Message msg,
+ MessageResponseHandler responseHandler) {
+ if ( responseHandler != null ) {
+ addResponseHandler( msg.getResponseId(),
+ responseHandler );
+ }
+ this.session.write( msg );
+ }
+
+ public Message write(Message msg) {
+ BlockingMessageResponseHandler responseHandler = new BlockingMessageResponseHandler();
+
+ if ( responseHandler != null ) {
+ addResponseHandler( msg.getResponseId(),
+ responseHandler );
+ }
+ this.session.write( msg );
+
+ Message returnMessage = responseHandler.getMessage();
+ if ( responseHandler.getError() != null ) {
+ throw responseHandler.getError();
+ }
+
+ return returnMessage;
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoHandler.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,60 @@
+package org.drools.vsm.mina;
+
+
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+import org.drools.SystemEventListener;
+import org.drools.vsm.ClientGenericMessageReceiver;
+import org.drools.vsm.GenericMessageHandler;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class MinaIoHandler extends IoHandlerAdapter {
+ /**
+ * Listener used for logging
+ */
+ private final SystemEventListener systemEventListener;
+
+ private ClientGenericMessageReceiver clientMessageReceiver;
+
+ public MinaIoHandler(SystemEventListener systemEventListener) {
+ this( systemEventListener,
+ null );
+
+ }
+
+ public MinaIoHandler(SystemEventListener systemEventListener,
+ GenericMessageHandler handler) {
+ this.systemEventListener = systemEventListener;
+ this.clientMessageReceiver = new ClientGenericMessageReceiverImpl( handler,
+ systemEventListener );
+
+ }
+
+ public void addResponseHandler(int id,
+ MessageResponseHandler responseHandler) {
+ this.clientMessageReceiver.addResponseHandler( id,
+ responseHandler );
+ }
+
+ public void exceptionCaught(IoSession session,
+ Throwable cause) throws Exception {
+ systemEventListener.exception( "Uncaught exception on Server",
+ cause );
+ }
+
+ public void messageReceived(IoSession session,
+ Object object) throws Exception {
+ Message msg = (Message) object;
+ clientMessageReceiver.messageReceived( new MinaIoWriter( session ),
+ msg );
+ }
+
+ @Override
+ public void sessionIdle(IoSession session,
+ IdleStatus status) throws Exception {
+ this.systemEventListener.debug( "Server IDLE " + session.getIdleCount( status ) );
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoWriter.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoWriter.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/mina/MinaIoWriter.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,23 @@
+package org.drools.vsm.mina;
+
+import org.apache.mina.core.session.IoSession;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class MinaIoWriter
+ implements
+ GenericIoWriter {
+
+ private IoSession session;
+
+ public MinaIoWriter(IoSession session) {
+ this.session = session;
+ }
+
+ public void write(Message message,
+ MessageResponseHandler responseHandler) {
+ this.session.write( message );
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseProviderRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseProviderRemoteClient.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,95 @@
+package org.drools.vsm.remote;
+
+import java.util.Properties;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.command.FinishedCommand;
+import org.drools.command.NewKnowledgeBaseCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.services.RemoteNodeConnection;
+import org.drools.vsm.Message;
+
+public class KnowledgeBaseProviderRemoteClient
+ implements
+ KnowledgeBaseFactoryService {
+ private RemoteNodeConnection nodeConnection;
+
+ public KnowledgeBaseProviderRemoteClient(RemoteNodeConnection nodeConnection) {
+ this.nodeConnection = nodeConnection;
+ }
+
+ 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);
+
+ String localId = UUID.randomUUID().toString();
+
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new NewKnowledgeBaseCommand( null ) ) );
+ try {
+ Object object = nodeConnection.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 KnowledgeBaseRemoteClient( localId,
+ nodeConnection );
+
+ }
+
+ public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ 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;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBaseRemoteClient.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,174 @@
+package org.drools.vsm.remote;
+
+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.NewStatefulKnowledgeSessionCommand;
+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.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.services.RemoteNodeConnection;
+import org.drools.vsm.CollectionClient;
+import org.drools.vsm.Message;
+
+public class KnowledgeBaseRemoteClient
+ implements
+ KnowledgeBase {
+
+ private RemoteNodeConnection nodeConnection;
+ private String instanceId;
+
+ public KnowledgeBaseRemoteClient(String instanceId,
+ RemoteNodeConnection nodeConnection) {
+ this.instanceId = instanceId;
+ this.nodeConnection = nodeConnection;
+ }
+
+ public void addKnowledgePackages(Collection<KnowledgePackage> kpackages) {
+ String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+ String kuilderInstanceId = ((CollectionClient<KnowledgePackage>) kpackages).getParentInstanceId();
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBaseAddKnowledgePackagesCommand(),
+ kuilderInstanceId,
+ instanceId,
+ null,
+ kresultsId ) );
+
+ try {
+ Object object = nodeConnection.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 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_" + nodeConnection.getSessionId();
+
+ String localId = UUID.randomUUID().toString();
+
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new KnowledgeContextResolveFromContextCommand( new NewStatefulKnowledgeSessionCommand( null ),
+ null,
+ instanceId,
+ null,
+ kresultsId ) ) );
+
+ try {
+ Object object = nodeConnection.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 StatefulKnowledgeSessionRemoteClient( localId,
+ nodeConnection );
+ }
+
+ 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_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderProviderRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderProviderRemoteClient.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,87 @@
+/**
+ *
+ */
+package org.drools.vsm.remote;
+
+import java.util.Properties;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+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.services.RemoteNodeConnection;
+import org.drools.vsm.Message;
+
+public class KnowledgeBuilderProviderRemoteClient
+ implements
+ KnowledgeBuilderFactoryService {
+ private RemoteNodeConnection nodeConnection;
+
+ public KnowledgeBuilderProviderRemoteClient(RemoteNodeConnection nodeConnection) {
+ this.nodeConnection = nodeConnection;
+ }
+
+ public DecisionTableConfiguration newDecisionTableConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder() {
+ String localId = UUID.randomUUID().toString();
+
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new NewKnowledgeBuilderCommand( null ) ) );
+
+ try {
+ Object object = nodeConnection.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 KnowledgeBuilderRemoteClient( localId,
+ nodeConnection );
+ }
+
+ 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_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/KnowledgeBuilderRemoteClient.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,138 @@
+package org.drools.vsm.remote;
+
+import java.util.Collection;
+
+import org.drools.KnowledgeBase;
+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.services.RemoteNodeConnection;
+import org.drools.vsm.CollectionClient;
+import org.drools.vsm.Message;
+
+public class KnowledgeBuilderRemoteClient
+ implements
+ KnowledgeBuilder {
+ private RemoteNodeConnection nodeConnection;
+ private String instanceId;
+
+ public KnowledgeBuilderRemoteClient(String instanceId,
+ RemoteNodeConnection nodeConnection) {
+ this.instanceId = instanceId;
+ this.nodeConnection = nodeConnection;
+ }
+
+ public void add(Resource resource,
+ ResourceType resourceType) {
+ add( resource,
+ resourceType,
+ null );
+ }
+
+ public void add(Resource resource,
+ ResourceType resourceType,
+ ResourceConfiguration configuration) {
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderAddCommand( resource,
+ resourceType,
+ configuration ),
+ instanceId,
+ null,
+ null,
+ null ) );
+
+ try {
+ Object object = nodeConnection.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_" + nodeConnection.getNextId();
+ String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderGetErrorsCommand( commandId ),
+ instanceId,
+ null,
+ null,
+ kresultsId ) );
+
+ try {
+ Object object = nodeConnection.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_" + nodeConnection.getNextId();
+ String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.getNextId(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderHasErrorsCommand( commandId ),
+ instanceId,
+ null,
+ null,
+ kresultsId ) );
+
+ try {
+ Object object = nodeConnection.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 );
+ }
+
+
+
+ }
+
+ public KnowledgeBase newKnowledgeBase() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/ProcessInstanceRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/ProcessInstanceRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/ProcessInstanceRemoteClient.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,70 @@
+/*
+ * 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.vsm.remote;
+
+import java.io.Serializable;
+import org.drools.runtime.process.ProcessInstance;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ProcessInstanceRemoteClient implements ProcessInstance, Serializable {
+
+ private String processId;
+ private long id;
+ private String processName;
+ private int state;
+ private String[] eventTypes;
+ public ProcessInstanceRemoteClient() {
+ }
+
+ public ProcessInstanceRemoteClient(long id, String processId, String processName, int state) {
+ this.processId = processId;
+ this.id = id;
+ this.processName = processName;
+ this.state = state;
+ }
+
+
+
+ public String getProcessId() {
+ return processId;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public String getProcessName() {
+ return processName;
+ }
+
+ public int getState() {
+ return state;
+ }
+
+ public void signalEvent(String type, Object event) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String[] getEventTypes() {
+ return eventTypes;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,419 @@
+package org.drools.vsm.remote;
+
+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.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.command.vsm.GetWorkItemManagerCommand;
+import org.drools.command.vsm.RegisterRemoteWorkItemHandlerCommand;
+import org.drools.command.vsm.StartProcessRemoteCommand;
+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.services.RemoteNodeConnection;
+import org.drools.time.SessionClock;
+import org.drools.vsm.Message;
+
+public class StatefulKnowledgeSessionRemoteClient
+ implements
+ StatefulKnowledgeSession {
+
+ private RemoteNodeConnection nodeConnection;
+ private String instanceId;
+
+ public StatefulKnowledgeSessionRemoteClient(String instanceId,
+ RemoteNodeConnection nodeConnection) {
+ this.instanceId = instanceId;
+ this.nodeConnection = nodeConnection;
+ }
+
+ 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" + nodeConnection.getNextId();
+ String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new FireAllRulesCommand( commandId ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ Object object = nodeConnection.client.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" + nodeConnection.getNextId();
+ String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new ExecuteCommand( commandId,
+ command ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object object = nodeConnection.client.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) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ 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) {
+ // TODO Auto-generated method stub
+
+ }
+
+ 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) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ 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_" + nodeConnection.getSessionId();
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ true,
+ new KnowledgeContextResolveFromContextCommand( new GetWorkItemManagerCommand(),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ Object payload = nodeConnection.client.write( msg ).getPayload();
+ WorkItemManager workItemManager = (WorkItemManager) ((ExecutionResults) payload).getValue( "workItemManager" );
+ ((WorkItemManagerRemoteClient)workItemManager).setNodeConnection(nodeConnection);
+ ((WorkItemManagerRemoteClient)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_" + nodeConnection.getSessionId();
+
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new RegisterRemoteWorkItemHandlerCommand(name, workItemHandler ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ nodeConnection.client.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" + nodeConnection.getNextId();
+ String kresultsId = "kresults_" + nodeConnection.getSessionId();
+
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new StartProcessRemoteCommand( processId ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object object = nodeConnection.client.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_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,58 @@
+package org.drools.vsm.remote;
+
+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.services.RemoteNodeConnection;
+import org.drools.vsm.Message;
+
+/**
+ *
+ * @author Lucas Amador
+ * @author salaboy
+ */
+public class WorkItemManagerRemoteClient implements WorkItemManager, Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private RemoteNodeConnection nodeConnection;
+ 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_" + nodeConnection.getSessionId();
+ Message msg = new Message( nodeConnection.getSessionId(),
+ nodeConnection.counter.incrementAndGet(),
+ true,
+ new KnowledgeContextResolveFromContextCommand( new CompleteWorkItemCommand(id, results),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ nodeConnection.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 setNodeConnection(RemoteNodeConnection nodeConnection) {
+ this.nodeConnection = nodeConnection;
+ }
+
+ public void setInstanceId(String instanceId) {
+ this.instanceId = instanceId;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBaseResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBaseResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBaseResponseHandler.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,69 @@
+package org.drools.vsm.responsehandlers;
+
+import java.lang.reflect.Constructor;
+
+import org.drools.vsm.MessageResponseHandler;
+
+/**
+ * Abstract base class for client ResponseHandlers. Provides synchonized access to <field>done</field> which represents
+ * if the response is completed. Also has an <field>error</field> which will be set when there is a problem with
+ * a response. Users of this class should check to see if the response completed successfully, via
+ * the <method>isDone</method> and the <method>hasError</method>.
+ * <p/>
+ * Please note that the <field>error</field> is actually the Exception that occured on the server while
+ * processing the request.
+ *
+ * @author <a href="mailto:stampy88 at yahoo.com">dave sinclair</a>
+ */
+public abstract class AbstractBaseResponseHandler
+ implements
+ MessageResponseHandler {
+ private volatile boolean done;
+ private RuntimeException error;
+
+ public synchronized boolean hasError() {
+ return error != null;
+ }
+
+ public synchronized RuntimeException getError() {
+ return error;
+ }
+
+ public synchronized void setError(RuntimeException error) {
+ this.error = error;
+ notifyAll();
+ }
+
+ public synchronized boolean isDone() {
+ return done;
+ }
+
+ protected synchronized void setDone(boolean done) {
+ this.done = done;
+ notifyAll();
+ }
+
+ /**
+ * This method will take the specified serverSideException, and create a new one for the client based
+ * on the serverSideException. This is done so a proper stack trace can be made for the client, as opposed
+ * to seeing the server side stack.
+ *
+ * @param serverSideException exception used to create client side exception
+ * @return client side exception
+ */
+ protected static RuntimeException createSideException(RuntimeException serverSideException) {
+ RuntimeException clientSideException;
+
+ try {
+ Constructor< ? extends RuntimeException> constructor = serverSideException.getClass().getConstructor( String.class );
+
+ clientSideException = constructor.newInstance( "Server-side Exception: " + serverSideException.getMessage() );
+ } catch ( Exception e ) {
+ // this should never happen - if it does, it is a programming error
+ throw new RuntimeException( "Could not create client side exception",
+ e );
+ }
+
+ return clientSideException;
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBlockingResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBlockingResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/AbstractBlockingResponseHandler.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,37 @@
+/**
+ *
+ */
+package org.drools.vsm.responsehandlers;
+
+public abstract class AbstractBlockingResponseHandler extends AbstractBaseResponseHandler {
+
+ /**
+ * This method will wait the specified amount of time in milliseconds for the response to
+ * be completed. Completed is determined via the <field>done</field>. Returns true if the
+ * reponse was completed in time, false otherwise. If an error occurs, this method will throw
+ * a subclass of <code>RuntimeException</code> specific to the error.
+ *
+ * @param time max time to wait
+ * @return true if response is available, false otherwise
+ *
+ * @see org.drools.task.service.PermissionDeniedException
+ * @see org.drools.task.service.CannotAddTaskException
+ * @see javax.persistence.PersistenceException
+ */
+ public synchronized boolean waitTillDone(long time) {
+
+ if ( !isDone() ) {
+ try {
+ wait( time );
+ } catch ( InterruptedException e ) {
+ // swallow and return state of done
+ }
+ }
+
+ if ( hasError() ) {
+ throw createSideException( getError() );
+ }
+
+ return isDone();
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/BlockingMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/BlockingMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/main/java/org/drools/vsm/responsehandlers/BlockingMessageResponseHandler.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,32 @@
+/**
+ *
+ */
+package org.drools.vsm.responsehandlers;
+
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class BlockingMessageResponseHandler extends AbstractBlockingResponseHandler
+ implements
+ MessageResponseHandler {
+ private static final int ATTACHMENT_ID_WAIT_TIME = 100000;
+ private static final int CONTENT_ID_WAIT_TIME = 50000;
+
+ private volatile Message message;
+
+ public synchronized void receive(Message message) {
+ this.message = message;
+ setDone( true );
+ }
+
+ public Message getMessage() {
+ boolean done = waitTillDone( CONTENT_ID_WAIT_TIME );
+
+ if ( !done ) {
+ throw new RuntimeException( "Timeout : unable to retrieve Object Id" );
+ }
+
+ return this.message;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/LocalNodeServiceTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/LocalNodeServiceTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/LocalNodeServiceTest.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,48 @@
+/*
+ * 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.service;
+
+import org.drools.services.LocalNodeConnection;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author salaboy
+ */
+public class LocalNodeServiceTest extends NodeServiceLocatorBaseTest{
+
+ public LocalNodeServiceTest() {
+ }
+
+
+
+ @Before
+ public void setUp() {
+ node = new LocalNodeConnection().connect();
+
+ }
+
+
+
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/NodeServiceLocatorBaseTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/NodeServiceLocatorBaseTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/NodeServiceLocatorBaseTest.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,91 @@
+/*
+ * 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.service;
+
+
+import org.drools.KnowledgeBase;
+import org.drools.services.Node;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.junit.Assert;
+import org.junit.Test;
+/**
+ *
+ * @author salaboy
+ */
+
+public class NodeServiceLocatorBaseTest {
+
+ protected Node node;
+
+ public NodeServiceLocatorBaseTest() {
+
+ }
+
+
+ @Test
+ public void fireAllRules(){
+
+ String str = "";
+ str += "package org.drools \n";
+ str += "global java.util.List list \n";
+ str += "rule rule1 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello1!!!\" ); \n";
+ str += "end \n";
+ str += "rule rule2 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello2!!!\" ); \n";
+ str += "end \n";
+
+
+ KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( "Errors: " + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+ Assert.assertNotNull(kbase);
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ Assert.assertNotNull(ksession);
+
+ int fired = ksession.fireAllRules();
+ Assert.assertEquals( 2, fired );
+
+
+
+
+
+ }
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/RemoteNodeServiceTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/RemoteNodeServiceTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services/src/test/java/org/drools/service/RemoteNodeServiceTest.java 2010-03-05 20:20:31 UTC (rev 31965)
@@ -0,0 +1,84 @@
+/*
+ * 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.service;
+
+import org.drools.services.NodeConnection;
+import org.drools.vsm.mina.MinaConnector;
+import org.drools.vsm.GenericConnector;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import java.io.IOException;
+import org.drools.vsm.mina.MinaAcceptor;
+import org.drools.vsm.GenericMessageHandlerImpl;
+import org.drools.vsm.mina.MinaIoHandler;
+import org.drools.SystemEventListenerFactory;
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
+import org.apache.mina.transport.socket.SocketAcceptor;
+import org.drools.vsm.ServiceManagerData;
+import java.net.SocketAddress;
+import java.net.InetSocketAddress;
+import org.drools.services.RemoteNodeConnection;
+import org.junit.After;
+import org.junit.Before;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RemoteNodeServiceTest extends NodeServiceLocatorBaseTest{
+ private MinaAcceptor server;
+ private NodeConnection nodeConnection;
+ public RemoteNodeServiceTest() {
+ }
+
+
+
+ @Before
+ public void setUp() throws IOException {
+ SocketAddress address = new InetSocketAddress( "127.0.0.1",
+ 9123 );
+
+ ServiceManagerData serverData = new ServiceManagerData();
+ // setup Server
+ SocketAcceptor acceptor = new NioSocketAcceptor();
+ acceptor.setHandler( new MinaIoHandler( SystemEventListenerFactory.getSystemEventListener(),
+ new GenericMessageHandlerImpl( serverData,
+ SystemEventListenerFactory.getSystemEventListener() ) ) );
+ this.server = new MinaAcceptor( acceptor,
+ address );
+ this.server.start();
+
+ // setup Client
+ NioSocketConnector clientConnector = new NioSocketConnector();
+ clientConnector.setHandler( new MinaIoHandler( SystemEventListenerFactory.getSystemEventListener() ) );
+ GenericConnector minaClient = new MinaConnector( "client 1",
+ clientConnector,
+ address,
+ SystemEventListenerFactory.getSystemEventListener() );
+
+ nodeConnection = new RemoteNodeConnection("client 1", minaClient);
+ node = nodeConnection.connect();
+ }
+
+ @After
+ public void tearDown() {
+ nodeConnection.disconnect();
+ }
+
+
+
+}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list