[jboss-svn-commits] JBL Code SVN: r32401 - in labs/jbossrules/branches/salaboy_ServiceAPIs: drools-grid and 71 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Apr 4 12:25:35 EDT 2010
Author: salaboy21
Date: 2010-04-04 12:25:30 -0400 (Sun, 04 Apr 2010)
New Revision: 32401
Added:
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/pom.xml
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/DirectoryNodeService.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/ExecutionNode.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/ExecutionNodeService.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/NodeConnector.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/NodeSelectionStrategy.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/RemoteConnection.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/Command.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/CommandName.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/ExecutionNodeClientConnectCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/ExecutionNodeContext.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/GetWorkItemManagerCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/LookupCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/RegisterCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/RegisterRemoteWorkItemHandlerCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/StartProcessRemoteCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/BlockingGenericIoWriter.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/ClientGenericMessageReceiver.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/CollectionClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericConnection.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericIoWriter.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericMessageHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericMessageHandlerImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericNodeConnector.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/Message.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/MessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/MessageSession.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/NodeData.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/DirectoryLookupProviderLocalClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/KnowledgeBaseProviderLocalClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/KnowledgeBuilderProviderLocalClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/LocalConnection.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseProviderRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBuilderProviderRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBuilderRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/ProcessInstanceRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/WorkItemManagerRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/ClientGenericMessageReceiverImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaAcceptor.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaIoHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaIoWriter.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaNodeConnector.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/AbstractBaseResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/AbstractBlockingResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/BlockingMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/DirectoryServiceSelectionStrategy.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/ReturnAlwaysTheFirstSelectionStrategy.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/StaticIncrementalSelectionStrategy.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/services/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/services/command/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/services/generic/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/services/local/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/services/remote/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/services/remote/mina/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/services/responsehandlers/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/services/strategies/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/resources/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/ExecutionNodeBaseTest.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/LocalExecutionNodeTest.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/service/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/pom.xml
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/GridConnection.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/command/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/impl/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/rio/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/rio/InternalRioNodeConnector.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/util/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/services/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/services/grid/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/services/grid/command/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/services/grid/impl/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/services/grid/rio/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/services/grid/strategies/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/services/grid/util/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/resources/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/manager-config.groovy
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/start-monitor.groovy
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/test-config.groovy
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/grid/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/grid/distributed/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/services/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/resources/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/resources/org/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/resources/org/drools/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/resources/org/drools/executionNodeService.groovy
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/pom.xml
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/CommandBasedServicesWSHumanTaskHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/GenericEventTransport.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskFactoryService.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskService.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskServiceImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskServiceProviderRemoteClient.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/TaskClientMessageHandlerImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/TaskServerMessageHandlerImpl.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/eventmessaging/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/eventmessaging/EventMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddAttachmentMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddCommentMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddTaskMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingDeleteAttachmentMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingDeleteCommentMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingEventMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingGetContentMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingGetTaskMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingSetContentMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingTaskOperationMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingTaskSummaryMessageResponseHandler.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/services/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/services/task/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/services/task/eventmessaging/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/services/task/responseHandlers/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/resources/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/grid/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/BaseTaskServiceTest.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/CommandBasedServicesWSHumanTaskHandlerTest.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/services/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/services/task/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/task/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/task/MockUserInfo.java
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/drools.email.conf
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/orm.xml
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/persistence.xml
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/LoadGroups.mvel
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/LoadUsers.mvel
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/QueryData_UnescalatedDeadlines.mvel
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryData_TasksOwned.mvel
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel
labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/pom.xml
Log:
JBRULES-2446: Drools Services API\n -drools-grid initial commit adding drools-grid-core, drools-grid-task and drools-grid-rio
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/pom.xml (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/pom.xml 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,65 @@
+<?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>
+ <artifactId>drools-grid-core</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ <name>Drools :: Grid :: Core</name>
+
+ <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>
+ <version>5.1.0.SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-core</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-compiler</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ </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>
+
+ <!-- logging -->
+
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.5.10</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.5.10</version>
+ </dependency>
+
+ </dependencies>
+
+</project>
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/DirectoryNodeService.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/DirectoryNodeService.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/DirectoryNodeService.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,24 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.grid;
+
+import java.rmi.RemoteException;
+import org.drools.KnowledgeBase;
+import org.drools.grid.generic.GenericNodeConnector;
+
+
+/**
+ *
+ * @author salaboy
+ */
+
+public interface DirectoryNodeService {
+ public void register(String executorId, String sessionServiceId) throws RemoteException;
+ public GenericNodeConnector lookup(String executorId) throws RemoteException;
+ public void registerKBase(String kbaseId, String sessionServiceId) throws RemoteException;
+ public KnowledgeBase lookupKBase(String kbaseId) throws RemoteException;
+ public void addService(GenericNodeConnector service);
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/ExecutionNode.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/ExecutionNode.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/ExecutionNode.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -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.grid;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ExecutionNode {
+
+ 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-grid/drools-grid-core/src/main/java/org/drools/grid/ExecutionNodeService.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/ExecutionNodeService.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/ExecutionNodeService.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,22 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.drools.grid;
+
+import java.rmi.RemoteException;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+
+
+/**
+ *
+ * @author salaboy
+ */
+public interface ExecutionNodeService extends GenericNodeConnector{
+ public String getId() throws RemoteException;
+ public Message write(Message msg) throws RemoteException;
+ double getLoad() throws RemoteException;
+ void setLoad(double load) throws RemoteException;
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/NodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/NodeConnector.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/NodeConnector.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -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.grid;
+
+/**
+ *
+ * @author salaboy
+ */
+public interface NodeConnector {
+ public ExecutionNode connect();
+ public void disconnect();
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/NodeSelectionStrategy.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/NodeSelectionStrategy.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/NodeSelectionStrategy.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid;
+
+import org.drools.grid.generic.GenericConnection;
+import org.drools.grid.generic.GenericNodeConnector;
+
+/**
+ *
+ * @author salaboy
+ */
+public interface NodeSelectionStrategy {
+
+ public GenericNodeConnector getBestNode();
+ public void setConnection(GenericConnection connection);
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/RemoteConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/RemoteConnection.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/RemoteConnection.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.generic.GenericConnection;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.remote.DirectoryLookupProviderRemoteClient;
+import org.drools.grid.remote.KnowledgeBaseProviderRemoteClient;
+import org.drools.grid.remote.KnowledgeBuilderProviderRemoteClient;
+import org.drools.grid.strategies.DirectoryServiceSelectionStrategy;
+
+import org.drools.grid.strategies.StaticIncrementalSelectionStrategy;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RemoteConnection implements GenericConnection {
+ //Cached Services
+ private List<GenericNodeConnector> nodeConnectors;
+ //Cached Directories
+ private List<DirectoryNodeService> directories;
+
+ public RemoteConnection() {
+ this.nodeConnectors = new ArrayList<GenericNodeConnector>();
+ this.directories = new ArrayList<DirectoryNodeService>();
+ }
+
+ public void addNodeConnector(GenericNodeConnector service) {
+ //register the service to all the DirectoryServices
+ for(DirectoryNodeService directory : directories){
+ directory.addService(service);
+ }
+ this.nodeConnectors.add(service);
+
+ }
+ public void addDirectoryNode(DirectoryNodeService directory) {
+ this.directories.add(directory);
+ }
+
+ // In real scenarios this method will be in charge of populating
+ // all the ExecutionNodeService and DirectoryServices
+ public void connect() {
+ throw new NotImplementedException();
+ }
+
+
+ public ExecutionNode getExecutionNode(NodeSelectionStrategy strategy) {
+ ExecutionNode node = null;
+ GenericNodeConnector currentNode = null;
+ try {
+
+ //if the strategy is null use the default one
+ if (strategy == null) {
+ currentNode = getBestNode(new StaticIncrementalSelectionStrategy(this));
+ } else {
+ strategy.setConnection(this);
+ currentNode = getBestNode(strategy);
+ }
+ if (currentNode.connect()) {
+ node = new ExecutionNode();
+ node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderRemoteClient(currentNode));
+ node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderRemoteClient(currentNode));
+ node.set(DirectoryLookupFactoryService.class, new DirectoryLookupProviderRemoteClient(currentNode, this));
+
+ }
+
+ } catch (RemoteException ex) {
+ Logger.getLogger(RemoteConnection.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ return node;
+ }
+ public GenericNodeConnector getBestNode(NodeSelectionStrategy nodeSelectionStrategy) {
+ return nodeSelectionStrategy.getBestNode();
+ }
+
+ public List<DirectoryNodeService> getDirectories() {
+ return directories;
+ }
+
+ public void setDirectories(List<DirectoryNodeService> directories) {
+ this.directories = directories;
+ }
+
+ public List<GenericNodeConnector> getNodeConnectors() {
+ return nodeConnectors;
+ }
+
+ public void setServices(List<GenericNodeConnector> services) {
+ this.nodeConnectors = services;
+ }
+
+ public DirectoryNodeService getDirectoryNode(DirectoryServiceSelectionStrategy directorySelectionStrategy) {
+ return directories.get(0);
+ }
+
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/Command.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/Command.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/Command.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,48 @@
+package org.drools.grid.command;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class Command implements Serializable {
+
+ private int id;
+
+ private CommandName name;
+
+ private List<Object> arguments;
+
+ public Command(int id, CommandName name, List<Object> arguments) {
+ super();
+ this.id = id;
+ this.arguments = arguments;
+ this.name = name;
+ }
+
+
+
+ public int getId() {
+ return id;
+ }
+
+
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+
+
+ public CommandName getName() {
+ return name;
+ }
+ public void setName(CommandName name) {
+ this.name = name;
+ }
+ public List<Object> getArguments() {
+ return arguments;
+ }
+ public void setArguments(List<Object> arguments) {
+ this.arguments = arguments;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/CommandName.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/CommandName.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/CommandName.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,79 @@
+package org.drools.grid.command;
+
+
+public enum CommandName {
+ OperationRequest,
+ OperationResponse,
+
+ ClaimRequest,
+ ClaimResponse,
+
+ StartRequest,
+ StartResponse,
+
+ StopRequest,
+ StopResponse,
+
+ ReleaseRequest,
+ ReleaseResponse,
+
+ SuspendRequest,
+ SuspendResponse,
+
+ ResumeRequest,
+ ResumeResponse,
+
+ SkipRequest,
+ SkipResponse,
+
+ DelegateRequest,
+ DelegateResponse,
+
+ ForwardRequest,
+ ForwardResponse,
+
+ CompleteRequest,
+ CompleteResponse,
+
+ FailRequest,
+ FailResponse,
+
+ GetTaskRequest,
+ GetTaskResponse,
+
+ AddTaskRequest,
+ AddTaskResponse,
+
+ AddAttachmentRequest,
+ AddAttachmentResponse,
+ DeleteAttachmentRequest,
+ DeleteAttachmentResponse,
+
+ SetDocumentContentRequest,
+ SetDocumentContentResponse,
+ GetContentRequest,
+ GetContentResponse,
+
+ AddCommentRequest,
+ AddCommentResponse,
+ DeleteCommentRequest,
+ DeleteCommentResponse,
+
+ QueryTasksOwned,
+ QueryTasksAssignedAsBusinessAdministrator,
+ QueryTasksAssignedAsExcludedOwner,
+ QueryTasksAssignedAsPotentialOwner,
+ QueryTasksAssignedAsPotentialOwnerWithGroup,
+ QueryTasksAssignedAsPotentialOwnerByGroup,
+ QuerySubTasksAssignedAsPotentialOwner,
+ QueryGetSubTasksByParentTaskId,
+ QueryTasksAssignedAsRecipient,
+ QueryTasksAssignedAsTaskInitiator,
+ QueryTasksAssignedAsTaskStakeholder,
+ QueryTaskSummaryResponse,
+
+ RegisterForEventRequest,
+ EventTriggerResponse,
+
+ RegisterClient
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/ExecutionNodeClientConnectCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/ExecutionNodeClientConnectCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/ExecutionNodeClientConnectCommand.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,34 @@
+package org.drools.grid.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.grid.generic.NodeData;
+
+public class ExecutionNodeClientConnectCommand
+ implements
+ GenericCommand<Integer> {
+
+ private String outIdentifier;
+
+
+
+ public ExecutionNodeClientConnectCommand(String outIdentifier) {
+ this.outIdentifier = outIdentifier;
+ }
+
+
+
+ public Integer execute(Context context) {
+ NodeData data = (NodeData) context.get( NodeData.NODE_DATA );
+
+ Integer sessionId = data.getSessionIdCounter().getAndIncrement();
+ if ( this.outIdentifier != null ) {
+ ((ExecutionResultImpl)((KnowledgeCommandContext) context).getExecutionResults()).getResults().put( this.outIdentifier, sessionId );
+ }
+
+ return sessionId;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/ExecutionNodeContext.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/ExecutionNodeContext.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/ExecutionNodeContext.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,40 @@
+package org.drools.grid.command;
+
+import org.drools.command.Context;
+import org.drools.command.ContextManager;
+import org.drools.grid.generic.NodeData;
+
+public class ExecutionNodeContext
+ implements
+ Context {
+ private Context context;
+ private NodeData data;
+
+ public ExecutionNodeContext(Context context,
+ NodeData data) {
+ this.data = data;
+ }
+
+ public NodeData getServiceManagerData() {
+ return this.data;
+ }
+
+ public ContextManager getContextManager() {
+ return context.getContextManager();
+ }
+
+ public String getName() {
+ return context.getName();
+ }
+
+ public Object get(String identifier) {
+ return context.get( identifier );
+ }
+
+ public void set(String identifier,
+ Object value) {
+ context.set( identifier,
+ value );
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/GetWorkItemManagerCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/GetWorkItemManagerCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/GetWorkItemManagerCommand.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,29 @@
+package org.drools.grid.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.runtime.process.WorkItemManager;
+import org.drools.grid.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-grid/drools-grid-core/src/main/java/org/drools/grid/command/LookupCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/LookupCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/LookupCommand.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,39 @@
+package org.drools.grid.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.grid.generic.NodeData;
+
+public class LookupCommand
+ implements
+ GenericCommand<String> {
+
+ private String identifier;
+
+ private String outIdentifier;
+
+ public LookupCommand(String identfier) {
+ this.identifier = identfier;
+ }
+
+ public LookupCommand(String identfier,
+ String outIdentifier) {
+ this.identifier = identfier;
+ this.outIdentifier = outIdentifier;
+ }
+
+ public String execute(Context context) {
+ NodeData data = (NodeData) context.get( NodeData.NODE_DATA );
+
+ String instanceId = (String) data.getRoot().get( identifier );
+
+ if ( this.outIdentifier != null ) {
+ ((ExecutionResultImpl) ((KnowledgeCommandContext) context).getExecutionResults()).getResults().put( this.outIdentifier,
+ instanceId );
+ }
+ return instanceId;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/RegisterCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/RegisterCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/RegisterCommand.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,32 @@
+package org.drools.grid.command;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.grid.generic.NodeData;
+
+public class RegisterCommand
+ implements
+ GenericCommand<Void> {
+
+ private String identifier;
+ private String instanceId;
+ private int type;
+
+ public RegisterCommand(String identifier,
+ String instanceId,
+ int type) {
+ this.identifier = identifier;
+ this.instanceId = instanceId;
+ this.type = type;
+ }
+
+ public Void execute(Context context) {
+ NodeData data = (NodeData) context.get( NodeData.NODE_DATA );
+
+ data.getRoot().set( identifier,
+ type + ":" + instanceId );
+
+ return null;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/RegisterRemoteWorkItemHandlerCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/RegisterRemoteWorkItemHandlerCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/RegisterRemoteWorkItemHandlerCommand.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,75 @@
+package org.drools.grid.command;
+
+
+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-grid/drools-grid-core/src/main/java/org/drools/grid/command/StartProcessRemoteCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/StartProcessRemoteCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/command/StartProcessRemoteCommand.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -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.grid.command;
+
+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.grid.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-grid/drools-grid-core/src/main/java/org/drools/grid/generic/BlockingGenericIoWriter.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/BlockingGenericIoWriter.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/BlockingGenericIoWriter.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,28 @@
+/**
+ *
+ */
+package org.drools.grid.generic;
+
+
+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-grid/drools-grid-core/src/main/java/org/drools/grid/generic/ClientGenericMessageReceiver.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/ClientGenericMessageReceiver.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/ClientGenericMessageReceiver.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,13 @@
+package org.drools.grid.generic;
+
+import org.drools.grid.remote.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-grid/drools-grid-core/src/main/java/org/drools/grid/generic/CollectionClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/CollectionClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/CollectionClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,84 @@
+package org.drools.grid.generic;
+
+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-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericConnection.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericConnection.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.generic;
+
+import java.util.List;
+import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.ExecutionNode;
+import org.drools.grid.NodeSelectionStrategy;
+import org.drools.grid.strategies.DirectoryServiceSelectionStrategy;
+
+/**
+ *
+ * @author salaboy
+ */
+public interface GenericConnection {
+ public void addNodeConnector(GenericNodeConnector nodeConnector);
+ public void addDirectoryNode(DirectoryNodeService directory);
+ public List<GenericNodeConnector> getNodeConnectors();
+ public List<DirectoryNodeService> getDirectories();
+ public ExecutionNode getExecutionNode(NodeSelectionStrategy strategy);
+ public DirectoryNodeService getDirectoryNode(DirectoryServiceSelectionStrategy directorySelectionStrategy);
+
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericIoWriter.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericIoWriter.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericIoWriter.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,6 @@
+package org.drools.grid.generic;
+
+public interface GenericIoWriter {
+ void write(Message msg,
+ MessageResponseHandler responseHandler);
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericMessageHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericMessageHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericMessageHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,8 @@
+package org.drools.grid.generic;
+
+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-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericMessageHandlerImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericMessageHandlerImpl.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,67 @@
+package org.drools.grid.generic;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.SystemEventListener;
+import org.drools.command.FinishedCommand;
+import org.drools.command.impl.ContextImpl;
+import org.drools.command.impl.GenericCommand;
+import org.drools.runtime.impl.ExecutionResultImpl;
+
+public class GenericMessageHandlerImpl implements GenericMessageHandler {
+ private SystemEventListener systemEventListener;
+
+ private NodeData data;
+
+ public GenericMessageHandlerImpl(NodeData data,
+ SystemEventListener systemEventListener) {
+ this.systemEventListener = systemEventListener;
+ this.data = data;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.GenericMessageHandler#messageReceived(org.drools.vsm.GenericIoWriter, org.drools.vsm.Message)
+ */
+ public void messageReceived(GenericIoWriter session,
+ Message msg) throws Exception {
+ systemEventListener.debug( "Message receieved : " + msg );
+
+
+ // we always need to process a List, for genericity, but don't force a List on the payload
+ List<GenericCommand> commands;
+ if ( msg.getPayload() instanceof List ) {
+ commands = (List<GenericCommand>) msg.getPayload();
+ } else {
+ commands = new ArrayList<GenericCommand>();
+ commands.add( (GenericCommand) msg.getPayload() );
+ }
+
+ // Setup the evaluation context
+ ContextImpl localSessionContext = new ContextImpl( "session_" + msg.getSessionId(),
+ this.data.getContextManager(),
+ this.data.getTemp() );
+ ExecutionResultImpl localKresults = new ExecutionResultImpl();
+ localSessionContext.set( "kresults_" + msg.getSessionId(),
+ localKresults );
+
+ for ( GenericCommand cmd : commands ) {
+ // evaluate the commands
+ cmd.execute( localSessionContext );
+ }
+
+ if ( !msg.isAsync() && localKresults.getIdentifiers().isEmpty() ) {
+ // if it's not an async invocation and their are no results, just send a simple notification message
+ session.write( new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ new FinishedCommand() ), null );
+ } else {
+ // return the payload
+ session.write( new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ localKresults ), null );
+ }
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericNodeConnector.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/GenericNodeConnector.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,16 @@
+package org.drools.grid.generic;
+
+import java.rmi.RemoteException;
+
+public interface GenericNodeConnector extends GenericIoWriter {
+
+ boolean connect() throws RemoteException;;
+
+ void disconnect() throws RemoteException;;
+
+ Message write(Message msg) throws RemoteException;;
+
+ String getId() throws RemoteException;;
+
+ // void setSession(Object object) throws RemoteException;;
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/Message.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/Message.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/Message.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,52 @@
+package org.drools.grid.generic;
+
+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-grid/drools-grid-core/src/main/java/org/drools/grid/generic/MessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/MessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/MessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,7 @@
+package org.drools.grid.generic;
+
+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-grid/drools-grid-core/src/main/java/org/drools/grid/generic/MessageSession.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/MessageSession.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/MessageSession.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.generic;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ *
+ * @author salaboy
+ */
+public class MessageSession {
+
+ public AtomicInteger counter;
+ private int sessionId = -1;
+
+ public MessageSession() {
+ counter = new AtomicInteger();
+ }
+
+
+
+ public AtomicInteger getCounter() {
+ return counter;
+ }
+
+ public void setCounter(AtomicInteger counter) {
+ this.counter = counter;
+ }
+
+ public int getSessionId() {
+ return sessionId;
+ }
+
+ public void setSessionId(int sessionId) {
+ this.sessionId = sessionId;
+ }
+
+ public int getNextId() {
+ return this.counter.incrementAndGet();
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/NodeData.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/NodeData.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/generic/NodeData.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,67 @@
+package org.drools.grid.generic;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.drools.command.Context;
+import org.drools.command.ContextManager;
+import org.drools.command.impl.ContextImpl;
+import org.drools.grid.ContextManagerImpl;
+
+public class NodeData {
+ private ContextManager contextManager;
+
+ private Context root;
+ private Context temp;
+
+ public static String ROOT = "ROOT";
+ public static String TEMP = "__TEMP__";
+ public static String NODE_DATA = "__NodeData__";
+
+ private AtomicInteger sessionIdCounter = new AtomicInteger();
+
+ public NodeData() {
+ // Setup ROOT context, this will hold all long lived intances and instanceIds
+ this.contextManager = new ContextManagerImpl();
+
+ this.root = new ContextImpl( ROOT,
+ this.contextManager );
+ ((ContextManagerImpl) this.contextManager).addContext( this.root );
+ this.root.set( NODE_DATA,
+ this );
+ // Setup TEMP context, this will hold all short lived instanceId and instances
+ // TODO: TEMP context should have a time/utilisation eviction queue added
+ this.temp = new ContextImpl( TEMP,
+ this.contextManager,
+ this.root );
+ ((ContextManagerImpl) this.contextManager).addContext( this.temp );
+ }
+
+ public AtomicInteger getSessionIdCounter() {
+ return sessionIdCounter;
+ }
+
+ public ContextManager getContextManager() {
+ return contextManager;
+ }
+
+ public void setContextManager(ContextManager contextManager) {
+ this.contextManager = contextManager;
+ }
+
+ public Context getRoot() {
+ return root;
+ }
+
+ public void setRoot(Context root) {
+ this.root = root;
+ }
+
+ public Context getTemp() {
+ return temp;
+ }
+
+ public void setTemp(Context temp) {
+ this.temp = temp;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/DirectoryLookupProviderLocalClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/DirectoryLookupProviderLocalClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/DirectoryLookupProviderLocalClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.local;
+
+import java.rmi.RemoteException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.runtime.CommandExecutor;
+import org.drools.grid.DirectoryNodeService;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryLookupProviderLocalClient implements DirectoryLookupFactoryService {
+
+
+ private Map<String, CommandExecutor> services = new HashMap<String, CommandExecutor>();
+
+ public DirectoryLookupProviderLocalClient() {
+
+ }
+
+
+ public void register(String key, CommandExecutor executor) {
+ services.put(key, executor);
+ }
+
+ public CommandExecutor lookup(String key) {
+ return services.get(key);
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/DirectoryNodeLocalImpl.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.local;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.drools.KnowledgeBase;
+import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.generic.GenericNodeConnector;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryNodeLocalImpl implements DirectoryNodeService {
+ private Map<String, String> directoryMap = new HashMap<String, String>();
+ private List<GenericNodeConnector> services = new ArrayList<GenericNodeConnector>();
+
+ public void register(String executorId, String sessionServiceId) throws RemoteException {
+ System.out.println("Registering: "+ executorId + " -- "+sessionServiceId);
+ directoryMap.put(executorId, sessionServiceId);
+ }
+
+ public GenericNodeConnector lookup(String executorId) throws RemoteException {
+ GenericNodeConnector sessionService = null;
+ String sessionServiceId = (String)directoryMap.get(executorId);
+ System.out.println("Registry = "+ directoryMap.toString());
+ System.out.println("Nodes Services = "+services);
+ for(GenericNodeConnector ss : services){
+ System.out.println("Session Service id = "+ss.getId() + "needs to match with ="+sessionServiceId);
+ if(ss.getId().equals(sessionServiceId)){
+ sessionService = ss;
+ }
+ }
+
+ return sessionService;
+ }
+
+ public void registerKBase(String kbaseId, String sessionServiceId) throws RemoteException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public KnowledgeBase lookupKBase(String kbaseId) throws RemoteException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ public void addService(GenericNodeConnector service){
+ services.add(service);
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/KnowledgeBaseProviderLocalClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/KnowledgeBaseProviderLocalClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/KnowledgeBaseProviderLocalClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,59 @@
+package org.drools.grid.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-grid/drools-grid-core/src/main/java/org/drools/grid/local/KnowledgeBuilderProviderLocalClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/KnowledgeBuilderProviderLocalClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/KnowledgeBuilderProviderLocalClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,51 @@
+/**
+ *
+ */
+package org.drools.grid.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-grid/drools-grid-core/src/main/java/org/drools/grid/local/LocalConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/LocalConnection.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/local/LocalConnection.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.local;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.ExecutionNode;
+import org.drools.grid.NodeSelectionStrategy;
+import org.drools.grid.generic.GenericConnection;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.strategies.DirectoryServiceSelectionStrategy;
+
+/**
+ *
+ * @author salaboy
+ */
+public class LocalConnection implements GenericConnection {
+
+ //Cached NodeConnectors
+ private List<GenericNodeConnector> nodeConnectors;
+
+
+ public LocalConnection() {
+ this.nodeConnectors = new ArrayList<GenericNodeConnector>();
+
+ }
+
+
+ public void addNodeConnector(GenericNodeConnector nodeConnector) {
+ this.nodeConnectors.add(nodeConnector);
+ }
+
+ public void addDirectoryNode(DirectoryNodeService directory) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public List<GenericNodeConnector> getNodeConnectors() {
+ return this.nodeConnectors;
+ }
+
+ public List<DirectoryNodeService> getDirectories() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public GenericNodeConnector getBestNode(NodeSelectionStrategy nodeSelectionStrategy) {
+ //Analyze if we will need more than one node connector for local usage in the same JVM
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public DirectoryNodeService getDirectoryNode(DirectoryServiceSelectionStrategy directorySelectionStrategy) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public ExecutionNode getExecutionNode(NodeSelectionStrategy strategy) {
+
+ ExecutionNode node = new ExecutionNode();
+ node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderLocalClient() );
+ node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderLocalClient() );
+ node.set(DirectoryLookupFactoryService.class, new DirectoryLookupProviderLocalClient());
+ return node;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/DirectoryLookupProviderRemoteClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+package org.drools.grid.remote;
+
+import java.rmi.RemoteException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.command.LookupCommand;
+import org.drools.grid.command.RegisterCommand;
+import org.drools.grid.generic.GenericConnection;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryLookupProviderRemoteClient implements DirectoryLookupFactoryService {
+
+ //The current node connector
+
+ private GenericNodeConnector client;
+
+
+ private GenericConnection connection;
+
+
+ private MessageSession messageSession;
+
+ public DirectoryLookupProviderRemoteClient(GenericNodeConnector client, GenericConnection connection) {
+ this.client = client;
+ this.messageSession = new MessageSession();
+ this.connection = connection;
+ }
+
+ public void register(String identifier,
+ CommandExecutor executor) {
+ try {
+ String commandId = "client.lookup" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+ int type;
+ if (executor instanceof StatefulKnowledgeSession) {
+ type = 0;
+ } else {
+ throw new IllegalArgumentException("Type is not supported for registration");
+ }
+ Message msg = new Message(messageSession.getSessionId(), messageSession.getCounter().incrementAndGet(), false, new KnowledgeContextResolveFromContextCommand(new RegisterCommand(identifier, ((StatefulKnowledgeSessionRemoteClient) executor).getInstanceId(), type), null, null, null, null));
+
+
+ System.out.println("Registering " + identifier + " - - " + client.getId());
+ connection.getDirectoryNode(null).register(identifier, client.getId());
+ try {
+ Object object = client.write(msg).getPayload();
+ if (!(object instanceof FinishedCommand)) {
+ throw new RuntimeException("Response was not correctly ended");
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to execute message", e);
+ }
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ }
+
+ public CommandExecutor lookup(String identifier) {
+
+ try {
+ String commandId = "client.lookup" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+ Message msg = new Message(messageSession.getSessionId(), messageSession.getCounter().incrementAndGet(), false, new KnowledgeContextResolveFromContextCommand(new LookupCommand(identifier, commandId), null, null, null, kresultsId));
+ System.out.println("Looking up the session with identifier = " + identifier);
+ client = connection.getDirectoryNode(null).lookup(identifier);
+ try {
+ Object object = client.write(msg).getPayload();
+ if (object == null) {
+ throw new RuntimeException("Response was not correctly received");
+ }
+ String value = (String) ((ExecutionResults) object).getValue(commandId);
+ String type = String.valueOf(value.charAt(0));
+ String instanceId = value.substring(2);
+ CommandExecutor executor = null;
+ switch (Integer.parseInt(type)) {
+ case 0:
+ {
+ executor = new StatefulKnowledgeSessionRemoteClient(instanceId, client, messageSession);
+ break;
+ }
+ default:
+ {
+ }
+ }
+ return executor;
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to execute message", e);
+ }
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderRemoteClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ return null;
+ }
+
+
+
+
+
+
+
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseProviderRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseProviderRemoteClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,98 @@
+package org.drools.grid.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.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+
+public class KnowledgeBaseProviderRemoteClient
+ implements
+ KnowledgeBaseFactoryService {
+
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+ public KnowledgeBaseProviderRemoteClient(GenericNodeConnector client) {
+ this.client = client;
+ this.messageSession = new MessageSession();
+ }
+
+ 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( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new NewKnowledgeBaseCommand( null ) ) );
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ return new KnowledgeBaseRemoteClient( localId,
+ client, messageSession );
+
+ }
+
+ 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-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,178 @@
+package org.drools.grid.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.grid.generic.CollectionClient;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+
+public class KnowledgeBaseRemoteClient
+ implements
+ KnowledgeBase {
+
+
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+ private String instanceId;
+
+ public KnowledgeBaseRemoteClient(String instanceId,
+ GenericNodeConnector client, MessageSession messageSession) {
+ this.instanceId = instanceId;
+ this.client = client;
+ this.messageSession = messageSession;
+ }
+
+ public void addKnowledgePackages(Collection<KnowledgePackage> kpackages) {
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ String kuilderInstanceId = ((CollectionClient<KnowledgePackage>) kpackages).getParentInstanceId();
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBaseAddKnowledgePackagesCommand(),
+ kuilderInstanceId,
+ instanceId,
+ null,
+ kresultsId ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+ }
+
+ public FactType getFactType(String packageName,
+ String typeName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgePackage getKnowledgePackage(String packageName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Collection<KnowledgePackage> getKnowledgePackages() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Process getProcess(String processId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Rule getRule(String packageName,
+ String ruleName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public StatefulKnowledgeSession newStatefulKnowledgeSession() {
+ return newStatefulKnowledgeSession( null,
+ null );
+ }
+
+ public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeSessionConfiguration conf,
+ Environment environment) {
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ String localId = UUID.randomUUID().toString();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new KnowledgeContextResolveFromContextCommand( new NewStatefulKnowledgeSessionCommand( null ),
+ null,
+ instanceId,
+ null,
+ kresultsId ) ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ return new StatefulKnowledgeSessionRemoteClient( localId,
+ client, messageSession );
+ }
+
+ public StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public StatelessKnowledgeSession newStatelessKnowledgeSession() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void removeKnowledgePackage(String packageName) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeProcess(String processId) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeRule(String packageName,
+ String ruleName) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void addEventListener(KnowledgeBaseEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Collection<KnowledgeBaseEventListener> getKnowledgeBaseEventListeners() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void removeEventListener(KnowledgeBaseEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeFunction(String packageName, String ruleName) {
+ // TODO Auto-generated method stub
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBuilderProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBuilderProviderRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBuilderProviderRemoteClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,92 @@
+/**
+ *
+ */
+package org.drools.grid.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.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+
+public class KnowledgeBuilderProviderRemoteClient
+ implements
+ KnowledgeBuilderFactoryService {
+
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+ public KnowledgeBuilderProviderRemoteClient(GenericNodeConnector client) {
+ //this.nodeConnection = nodeConnection;
+ this.messageSession = new MessageSession();
+ this.client = client;
+
+ }
+
+ public DecisionTableConfiguration newDecisionTableConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder() {
+ String localId = UUID.randomUUID().toString();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new NewKnowledgeBuilderCommand( null ) ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ return new KnowledgeBuilderRemoteClient( localId,
+ client, messageSession );
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBuilderConfiguration conf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase,
+ KnowledgeBuilderConfiguration conf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration(Properties properties,
+ ClassLoader classLoader) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBuilderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBuilderRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBuilderRemoteClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,142 @@
+package org.drools.grid.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.grid.generic.CollectionClient;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+
+public class KnowledgeBuilderRemoteClient
+ implements
+ KnowledgeBuilder {
+
+ private String instanceId;
+ private final GenericNodeConnector client;
+ private final MessageSession messageSession;
+
+ public KnowledgeBuilderRemoteClient(String instanceId,
+ GenericNodeConnector client, MessageSession messageSession) {
+ this.instanceId = instanceId;
+ this.client = client;
+ this.messageSession = messageSession;
+ }
+
+ public void add(Resource resource,
+ ResourceType resourceType) {
+ add( resource,
+ resourceType,
+ null );
+ }
+
+ public void add(Resource resource,
+ ResourceType resourceType,
+ ResourceConfiguration configuration) {
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderAddCommand( resource,
+ resourceType,
+ configuration ),
+ instanceId,
+ null,
+ null,
+ null ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ }
+
+ public KnowledgeBuilderErrors getErrors() {
+ String commandId = "kbuilder.getErrors_" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderGetErrorsCommand( commandId ),
+ instanceId,
+ null,
+ null,
+ kresultsId ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return (KnowledgeBuilderErrors) ((ExecutionResults) object).getValue( commandId );
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ }
+
+ public Collection<KnowledgePackage> getKnowledgePackages() {
+ return new CollectionClient<KnowledgePackage>( this.instanceId );
+ }
+
+ public boolean hasErrors() {
+ String commandId = "kbuilder.hasErrors_" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.getNextId(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderHasErrorsCommand( commandId ),
+ instanceId,
+ null,
+ null,
+ kresultsId ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return (Boolean) ((ExecutionResults) object).getValue( commandId );
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+
+
+ }
+
+ public KnowledgeBase newKnowledgeBase() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/ProcessInstanceRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/ProcessInstanceRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/ProcessInstanceRemoteClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -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.grid.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-grid/drools-grid-core/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,425 @@
+package org.drools.grid.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.grid.command.GetWorkItemManagerCommand;
+import org.drools.grid.command.RegisterRemoteWorkItemHandlerCommand;
+import org.drools.grid.command.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.grid.generic.GenericNodeConnector;
+import org.drools.time.SessionClock;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+
+public class StatefulKnowledgeSessionRemoteClient
+ implements
+ StatefulKnowledgeSession {
+
+
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+ private String instanceId;
+
+ public StatefulKnowledgeSessionRemoteClient(String instanceId,
+ GenericNodeConnector client, MessageSession messageSession) {
+ this.instanceId = instanceId;
+ this.client = client;
+ this.messageSession = messageSession;
+
+ }
+
+ public String getInstanceId() {
+ return this.instanceId;
+ }
+
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public int getId() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int fireAllRules() {
+ String commandId = "ksession.fireAllRules" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new FireAllRulesCommand( commandId ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ Object object = 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" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new ExecuteCommand( commandId,
+ command ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object object = 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_" + messageSession.getSessionId();
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ true,
+ new KnowledgeContextResolveFromContextCommand( new GetWorkItemManagerCommand(),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ Object payload = client.write( msg ).getPayload();
+ WorkItemManager workItemManager = (WorkItemManager) ((ExecutionResults) payload).getValue( "workItemManager" );
+ ((WorkItemManagerRemoteClient)workItemManager).setClient(client);
+ ((WorkItemManagerRemoteClient)workItemManager).setMessageSession(messageSession);
+ ((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_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new RegisterRemoteWorkItemHandlerCommand(name, workItemHandler ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ 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" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new StartProcessRemoteCommand( processId ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object object = 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-grid/drools-grid-core/src/main/java/org/drools/grid/remote/WorkItemManagerRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/WorkItemManagerRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/WorkItemManagerRemoteClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,66 @@
+package org.drools.grid.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.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+
+/**
+ *
+ * @author Lucas Amador
+ * @author salaboy
+ */
+public class WorkItemManagerRemoteClient implements WorkItemManager, Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+ private String instanceId;
+
+ public void abortWorkItem(long id) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void completeWorkItem(long id, Map<String, Object> results) {
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ true,
+ new KnowledgeContextResolveFromContextCommand( new CompleteWorkItemCommand(id, results),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ client.write( msg );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message", e );
+ }
+ }
+
+ public void registerWorkItemHandler(String workItemName, WorkItemHandler handler) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void setClient(GenericNodeConnector client) {
+ this.client = client;
+ }
+
+ public void setMessageSession(MessageSession messageSession) {
+ this.messageSession = messageSession;
+ }
+
+
+
+ public void setInstanceId(String instanceId) {
+ this.instanceId = instanceId;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/ClientGenericMessageReceiverImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/ClientGenericMessageReceiverImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/ClientGenericMessageReceiverImpl.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,73 @@
+/**
+ *
+ */
+package org.drools.grid.remote.mina;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.drools.SystemEventListener;
+import org.drools.grid.command.Command;
+
+
+
+
+import org.drools.grid.generic.ClientGenericMessageReceiver;
+import org.drools.grid.generic.GenericIoWriter;
+import org.drools.grid.generic.GenericMessageHandler;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.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-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaAcceptor.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaAcceptor.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaAcceptor.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,45 @@
+package org.drools.grid.remote.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.grid.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-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaIoHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaIoHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaIoHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,60 @@
+package org.drools.grid.remote.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.grid.generic.ClientGenericMessageReceiver;
+import org.drools.grid.generic.GenericMessageHandler;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.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-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaIoWriter.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaIoWriter.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaIoWriter.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,23 @@
+package org.drools.grid.remote.mina;
+
+import org.apache.mina.core.session.IoSession;
+import org.drools.grid.generic.GenericIoWriter;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.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-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaNodeConnector.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/mina/MinaNodeConnector.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,122 @@
+package org.drools.grid.remote.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.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.GenericIoWriter;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageResponseHandler;
+import org.drools.grid.responsehandlers.BlockingMessageResponseHandler;
+
+public class MinaNodeConnector
+ implements
+ GenericNodeConnector,
+ GenericIoWriter {
+
+
+ protected IoSession session;
+
+ protected final String name;
+ protected AtomicInteger counter;
+ protected SocketConnector connector;
+ protected SocketAddress address;
+ protected SystemEventListener eventListener;
+
+ public MinaNodeConnector(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;
+ }
+
+ public String getId() {
+ return String.valueOf(session.getId());
+ }
+
+ public void setSession(Object object) {
+ this.session = (IoSession) object;
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/AbstractBaseResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/AbstractBaseResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/AbstractBaseResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,69 @@
+package org.drools.grid.responsehandlers;
+
+import java.lang.reflect.Constructor;
+
+import org.drools.grid.generic.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-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/AbstractBlockingResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/AbstractBlockingResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/AbstractBlockingResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,37 @@
+/**
+ *
+ */
+package org.drools.grid.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-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/BlockingMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/BlockingMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/responsehandlers/BlockingMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,32 @@
+/**
+ *
+ */
+package org.drools.grid.responsehandlers;
+
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.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-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/DirectoryServiceSelectionStrategy.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/DirectoryServiceSelectionStrategy.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/DirectoryServiceSelectionStrategy.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.strategies;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryServiceSelectionStrategy {
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/ReturnAlwaysTheFirstSelectionStrategy.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/ReturnAlwaysTheFirstSelectionStrategy.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/ReturnAlwaysTheFirstSelectionStrategy.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.strategies;
+
+import org.drools.grid.NodeSelectionStrategy;
+import org.drools.grid.generic.GenericConnection;
+import org.drools.grid.generic.GenericNodeConnector;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ReturnAlwaysTheFirstSelectionStrategy implements NodeSelectionStrategy{
+
+ private GenericConnection connection;
+ public ReturnAlwaysTheFirstSelectionStrategy(GenericConnection connection) {
+ this.connection = connection;
+ }
+ public GenericNodeConnector getBestNode() {
+ return this.connection.getNodeConnectors().get(0);
+ }
+
+ public void setConnection(GenericConnection connection) {
+ this.connection = connection;
+ }
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/StaticIncrementalSelectionStrategy.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/StaticIncrementalSelectionStrategy.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/main/java/org/drools/grid/strategies/StaticIncrementalSelectionStrategy.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.strategies;
+
+
+import org.drools.grid.NodeSelectionStrategy;
+import org.drools.grid.generic.GenericConnection;
+import org.drools.grid.generic.GenericNodeConnector;
+
+
+/**
+ *
+ * @author salaboy
+ */
+public class StaticIncrementalSelectionStrategy implements NodeSelectionStrategy{
+ public static int counter = 0;
+ private GenericConnection connection;
+ public StaticIncrementalSelectionStrategy(GenericConnection connection) {
+ this.connection = connection;
+ }
+
+
+ @Override
+ public GenericNodeConnector getBestNode() {
+ System.out.println("!!!!!GET BEST NODE = "+counter);
+ GenericNodeConnector service = connection.getNodeConnectors().get(counter);
+ StaticIncrementalSelectionStrategy.counter = counter +1;
+ return service;
+ }
+
+ public void setConnection(GenericConnection connection) {
+ this.connection = connection;
+ }
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/ExecutionNodeBaseTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/ExecutionNodeBaseTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/ExecutionNodeBaseTest.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid;
+
+
+import org.drools.KnowledgeBase;
+import org.drools.grid.ExecutionNode;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.builder.ResourceType;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.generic.GenericConnection;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+/**
+ *
+ * @author salaboy
+ */
+
+public abstract class ExecutionNodeBaseTest {
+
+ protected ExecutionNode node;
+ protected GenericConnection connection;
+
+ @Before
+ protected abstract void configureNode() throws Exception;
+
+ public ExecutionNodeBaseTest() {
+
+ }
+
+
+ @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 );
+
+
+ }
+ @Test
+ public void testExecute() throws Exception {
+
+ 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();
+
+ ExecutionResults results = ksession.execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2,
+ (int) (Integer) results.getValue( "fired" ) );
+ }
+ @Test
+ public void testNamedService() throws Exception {
+ 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();
+
+ node.get(DirectoryLookupFactoryService.class).register( "ksession1",
+ ksession );
+
+ ExecutionResults results = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2,
+ (int) (Integer) results.getValue( "fired" ) );
+ }
+ @Test
+ public void testVsmPipeline() throws Exception {
+ 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();
+
+ node.get(DirectoryLookupFactoryService.class).register( "ksession1",
+ ksession );
+
+ ExecutionResults results = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2, (int ) ( Integer) results.getValue( "fired" ) );
+ }
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/LocalExecutionNodeTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/LocalExecutionNodeTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/LocalExecutionNodeTest.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid;
+
+import org.drools.grid.local.LocalConnection;
+import org.junit.Before;
+
+/**
+ *
+ * @author salaboy
+ */
+public class LocalExecutionNodeTest extends ExecutionNodeBaseTest{
+
+ public LocalExecutionNodeTest() {
+ }
+
+
+
+ @Before
+ public void configureNode() {
+ connection = new LocalConnection();
+ node = connection.getExecutionNode(null);
+ }
+
+
+
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-core/src/test/java/org/drools/grid/RemoteExecutionNodeTest.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid;
+
+import java.rmi.RemoteException;
+import java.util.Iterator;
+import org.drools.grid.remote.mina.MinaNodeConnector;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import java.io.IOException;
+import org.drools.grid.remote.mina.MinaAcceptor;
+import org.drools.grid.generic.GenericMessageHandlerImpl;
+import org.drools.grid.remote.mina.MinaIoHandler;
+import org.drools.SystemEventListenerFactory;
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
+import org.apache.mina.transport.socket.SocketAcceptor;
+import org.drools.grid.generic.NodeData;
+import java.net.SocketAddress;
+import java.net.InetSocketAddress;
+import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.RemoteConnection;
+import org.drools.grid.local.DirectoryNodeLocalImpl;
+import org.drools.grid.strategies.StaticIncrementalSelectionStrategy;
+import org.junit.After;
+import org.junit.Before;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RemoteExecutionNodeTest extends ExecutionNodeBaseTest{
+ private MinaAcceptor server;
+
+ public RemoteExecutionNodeTest() {
+ }
+
+
+
+ @Before
+ public void configureNode() throws IOException {
+ connection = new RemoteConnection();
+
+ StaticIncrementalSelectionStrategy.counter = 0;
+ SocketAddress address = new InetSocketAddress( "127.0.0.1",
+ 9123 );
+
+ NodeData nodeData = new NodeData();
+ // setup Server
+ SocketAcceptor acceptor = new NioSocketAcceptor();
+ acceptor.setHandler( new MinaIoHandler( SystemEventListenerFactory.getSystemEventListener(),
+ new GenericMessageHandlerImpl( nodeData,
+ SystemEventListenerFactory.getSystemEventListener() ) ) );
+ this.server = new MinaAcceptor( acceptor,
+ address );
+ this.server.start();
+
+ connection.addDirectoryNode(new DirectoryNodeLocalImpl());
+
+ // setup Client
+ NioSocketConnector clientConnector = new NioSocketConnector();
+ clientConnector.setHandler( new MinaIoHandler( SystemEventListenerFactory.getSystemEventListener() ) );
+ GenericNodeConnector minaClient = new MinaNodeConnector( "client 1",
+ clientConnector,
+ address,
+ SystemEventListenerFactory.getSystemEventListener() );
+ connection.addNodeConnector(minaClient);
+ node = connection.getExecutionNode(null);
+
+ }
+
+ @After
+ public void tearDown() throws RemoteException {
+
+ for(Iterator<GenericNodeConnector> iterator = connection.getNodeConnectors().iterator(); iterator.hasNext();){
+ iterator.next().disconnect();
+ }
+
+ this.server.stop();
+
+ }
+
+
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/pom.xml (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/pom.xml 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,173 @@
+<?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>
+
+ <artifactId>drools-grid-rio</artifactId>
+ <name>Drools :: Grid :: RIO</name>
+
+ <packaging>oar</packaging>
+ <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>
+ <version>5.1.0.SNAPSHOT</version>
+
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-core</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-compiler</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+
+ </dependency>
+
+ <!-- Drools Grid Core -->
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-grid-core</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ </dependency>
+
+ <!-- RIO Runtime -->
+ <dependency>
+ <groupId>org.rioproject</groupId>
+ <artifactId>rio</artifactId>
+ <version>4.0</version>
+ </dependency>
+
+ <!-- RIO Test framework -->
+ <dependency>
+ <groupId>org.rioproject</groupId>
+ <artifactId>rio-test</artifactId>
+ <version>4.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- RIO Gnostic -->
+ <dependency>
+ <groupId>org.rioproject</groupId>
+ <artifactId>gnostic</artifactId>
+ <version>4.0</version>
+
+ </dependency>
+
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-rio-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <opstring>src/test/resources/org/drools/executionNodeService.groovy</opstring>
+ <createJar>
+ <classifier>dl</classifier>
+ <ins>
+ <in>org.drools.grid</in>
+ <in>org.rioproject.gnostic</in>
+ </ins>
+ <topclasses>
+ <topclass>org.drools.grid.ExecutionNodeService</topclass>
+ <topclass>org.drools.grid.DirectoryNodeService</topclass>
+ <topclass>org.drools.grid.distributed.util.IDEntry</topclass>
+ <topclass>org.drools.impl.SystemEventListenerServiceImpl</topclass>
+ <topclass>org.rioproject.gnostic.Gnostic</topclass>
+ </topclasses>
+ </createJar>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>**/*IT*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>failsafe-maven-plugin</artifactId>
+ <version>2.4.3-alpha-1</version>
+ <configuration>
+ <forkMode>always</forkMode>
+ <argLine>-DRIO_TEST_ATTACH</argLine>
+ <systemProperties>
+
+ <property>
+ <name>opstring</name>
+ <value>src/test/resources/org/drools/executionNodeService.groovy</value>
+ </property>
+ <property>
+ <name>org.rioproject.test.config</name>
+ <value>src/test/conf/test-config.groovy</value>
+ </property>
+
+ <property>
+ <name>org.rioproject.test.manager.config</name>
+ <value>src/test/conf/manager-config.groovy</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <repositories>
+ <repository>
+ <id>rio</id>
+ <url>http://www.rio-project.org/maven2</url>
+ </repository>
+
+
+ </repositories>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>rio</id>
+ <url>http://www.rio-project.org/maven2</url>
+ </pluginRepository>
+
+ <pluginRepository>
+
+ <id>elastic-grid</id>
+ <url>http://maven.elastic-grid.com</url>
+
+ </pluginRepository>
+ </pluginRepositories>
+</project>
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/DirectoryLookupProviderGridClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.distributed;
+
+import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.ExecutionNodeService;
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.command.LookupCommand;
+import org.drools.grid.command.RegisterCommand;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryLookupProviderGridClient implements DirectoryLookupFactoryService {
+
+ private GridConnection gridClient;
+ private GenericNodeConnector currentService;
+ private MessageSession messageSession;
+
+
+
+ public DirectoryLookupProviderGridClient(GenericNodeConnector currentService, GridConnection gridClient) {
+ this.currentService = currentService;
+ this.gridClient = gridClient;
+ this.messageSession = new MessageSession();
+ }
+
+ public void register(String identifier,
+ CommandExecutor executor) {
+ try {
+ String commandId = "client.lookup" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+ int type;
+
+
+ if ( executor instanceof StatefulKnowledgeSession ) {
+ type = 0;
+ } else {
+ throw new IllegalArgumentException("Type is not supported for registration");
+ }
+ Message msg = new Message(messageSession.getSessionId(), messageSession.getCounter().incrementAndGet(), false, new KnowledgeContextResolveFromContextCommand(new RegisterCommand(identifier, ((StatefulKnowledgeSessionGridClient) executor).getInstanceId(), type), null, null, null, null));
+ System.out.println("Registering " + identifier + " - - " + currentService.getId());
+ try {
+ // DirectoryNodeService directory = (DirectoryNodeService) gridClient.getDirectories().iterator().next();
+ for(DirectoryNodeService directory : gridClient.getDirectories() ){
+
+ directory.register(identifier, currentService.getId());
+
+ }
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ try {
+ Object object = currentService.write(msg).getPayload();
+ if (!(object instanceof FinishedCommand)) {
+ throw new RuntimeException("Response was not correctly ended");
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to execute message", e);
+ }
+ } catch ( RemoteException ex ) {
+ Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
+ public CommandExecutor lookup(String identifier) {
+ String commandId = "client.lookup" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.getCounter().incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new LookupCommand( identifier,
+ commandId ),
+ null,
+ null,
+ null,
+ kresultsId ) );
+ System.out.println("Looking up the session with identifier = "+identifier);
+ try {
+ //First I need to get the correct client ExecutionNodeService with the identifier
+ //Look in all the DirectoryNodes
+ //DirectoryNodeService directory = (DirectoryNodeService) gridClient.getDirectories().iterator().next();
+
+ for(DirectoryNodeService directory : gridClient.getDirectories() ) {
+ currentService = directory.lookup(identifier);
+ }
+
+ } catch (RemoteException ex) {
+ Logger.getLogger(DirectoryLookupProviderGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ try {
+ Object object = currentService.write( msg ).getPayload();
+
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+ String value = (String) ((ExecutionResults) object).getValue( commandId );
+ String type = String.valueOf( value.charAt( 0 ) );
+ String instanceId = value.substring( 2 );
+
+ CommandExecutor executor = null;
+ switch ( Integer.parseInt( type ) ) {
+ case 0 : {
+ executor = new StatefulKnowledgeSessionGridClient( instanceId, currentService, messageSession );
+ break;
+ }
+ default : {
+
+ }
+
+ }
+
+ return executor;
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/GenericMessageGridHandlerImpl.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,144 @@
+package org.drools.grid.distributed;
+
+import org.drools.grid.DirectoryNodeService;
+import java.io.IOException;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import net.jini.core.lookup.ServiceItem;
+import net.jini.core.lookup.ServiceTemplate;
+import net.jini.discovery.LookupDiscoveryManager;
+import net.jini.lease.LeaseRenewalManager;
+import net.jini.lookup.ServiceDiscoveryManager;
+
+import org.drools.SystemEventListener;
+import org.drools.command.FinishedCommand;
+import org.drools.command.impl.ContextImpl;
+import org.drools.command.impl.GenericCommand;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.grid.generic.NodeData;
+import org.drools.grid.generic.GenericIoWriter;
+import org.drools.grid.generic.GenericMessageHandler;
+import org.drools.grid.generic.Message;
+
+
+public class GenericMessageGridHandlerImpl implements GenericMessageHandler {
+ private SystemEventListener systemEventListener;
+
+ private NodeData data;
+ private DirectoryNodeService registry;
+
+ public GenericMessageGridHandlerImpl(NodeData data,
+ SystemEventListener systemEventListener) {
+ this.systemEventListener = systemEventListener;
+ this.data = data;
+
+ Class[] classes = new Class[]{org.drools.grid.DirectoryNodeService.class};
+ ServiceTemplate tmpl = new ServiceTemplate(null, classes,null);
+
+ LookupDiscoveryManager lookupDiscovery = null;
+ try {
+ lookupDiscovery = new LookupDiscoveryManager(LookupDiscoveryManager.ALL_GROUPS, null, null);
+ } catch (IOException ex) {
+ Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ System.out.println("Discovering Manager service ...");
+
+ ServiceDiscoveryManager serviceDiscovery = null;
+ try {
+ serviceDiscovery = new ServiceDiscoveryManager(lookupDiscovery, new LeaseRenewalManager());
+ } catch (IOException ex) {
+ Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ /* Wait no more then 10 seconds to discover the service */
+ ServiceItem item = null;
+ try {
+ try {
+ item = serviceDiscovery.lookup(tmpl, null, 1000);
+ } catch (RemoteException ex) {
+ Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ } catch (InterruptedException ex) {
+ Logger.getLogger(GenericMessageGridHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ serviceDiscovery.terminate();
+
+ if(item != null) {
+ System.out.println("Discovered Registry service");
+ if(item.service instanceof DirectoryNodeService){
+ registry = (DirectoryNodeService)item.service;
+
+ }
+
+
+ } else {
+ System.out.println("Registry service not discovered, make sure the"+
+ "service is deployed");
+ }
+
+ }
+
+
+
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.GenericMessageHandler#messageReceived(org.drools.vsm.GenericIoWriter, org.drools.vsm.Message)
+ */
+ public void messageReceived(GenericIoWriter session,
+ Message msg) throws Exception {
+ systemEventListener.debug( "Message receieved : " + msg );
+
+
+ // we always need to process a List, for genericity, but don't force a List on the payload
+ List<GenericCommand> commands;
+ if ( msg.getPayload() instanceof List ) {
+ commands = (List<GenericCommand>) msg.getPayload();
+ } else {
+ commands = new ArrayList<GenericCommand>();
+ commands.add( (GenericCommand) msg.getPayload() );
+ }
+
+ // Setup the evaluation context
+ ContextImpl localSessionContext = new ContextImpl( "session_" + msg.getSessionId(),
+ this.data.getContextManager(),
+ this.data.getTemp() );
+ ExecutionResultImpl localKresults = new ExecutionResultImpl();
+ localSessionContext.set( "kresults_" + msg.getSessionId(),
+ localKresults );
+ //@TODO: replace with Environment ?? this needs to change..
+ localSessionContext.set("registry", registry);
+
+ for ( GenericCommand cmd : commands ) {
+ // evaluate the commands
+ cmd.execute( localSessionContext );
+ }
+
+ if(localSessionContext.get("kbase") != null){
+ session.write( new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ localSessionContext.get("kbase") ), null );
+
+ } else if ( !msg.isAsync() && localKresults.getIdentifiers().isEmpty() ) {
+ // if it's not an async invocation and their are no results, just send a simple notification message
+ session.write( new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ new FinishedCommand() ), null );
+
+
+ } else{
+ // return the payload
+ session.write( new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ localKresults ), null );
+ }
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/GridConnection.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/GridConnection.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/GridConnection.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+package org.drools.grid.distributed;
+
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.grid.DirectoryNodeService;
+import org.drools.builder.DirectoryLookupFactoryService;
+import java.util.ArrayList;
+import java.util.List;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.grid.ExecutionNode;
+import org.drools.grid.NodeSelectionStrategy;
+import org.drools.grid.generic.GenericConnection;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.strategies.DirectoryServiceSelectionStrategy;
+import org.drools.grid.strategies.StaticIncrementalSelectionStrategy;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+/**
+ *
+ * @author salaboy
+ */
+public class GridConnection implements GenericConnection {
+
+ //Cached Services
+ private List<GenericNodeConnector> nodeConnectors;
+ //Cached Directories
+ private List<DirectoryNodeService> directories;
+
+ public GridConnection() {
+ this.nodeConnectors = new ArrayList<GenericNodeConnector>();
+ this.directories = new ArrayList<DirectoryNodeService>();
+ }
+
+ public void addNodeConnector(GenericNodeConnector service) {
+
+ this.nodeConnectors.add(service);
+
+ }
+
+ public void addDirectoryNode(DirectoryNodeService directory) {
+ this.directories.add(directory);
+ }
+
+ // In real scenarios this method will be in charge of populating
+ // all the ExecutionNodeService and DirectoryServices
+ public void connect() {
+ throw new NotImplementedException();
+ }
+
+
+ @Override
+ public ExecutionNode getExecutionNode(NodeSelectionStrategy strategy) {
+ ExecutionNode node = null;
+ GenericNodeConnector currentNode = null;
+ try {
+
+ //if the strategy is null use the default one
+ if (strategy == null) {
+ currentNode = getBestNode(new StaticIncrementalSelectionStrategy(this));
+ } else {
+ strategy.setConnection(this);
+ currentNode = getBestNode(strategy);
+ }
+ if (currentNode.connect()) {
+ node = new ExecutionNode();
+ node.set(KnowledgeBuilderFactoryService.class, new KnowledgeBuilderProviderGridClient(currentNode, this));
+ node.set(KnowledgeBaseFactoryService.class, new KnowledgeBaseProviderGridClient(currentNode, this));
+ node.set(DirectoryLookupFactoryService.class, new DirectoryLookupProviderGridClient(currentNode, this));
+ }
+
+ } catch (RemoteException ex) {
+ Logger.getLogger(GridConnection.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ return node;
+ }
+
+
+
+
+ public GenericNodeConnector getBestNode(NodeSelectionStrategy nodeSelectionStrategy) {
+ return nodeSelectionStrategy.getBestNode();
+ }
+
+ public List<DirectoryNodeService> getDirectories() {
+ return directories;
+ }
+
+ public void setDirectories(List<DirectoryNodeService> directories) {
+ this.directories = directories;
+ }
+
+ public List<GenericNodeConnector> getNodeConnectors() {
+ return nodeConnectors;
+ }
+
+ public void setServices(List<GenericNodeConnector> services) {
+ this.nodeConnectors = services;
+ }
+
+ @Override
+ public DirectoryNodeService getDirectoryNode(DirectoryServiceSelectionStrategy directorySelectionStrategy) {
+ return directories.get(0);
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBaseGridClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,199 @@
+package org.drools.grid.distributed;
+
+import org.drools.grid.DirectoryNodeService;
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import java.util.Collection;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeBaseAddKnowledgePackagesCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definition.process.Process;
+import org.drools.definition.rule.Rule;
+import org.drools.definition.type.FactType;
+import org.drools.event.knowledgebase.KnowledgeBaseEventListener;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.grid.generic.CollectionClient;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+import org.drools.grid.distributed.command.NewStatefulKnowledgeSessionGridCommand;
+import org.drools.grid.distributed.rio.InternalRioNodeConnector;
+
+
+public class KnowledgeBaseGridClient
+ implements
+ KnowledgeBase {
+
+
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+ private String instanceId;
+ private GridConnection gridClient;
+
+ public KnowledgeBaseGridClient(String instanceId,
+ GenericNodeConnector client, MessageSession messageSession, GridConnection gridClient) {
+ this.instanceId = instanceId;
+
+ this.client = client;
+ this.messageSession = messageSession;
+ this.gridClient = gridClient;
+ }
+
+ public void addKnowledgePackages(Collection<KnowledgePackage> kpackages) {
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ String kuilderInstanceId = ((CollectionClient<KnowledgePackage>) kpackages).getParentInstanceId();
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBaseAddKnowledgePackagesCommand(),
+ kuilderInstanceId,
+ instanceId,
+ null,
+ kresultsId ) );
+ try {
+ //I should register the kbase ID??
+ DirectoryNodeService directory = gridClient.getDirectories().iterator().next();
+ if(directory != null){
+ directory.registerKBase(instanceId, client.getId());
+ }
+ //nodeConnection.getRegistryService().registerKBase(, );
+ } catch (RemoteException ex) {
+ Logger.getLogger(KnowledgeBaseGridClient.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+ }
+
+ public FactType getFactType(String packageName,
+ String typeName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgePackage getKnowledgePackage(String packageName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Collection<KnowledgePackage> getKnowledgePackages() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Process getProcess(String processId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Rule getRule(String packageName,
+ String ruleName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public StatefulKnowledgeSession newStatefulKnowledgeSession() {
+ return newStatefulKnowledgeSession( null,
+ null );
+ }
+
+ public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeSessionConfiguration conf,
+ Environment environment) {
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ String localId = UUID.randomUUID().toString();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new KnowledgeContextResolveFromContextCommand( new NewStatefulKnowledgeSessionGridCommand( null, instanceId ),
+ null,
+ instanceId,
+ null,
+ kresultsId ) ) );
+
+ try {
+ Object object = 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 StatefulKnowledgeSessionGridClient( localId,
+ client, messageSession );
+ }
+
+ public StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public StatelessKnowledgeSession newStatelessKnowledgeSession() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void removeKnowledgePackage(String packageName) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeProcess(String processId) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeRule(String packageName,
+ String ruleName) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void addEventListener(KnowledgeBaseEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Collection<KnowledgeBaseEventListener> getKnowledgeBaseEventListeners() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void removeEventListener(KnowledgeBaseEventListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeFunction(String packageName, String ruleName) {
+ // TODO Auto-generated method stub
+ }
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBaseProviderGridClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,122 @@
+package org.drools.grid.distributed;
+
+
+import org.drools.grid.ExecutionNodeService;
+import java.util.Properties;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.SystemEventListenerFactory;
+
+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.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+import org.drools.grid.distributed.rio.InternalRioNodeConnector;
+
+
+public class KnowledgeBaseProviderGridClient
+ implements
+ KnowledgeBaseFactoryService {
+
+ private GridConnection gridClient;
+ private String localId = "";
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+
+ public KnowledgeBaseProviderGridClient(GenericNodeConnector currentService, GridConnection gridClient) {
+
+ this.gridClient = gridClient;
+ this.messageSession = new MessageSession();
+ this.client = new InternalRioNodeConnector("client 1", SystemEventListenerFactory.getSystemEventListener(), (ExecutionNodeService) currentService);
+
+ }
+
+
+ public Environment newEnvironment() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBase newKnowledgeBase() {
+ return newKnowledgeBase( ( KnowledgeBaseConfiguration ) null );
+ }
+
+ public KnowledgeBase newKnowledgeBase(KnowledgeBaseConfiguration conf) {
+ //return new NewKnowledgeBaseCommand(null);
+ if(localId == null || localId.equals("")){
+ localId = UUID.randomUUID().toString();
+ }
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new NewKnowledgeBaseCommand( null ) ) );
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ return new KnowledgeBaseGridClient( localId,
+ client, messageSession, gridClient);
+
+ }
+
+ 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;
+ }
+
+ public String getLocalId() {
+ return localId;
+ }
+
+ public void setLocalId(String localId) {
+ this.localId = localId;
+ }
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBuilderGridClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,147 @@
+package org.drools.grid.distributed;
+
+import org.drools.KnowledgeBase;
+
+import java.util.Collection;
+
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.ResourceConfiguration;
+import org.drools.builder.ResourceType;
+import org.drools.command.FinishedCommand;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.builder.KnowledgeBuilderAddCommand;
+import org.drools.command.builder.KnowledgeBuilderGetErrorsCommand;
+import org.drools.command.builder.KnowledgeBuilderHasErrorsCommand;
+import org.drools.definition.KnowledgePackage;
+import org.drools.io.Resource;
+import org.drools.runtime.ExecutionResults;
+import org.drools.grid.generic.CollectionClient;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+
+
+public class KnowledgeBuilderGridClient
+ implements
+ KnowledgeBuilder {
+ //private GridExecutionNodeConnection nodeConnection;
+ private String instanceId;
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+
+ public KnowledgeBuilderGridClient(String instanceId,
+ GenericNodeConnector client, MessageSession messageSession) {
+ this.instanceId = instanceId;
+ //this.nodeConnection = nodeConnection;
+ this.client = client;
+ this.messageSession = messageSession;
+
+
+ }
+
+ public void add(Resource resource,
+ ResourceType resourceType) {
+ add( resource,
+ resourceType,
+ null );
+ }
+
+ public void add(Resource resource,
+ ResourceType resourceType,
+ ResourceConfiguration configuration) {
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderAddCommand( resource,
+ resourceType,
+ configuration ),
+ instanceId,
+ null,
+ null,
+ null ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ }
+
+ public KnowledgeBuilderErrors getErrors() {
+ String commandId = "kbuilder.getErrors_" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderGetErrorsCommand( commandId ),
+ instanceId,
+ null,
+ null,
+ kresultsId ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return (KnowledgeBuilderErrors) ((ExecutionResults) object).getValue( commandId );
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ }
+
+ public Collection<KnowledgePackage> getKnowledgePackages() {
+ return new CollectionClient<KnowledgePackage>( this.instanceId );
+ }
+
+ public boolean hasErrors() {
+ String commandId = "kbuilder.hasErrors_" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.getNextId(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new KnowledgeBuilderHasErrorsCommand( commandId ),
+ instanceId,
+ null,
+ null,
+ kresultsId ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return (Boolean) ((ExecutionResults) object).getValue( commandId );
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+
+
+ }
+
+ @Override
+ public KnowledgeBase newKnowledgeBase() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/KnowledgeBuilderProviderGridClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,100 @@
+/**
+ *
+ */
+package org.drools.grid.distributed;
+
+
+import org.drools.grid.ExecutionNodeService;
+import java.util.Properties;
+import java.util.UUID;
+
+import org.drools.KnowledgeBase;
+import org.drools.SystemEventListenerFactory;
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+
+import org.drools.command.FinishedCommand;
+import org.drools.command.SetVariableCommand;
+import org.drools.command.builder.NewKnowledgeBuilderCommand;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+import org.drools.grid.distributed.rio.InternalRioNodeConnector;
+
+
+public class KnowledgeBuilderProviderGridClient
+ implements
+ KnowledgeBuilderFactoryService {
+
+ private MessageSession messageSession;
+ private GenericNodeConnector client;
+
+
+
+ public KnowledgeBuilderProviderGridClient(GenericNodeConnector currentService, GridConnection gridClient) {
+ this.messageSession = new MessageSession();
+ client = new InternalRioNodeConnector("client 1", SystemEventListenerFactory.getSystemEventListener(), (ExecutionNodeService) currentService);
+
+ }
+
+ public DecisionTableConfiguration newDecisionTableConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder() {
+ String localId = UUID.randomUUID().toString();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new SetVariableCommand( "__TEMP__",
+ localId,
+ new NewKnowledgeBuilderCommand( null ) ) );
+
+ try {
+ Object object = client.write( msg ).getPayload();
+
+ if ( !(object instanceof FinishedCommand) ) {
+ throw new RuntimeException( "Response was not correctly ended" );
+ }
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+ return new KnowledgeBuilderGridClient( localId,
+ client, messageSession );
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBuilderConfiguration conf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase,
+ KnowledgeBuilderConfiguration conf) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public KnowledgeBuilderConfiguration newKnowledgeBuilderConfiguration(Properties properties,
+ ClassLoader classLoader) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/StatefulKnowledgeSessionGridClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,433 @@
+package org.drools.grid.distributed;
+
+
+import org.drools.grid.ExecutionNodeService;
+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.event.process.ProcessEventListener;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.runtime.Calendars;
+import org.drools.runtime.Environment;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.ExitPoint;
+import org.drools.runtime.Globals;
+import org.drools.runtime.ObjectFilter;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.runtime.rule.Agenda;
+import org.drools.runtime.rule.AgendaFilter;
+import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.QueryResults;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+import org.drools.grid.command.GetWorkItemManagerCommand;
+import org.drools.grid.command.RegisterRemoteWorkItemHandlerCommand;
+import org.drools.grid.command.StartProcessRemoteCommand;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+import org.drools.time.SessionClock;
+
+
+public class StatefulKnowledgeSessionGridClient
+ implements
+ StatefulKnowledgeSession {
+
+ private GenericNodeConnector nodeConnection;
+ private String instanceId;
+ private MessageSession messageSession;
+
+
+
+
+
+
+ public StatefulKnowledgeSessionGridClient(String instanceId, GenericNodeConnector currentService, MessageSession messageSession) {
+ this.instanceId = instanceId;
+ this.nodeConnection = currentService;
+ this.messageSession = messageSession;
+ }
+
+
+
+
+ public String getInstanceId() {
+ return this.instanceId;
+ }
+
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public int getId() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int fireAllRules() {
+ String commandId = "ksession.fireAllRules" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.getCounter().incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new FireAllRulesCommand( commandId ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ Object object = nodeConnection.write( msg ).getPayload();
+
+ if ( object == null ) {
+ throw new RuntimeException( "Response was not correctly received" );
+ }
+
+ return (Integer) ((ExecutionResults) object).getValue( commandId );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+ }
+
+ public int fireAllRules(int max) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int fireAllRules(AgendaFilter agendaFilter) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public void fireUntilHalt() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void fireUntilHalt(AgendaFilter agendaFilter) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public ExecutionResults execute(Command command) {
+ String commandId = "ksession.execute" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new ExecuteCommand( commandId,
+ command ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object object = nodeConnection.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_" + messageSession.getSessionId();
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ true,
+ new KnowledgeContextResolveFromContextCommand( new GetWorkItemManagerCommand(),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ Object payload = nodeConnection.write( msg ).getPayload();
+ WorkItemManager workItemManager = (WorkItemManager) ((ExecutionResults) payload).getValue( "workItemManager" );
+ ((WorkItemManagerGridClient)workItemManager).setClient(nodeConnection);
+ ((WorkItemManagerGridClient)workItemManager).setMessageSession(messageSession);
+ ((WorkItemManagerGridClient)workItemManager).setInstanceId(instanceId);
+ return workItemManager;
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message", e );
+ }
+ }
+
+ public void registerWorkItemHandler(String name, String workItemHandler){
+
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new RegisterRemoteWorkItemHandlerCommand(name, workItemHandler ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ nodeConnection.write( msg );
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+
+
+ }
+
+ public void signalEvent(String type,
+ Object event) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public ProcessInstance startProcess(String processId) {
+ String commandId = "ksession.execute" + messageSession.getNextId();
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ false,
+ new KnowledgeContextResolveFromContextCommand( new StartProcessRemoteCommand( processId ),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+
+ try {
+ Object object = nodeConnection.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-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/WorkItemManagerGridClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,69 @@
+package org.drools.grid.distributed;
+
+
+import java.io.Serializable;
+import java.util.Map;
+
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.process.CompleteWorkItemCommand;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageSession;
+
+
+/**
+ *
+ * @author Lucas Amador
+ * @author salaboy: salaboy at gmail.com
+ */
+public class WorkItemManagerGridClient implements WorkItemManager, Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ //private GridExecutionNodeConnection nodeConnection;
+ private GenericNodeConnector client;
+ private MessageSession messageSession;
+ private String instanceId;
+
+ public void abortWorkItem(long id) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void completeWorkItem(long id, Map<String, Object> results) {
+ String kresultsId = "kresults_" + messageSession.getSessionId();
+ Message msg = new Message( messageSession.getSessionId(),
+ messageSession.counter.incrementAndGet(),
+ true,
+ new KnowledgeContextResolveFromContextCommand( new CompleteWorkItemCommand(id, results),
+ null,
+ null,
+ instanceId,
+ kresultsId ) );
+ try {
+ client.write( msg );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message", e );
+ }
+ }
+
+ public void registerWorkItemHandler(String workItemName, WorkItemHandler handler) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void setClient(GenericNodeConnector client) {
+ this.client = client;
+ }
+
+ public void setMessageSession(MessageSession messageSession) {
+ this.messageSession = messageSession;
+ }
+
+
+
+ public void setInstanceId(String instanceId) {
+ this.instanceId = instanceId;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/command/NewStatefulKnowledgeSessionGridCommand.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,61 @@
+package org.drools.grid.distributed.command;
+
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.KnowledgeBase;
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.DirectoryNodeService;
+
+
+public class NewStatefulKnowledgeSessionGridCommand
+ implements
+ GenericCommand<StatefulKnowledgeSession> {
+
+ private KnowledgeSessionConfiguration ksessionConf;
+ private String kbaseId;
+
+ public NewStatefulKnowledgeSessionGridCommand(KnowledgeSessionConfiguration ksessionConf) {
+ this.ksessionConf = ksessionConf;
+ }
+
+ public NewStatefulKnowledgeSessionGridCommand(KnowledgeSessionConfiguration ksessionConf, String kbaseId) {
+ this.ksessionConf = ksessionConf;
+ this.kbaseId = kbaseId;
+ }
+
+
+ public StatefulKnowledgeSession execute(Context context) {
+
+ KnowledgeBase kbase = ((KnowledgeCommandContext) context).getKnowledgeBase();
+ DirectoryNodeService registry = (DirectoryNodeService)context.get("registry");
+ System.out.println("Inside Grid Command!!!!!!!!");
+ System.out.println("Registry = "+registry);
+ System.out.println("KbaseId = "+kbaseId);
+ StatefulKnowledgeSession ksession;
+
+ if( kbase == null){
+ try {
+ //@TODO: need to find the best way to injec the service in the command or the command executor.
+ //lookup in the registry service.
+ kbase = registry.lookupKBase(kbaseId);
+ } catch (RemoteException ex) {
+ Logger.getLogger(NewStatefulKnowledgeSessionGridCommand.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ if ( this.ksessionConf == null ) {
+ System.out.println("Kbase inside the newStatefull Session = "+kbase);
+ ksession = kbase.newStatefulKnowledgeSession();
+
+ } else {
+ ksession = kbase.newStatefulKnowledgeSession( this.ksessionConf, null );
+ }
+
+ return ksession;
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/impl/DirectoryNodeServiceImpl.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,107 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.grid.distributed.impl;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.drools.KnowledgeBase;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.GetKnowledgeBaseCommand;
+import org.drools.grid.generic.Message;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.generic.GenericNodeConnector;
+
+
+/**
+ *
+ * @author salaboy
+ */
+public class DirectoryNodeServiceImpl implements DirectoryNodeService{
+
+
+
+ private Map<String, String> directoryMap = new HashMap<String, String>();
+
+ private Map<String, String> kbaseDirectoryMap = new HashMap<String, String>();
+
+ private Iterable<ExecutionNodeService> nodeServices;
+
+ public DirectoryNodeServiceImpl() {
+ nodeServices = new ArrayList<ExecutionNodeService>();
+ }
+
+
+
+ @Override
+ public void register(String sessionId, String sessionServiceId) throws RemoteException {
+ System.out.println("Registering: "+ sessionId + " -- "+sessionServiceId);
+ directoryMap.put(sessionId, sessionServiceId);
+ }
+
+ @Override
+ public GenericNodeConnector lookup(String sessionId) throws RemoteException {
+ ExecutionNodeService sessionService = null;
+ String sessionServiceId = (String)directoryMap.get(sessionId);
+ System.out.println("Registry = "+ directoryMap.toString());
+ System.out.println("Nodes Services = "+nodeServices);
+ for(ExecutionNodeService ss : nodeServices){
+ System.out.println("Session Service id = "+ss.getId() + "needs to match with ="+sessionServiceId);
+ if(ss.getId().equals(sessionServiceId)){
+ sessionService = ss;
+ }
+ }
+
+ return sessionService;
+ }
+
+
+ public void setNodeServices(Iterable<ExecutionNodeService> nodeServices) {
+ this.nodeServices = nodeServices;
+ }
+
+ @Override
+ public void registerKBase(String kbaseId, String nodeServiceId) throws RemoteException {
+ System.out.println("Registering KnowledgeBase = "+kbaseId +" -in NS=" +nodeServiceId);
+ kbaseDirectoryMap.put(kbaseId, nodeServiceId);
+ }
+
+ @Override
+ public KnowledgeBase lookupKBase(String kbaseId) throws RemoteException{
+ ExecutionNodeService nodeService = null;
+ String nodeServiceId = (String)kbaseDirectoryMap.get(kbaseId);
+ System.out.println("Kbase Registry = "+ kbaseDirectoryMap.toString());
+ System.out.println("Session Services = "+nodeService);
+ for(ExecutionNodeService ns : nodeServices){
+ System.out.println("Node Service id = "+ns.getId() + "needs to match with ="+nodeServiceId);
+ if(ns.getId().equals(nodeServiceId)){
+ nodeService = ns;
+ }
+ }
+ System.out.println("Node Service = "+nodeService);
+
+ try {
+ Message msg = nodeService.write(new Message(999,1000,false, new KnowledgeContextResolveFromContextCommand( new GetKnowledgeBaseCommand(), null, kbaseId, null, null)));
+ System.out.println("MSG returned by nodeService = "+msg);
+ if (msg.getPayload() instanceof KnowledgeBase) {
+ System.out.println("Kbase in the payload: "+(KnowledgeBase)msg.getPayload());
+ return (KnowledgeBase)msg.getPayload();
+ }
+ return null;
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to execute message",
+ e );
+ }
+ }
+
+ @Override
+ public void addService(GenericNodeConnector service) {
+ ((List)nodeServices).add(service);
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/impl/ExecutionNodeServiceImpl.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+package org.drools.grid.distributed.impl;
+
+import java.rmi.RemoteException;
+import java.util.UUID;
+
+import org.drools.SystemEventListener;
+import org.drools.SystemEventListenerFactory;
+import org.drools.grid.generic.BlockingGenericIoWriter;
+import org.drools.grid.generic.GenericMessageHandler;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageResponseHandler;
+import org.drools.grid.generic.NodeData;
+import org.drools.grid.distributed.GenericMessageGridHandlerImpl;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.distributed.util.IDEntry;
+
+import org.rioproject.core.jsb.ServiceBeanContext;
+import org.rioproject.watch.GaugeWatch;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ExecutionNodeServiceImpl implements ExecutionNodeService {
+
+ private GenericMessageHandler handler;
+ private String id;
+ private GaugeWatch loadWatch;
+ private Long instanceID;
+
+ public ExecutionNodeServiceImpl() {
+ this.id = UUID.randomUUID().toString();
+ handler = new GenericMessageGridHandlerImpl(new NodeData(), SystemEventListenerFactory.getSystemEventListener());
+ }
+
+ public ExecutionNodeServiceImpl(NodeData data,
+ SystemEventListener systemEventListener) {
+ handler = new GenericMessageGridHandlerImpl(data, systemEventListener);
+ }
+
+ public Message write(Message msg) throws RemoteException {
+ BlockingGenericIoWriter blockingWriter = new BlockingGenericIoWriter();
+ try {
+ handler.messageReceived(blockingWriter, msg);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RemoteException(e.getMessage());
+ }
+
+ return blockingWriter.getMessage();
+ }
+
+ public GenericMessageHandler getGenericMessageHandler() {
+ return this.handler;
+ }
+
+ public void write(Message msg,
+ MessageResponseHandler responseHandler) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setServiceBeanContext(ServiceBeanContext context) {
+ context.addAttribute(new IDEntry(this.id));
+ loadWatch = new GaugeWatch("load");
+ context.getWatchRegistry().register(loadWatch);
+ instanceID = context.getServiceBeanConfig().getInstanceID();
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ @Override
+ public boolean connect() throws RemoteException {
+ //this is always connected if the lookup was successful
+ return true;
+ }
+
+ @Override
+ public void disconnect() throws RemoteException {
+ //we don't need to desconnect the grid
+ }
+
+ @Override
+ public double getLoad() throws RemoteException {
+ return loadWatch.getLastCalculableValue();
+ }
+
+ @Override
+ public void setLoad(double load) throws RemoteException {
+ double last = loadWatch.getLastCalculableValue();
+ loadWatch.addValue(load);
+ boolean verified = loadWatch.getLastCalculableValue() == load;
+ if (!verified)
+ System.err.println(System.currentTimeMillis() + " "+
+ "---> ["+instanceID+"] was [" + loadWatch.getLastCalculableValue() +
+ "], SET FAILED [" + load + "] " +
+ "breached=" +
+ loadWatch.getThresholdManager().getThresholdCrossed());
+ else
+ System.err.println(System.currentTimeMillis() + " "+
+ "---> ["+instanceID+"] Load now [" + load + "] " +
+ "breached=" +
+ loadWatch.getThresholdManager().getThresholdCrossed());
+ }
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/rio/InternalRioNodeConnector.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/rio/InternalRioNodeConnector.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/rio/InternalRioNodeConnector.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,119 @@
+package org.drools.grid.distributed.rio;
+
+
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.net.SocketAddress;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.drools.SystemEventListener;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageResponseHandler;
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.generic.GenericNodeConnector;
+
+
+public class InternalRioNodeConnector
+ implements GenericNodeConnector{
+
+ protected final String name;
+ protected AtomicInteger counter;
+ protected ExecutionNodeService nodeService;
+ protected SocketAddress address;
+ protected SystemEventListener eventListener;
+
+ public InternalRioNodeConnector(String name,
+ SystemEventListener eventListener
+ ) {
+ if ( name == null ) {
+ throw new IllegalArgumentException( "Name can not be null" );
+ }
+ this.name = name;
+ this.counter = new AtomicInteger();
+ this.eventListener = eventListener;
+
+ }
+
+ public InternalRioNodeConnector(String name,
+ SystemEventListener eventListener,
+ ExecutionNodeService nodeService
+ ) {
+ if ( name == null ) {
+ throw new IllegalArgumentException( "Name can not be null" );
+ }
+ this.name = name;
+ this.counter = new AtomicInteger();
+ this.eventListener = eventListener;
+ this.nodeService = nodeService;
+
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.mina.Messenger#connect()
+ */
+ public boolean connect() {
+
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.mina.Messenger#disconnect()
+ */
+ public void disconnect() {
+ //I don't need to be disconected
+ }
+
+ public Message write(Message msg) {
+ if ( nodeService != null ) {
+ try {
+
+ Message returnMessage = this.nodeService.write( msg );
+ return returnMessage;
+
+ } catch ( RemoteException ex ) {
+ Logger.getLogger( InternalRioNodeConnector.class.getName() ).log( Level.SEVERE,
+ null,
+ ex );
+ } catch ( Exception ex ) {
+ Logger.getLogger( InternalRioNodeConnector.class.getName() ).log( Level.SEVERE,
+ null,
+ ex );
+ }
+ }
+ throw new IllegalStateException( "sessionService should not be null" );
+ }
+
+ public void write(Message msg,
+ MessageResponseHandler responseHandler) {
+ throw new UnsupportedOperationException();
+ }
+
+
+ public String getId() {
+ try {
+ return nodeService.getId();
+ } catch (RemoteException ex) {
+ Logger.getLogger(InternalRioNodeConnector.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ return null;
+ }
+
+
+
+
+
+
+ public void setNodeService(Object object) {
+ this.nodeService = (ExecutionNodeService) object;
+ try {
+ System.out.println("Setting Node Service = " + nodeService.getId());
+ } catch (RemoteException ex) {
+ Logger.getLogger(InternalRioNodeConnector.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/main/java/org/drools/grid/distributed/util/IDEntry.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,22 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.grid.distributed.util;
+
+/**
+ *
+ * @author salaboy
+ */
+public class IDEntry extends net.jini.entry.AbstractEntry{
+ public String id;
+
+ public IDEntry() {
+ super();
+ }
+
+ public IDEntry(String id) {
+ this. id = id;
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/manager-config.groovy
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/manager-config.groovy (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/manager-config.groovy 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,53 @@
+/*
+ * Copyright to the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.rioproject.config.Constants
+
+/*
+* Configuration properties for the Gnostic
+*/
+manager {
+ execClassPath =
+ '${RIO_HOME}${/}lib${/}boot.jar${:}${RIO_HOME}${/}lib/${/}start.jar${:}${JAVA_HOME}${/}lib${/}tools.jar${:}${RIO_HOME}${/}lib${/}groovy-all.jar'
+
+ inheritOptions = true
+
+ jvmOptions = '''
+ -XX:+UseConcMarkSweepGC -XX:+AggressiveOpts
+ -Djava.security.policy=${RIO_HOME}${/}policy${/}policy.all
+ -DRIO_HOME=${RIO_HOME} -Dorg.rioproject.groups=${org.rioproject.groups}'''
+
+ mainClass = 'com.sun.jini.start.ServiceStarter'
+
+ /* The ${service} token will be replaced by the name of the starter file.
+ * For start-reggie the service name will be reggie, for start-monitor the
+ * service name will be monitor, etc ... */
+ String logExt = System.getProperty(Constants.GROUPS_PROPERTY_NAME,
+ System.getProperty('user.name'))
+ String logDir = '/tmp/logs/rio/'
+ String opSys = System.getProperty('os.name')
+ if(opSys.startsWith("Windows"))
+ logDir = '${java.io.tmpdir}/logs/rio/'
+ log = logDir + logExt + '/${service}.log'
+
+ /*
+ * Remove any previously created service log files
+ */
+ cleanLogs = true
+
+ monitorStarter = '${user.dir}${/}src${/}test${/}conf${/}start-monitor.groovy'
+ cybernodeStarter = '${RIO_HOME}/config/start-cybernode.groovy'
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/start-monitor.groovy
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/start-monitor.groovy (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/start-monitor.groovy 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,38 @@
+/*
+ * This configuration is used by the com.sun.jini.start utility to start a
+ * ProvisionMonitor, including an embedded Webster
+ */
+
+import org.rioproject.config.Component
+
+import org.rioproject.boot.ServiceDescriptorUtil;
+import com.sun.jini.start.ServiceDescriptor;
+
+ at Component('com.sun.jini.start')
+class StartMonitorConfig {
+
+ ServiceDescriptor[] getServiceDescriptors() {
+ String m2Home = "${System.getProperty("user.home")}/.m2"
+ String rioHome = System.getProperty('RIO_HOME')
+ String cwd = System.getProperty('user.dir')
+ println "\n********\n$cwd\n********"
+
+ def websterRoots = [rioHome+'/lib-dl', ';',
+ rioHome+'/lib', ';',
+ m2Home+'/repository', ';',
+ cwd+'/target/']
+
+ String policyFile = rioHome+'/policy/policy.all'
+ String monitorConfig = rioHome+'/config/monitor.groovy'
+ String reggieConfig = rioHome+'/config/reggie.groovy'
+
+ def serviceDescriptors = [
+ ServiceDescriptorUtil.getWebster(policyFile, '0', (String[])websterRoots),
+ ServiceDescriptorUtil.getLookup(policyFile, reggieConfig),
+ ServiceDescriptorUtil.getMonitor(policyFile, monitorConfig)
+ ]
+
+ return (ServiceDescriptor[])serviceDescriptors
+ }
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/test-config.groovy
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/test-config.groovy (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/conf/test-config.groovy 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,13 @@
+/*
+ * Configuration file for integration test cases
+ */
+ITGridExecutionTest {
+ groups = "ITGridExecutionTest"
+ numCybernodes = 1
+ numMonitors = 1
+ //numLookups = 1
+ opstring = 'src/test/resources/org/drools/executionNodeService.groovy'
+ autoDeploy = true
+ //harvest = true
+}
+
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/grid/distributed/ExecutionNodeBaseTest.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,342 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.distributed;
+
+
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.ExecutionNode;
+import java.rmi.RemoteException;
+import java.util.List;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.builder.ResourceType;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.distributed.GridConnection;
+import org.drools.grid.strategies.StaticIncrementalSelectionStrategy;
+import org.junit.Assert;
+import org.junit.Test;
+/**
+ *
+ * @author salaboy
+ */
+
+public abstract class ExecutionNodeBaseTest {
+
+ protected ExecutionNode node;
+ protected GridConnection connection = new GridConnection();
+ public ExecutionNodeBaseTest() {
+
+ }
+
+
+ @Test
+ public void fireAllRules(){
+ StaticIncrementalSelectionStrategy.counter = 0;
+ String str = "";
+ str += "package org.drools \n";
+ str += "global java.util.List list \n";
+ str += "rule rule1 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello1!!!\" ); \n";
+ str += "end \n";
+ str += "rule rule2 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello2!!!\" ); \n";
+ str += "end \n";
+
+ Assert.assertNotNull(node);
+
+ KnowledgeBuilder kbuilder =
+ node.get(KnowledgeBuilderFactoryService.class)
+ .newKnowledgeBuilder();
+ Assert.assertNotNull(kbuilder);
+
+ kbuilder.add( ResourceFactory
+ .newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( "Errors: " + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase =
+ node.get(KnowledgeBaseFactoryService.class)
+ .newKnowledgeBase();
+ Assert.assertNotNull(kbase);
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession ksession =
+ kbase.newStatefulKnowledgeSession();
+ Assert.assertNotNull(ksession);
+
+ int fired = ksession.fireAllRules();
+ Assert.assertEquals( 2, fired );
+
+
+ }
+
+ @Test
+ public void testExecute() throws Exception {
+ StaticIncrementalSelectionStrategy.counter = 0;
+ String str = "";
+ str += "package org.drools \n";
+ str += "global java.util.List list \n";
+ str += "rule rule1 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello1!!!\" ); \n";
+ str += "end \n";
+ str += "rule rule2 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello2!!!\" ); \n";
+ str += "end \n";
+
+ Assert.assertNotNull(node);
+
+ KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+ Assert.assertNotNull(kbuilder);
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( "Errors: " + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+ Assert.assertNotNull(kbase);
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ ExecutionResults results = ksession.execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2,
+ (int) (Integer) results.getValue( "fired" ) );
+ }
+
+ @Test
+ public void testVsmPipeline() throws Exception {
+ StaticIncrementalSelectionStrategy.counter = 0;
+ String str = "";
+ str += "package org.drools \n";
+ str += "global java.util.List list \n";
+ str += "rule rule1 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello3!!!\" ); \n";
+ str += "end \n";
+ str += "rule rule2 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello4!!!\" ); \n";
+ str += "end \n";
+
+ Assert.assertNotNull(node);
+
+ KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+ Assert.assertNotNull(kbuilder);
+
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( "Errors: " + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+ Assert.assertNotNull(kbase);
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ node.get(DirectoryLookupFactoryService.class).register( "ksession1", ksession );
+
+ ExecutionResults results = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2, (int ) ( Integer) results.getValue( "fired" ) );
+ }
+
+ @Test
+ public void testNamedService() throws Exception {
+ StaticIncrementalSelectionStrategy.counter = 1;
+ System.out.println("Running ===============> testNamedService");
+ String str = "";
+ str += "package org.drools \n";
+ str += "global java.util.List list \n";
+ str += "rule rule1 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello1!!!\" ); \n";
+ str += "end \n";
+ str += "rule rule2 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello2!!!\" ); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+ Assert.assertNotNull(kbuilder);
+
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( "Errors: " + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+ Assert.assertNotNull(kbase);
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ System.out.println("registering a session!!!!!!!");
+ node.get(DirectoryLookupFactoryService.class).register( "ksession1",
+ ksession );
+ System.out.println("Lookup ksession1!!!!!!!!!!!!!");
+ ExecutionResults results = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2,
+ (int) (Integer) results.getValue( "fired" ) );
+ System.out.println("TEst ENDED =========>");
+ }
+ @Test
+ public void twoSessionsIntoDifferentSessionServices() throws RemoteException{
+ StaticIncrementalSelectionStrategy.counter = 0;
+ String str = "";
+ str += "package org.drools \n";
+ str += "global java.util.List list \n";
+ str += "rule rule1 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello1!!!\" ); \n";
+ str += "end \n";
+ str += "rule rule2 \n";
+ str += " dialect \"java\" \n";
+ str += "when \n";
+ str += "then \n";
+ str += " System.out.println( \"hello2!!!\" ); \n";
+ str += "end \n";
+
+ KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+ Assert.assertNotNull(kbuilder);
+
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( "Errors: " + kbuilder.getErrors() );
+ }
+
+ KnowledgeBase kbase = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+ Assert.assertNotNull(kbase);
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession ksession1 = kbase.newStatefulKnowledgeSession();
+ System.out.println("registering ksession1!");
+ node.get(DirectoryLookupFactoryService.class).register( "ksession1", ksession1 );
+
+ System.out.println("Let's go for the Second ksession");
+ //Switching to another node
+ node = connection.getExecutionNode(null);
+
+ KnowledgeBuilder kbuilder2 = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+ Assert.assertNotNull(kbuilder2);
+
+ kbuilder2.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( kbuilder2.hasErrors() ) {
+ System.out.println( "Errors: " + kbuilder2.getErrors() );
+ }
+
+
+ KnowledgeBase kbase2 = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+ Assert.assertNotNull(kbase2);
+
+
+ kbase2.addKnowledgePackages( kbuilder2.getKnowledgePackages() );
+
+ StatefulKnowledgeSession ksession2 = kbase2.newStatefulKnowledgeSession();
+ System.out.println("registering ksession2!");
+ node.get(DirectoryLookupFactoryService.class).register( "ksession2", ksession2 );
+
+ System.out.println("Lookuping up ksession1 !");
+ ExecutionResults results1 = node.get(DirectoryLookupFactoryService.class).lookup( "ksession1" ).execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2,
+ (int) (Integer) results1.getValue( "fired" ) );
+
+ System.out.println("Lookuping up ksession2 !");
+ ExecutionResults results2 = node.get(DirectoryLookupFactoryService.class).lookup( "ksession2" ).execute( new FireAllRulesCommand( "fired" ) );
+
+ Assert.assertEquals( 2,
+ (int) (Integer) results2.getValue( "fired" ) );
+
+ }
+
+ @Test
+ public void scalingUp(){
+ for(int i=1; i<20; i++) {
+ List<GenericNodeConnector> services = connection.getNodeConnectors();
+ for(GenericNodeConnector serviceConnector : services) {
+ if(serviceConnector instanceof ExecutionNodeService){
+ Throwable thrown = null;
+ try {
+ double d = ((ExecutionNodeService)serviceConnector).getLoad();
+ if(d<80)
+ ((ExecutionNodeService)serviceConnector).setLoad(d+10);
+ else
+ ((ExecutionNodeService)serviceConnector).setLoad(d);
+ Thread.sleep(5000);
+ } catch (Exception e) {
+ thrown = e;
+ }
+ Assert.assertNull(thrown);
+ }
+ }
+ }
+
+ }
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/java/org/drools/grid/distributed/ITGridExecutionTest.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,68 @@
+package org.drools.grid.distributed;
+
+import org.drools.grid.ExecutionNodeService;
+import org.drools.grid.DirectoryNodeService;
+import org.drools.grid.AcceptorService;
+import java.util.Iterator;
+import junit.framework.Assert;
+
+import net.jini.core.lookup.ServiceItem;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.junit.After;
+
+
+
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.rioproject.gnostic.Gnostic;
+import org.rioproject.test.RioTestRunner;
+import org.rioproject.test.SetTestManager;
+import org.rioproject.test.TestManager;
+
+ at RunWith(RioTestRunner.class)
+public class ITGridExecutionTest extends ExecutionNodeBaseTest {
+
+ AcceptorService server;
+ @SetTestManager
+ static TestManager testManager;
+
+ @Before
+ public void setUp() throws Exception {
+
+ Assert.assertNotNull(testManager);
+ //setup all the services using the Rio Test Framework
+ //In real scenarios all this code will happen inside the connection.connect() method
+ ExecutionNodeService nodeService = (ExecutionNodeService) testManager.waitForService(ExecutionNodeService.class);
+ ServiceItem[] nodeServiceItems = testManager.getServiceItems(ExecutionNodeService.class);
+ System.out.println("Node Service Items =" + nodeServiceItems.length);
+ DirectoryNodeService directoryService = (DirectoryNodeService) testManager.waitForService(DirectoryNodeService.class);
+ Assert.assertNotNull(directoryService);
+ Gnostic service = (Gnostic)testManager.waitForService(Gnostic.class);
+
+ connection.addDirectoryNode(directoryService);
+
+ for (int i = 0; i < nodeServiceItems.length; i++) {
+ if (nodeServiceItems[i].service instanceof ExecutionNodeService) {
+ connection.addNodeConnector((ExecutionNodeService) nodeServiceItems[i].service);
+ }
+ }
+
+ //Get an execution node using the default/round robin strategy
+ node = connection.getExecutionNode(null);
+ System.out.println("Node = "+ node);
+
+
+ }
+ @After
+ public void tearDown() throws Exception {
+ Iterator<GenericNodeConnector> iterator = connection.getNodeConnectors().iterator();
+ while(iterator.hasNext()){
+ iterator.next().disconnect();
+ }
+ Iterator<DirectoryNodeService> iterator1 = connection.getDirectories().iterator();
+ while(iterator.hasNext()){
+ iterator.next().disconnect();
+ }
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/resources/org/drools/executionNodeService.groovy
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/resources/org/drools/executionNodeService.groovy (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-rio/src/test/resources/org/drools/executionNodeService.groovy 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,76 @@
+import org.rioproject.config.Constants
+import java.util.logging.Level
+
+import org.rioproject.resources.servicecore.Service
+
+deployment(name:'executionNodeService', debug: 'true') {
+
+ logging {
+ logger 'org.rioproject.resolver', Level.FINE
+ }
+ /* Configuration for the discovery group that the service should join.
+ * This first checks if the org.rioproject.groups property is set, if not
+ * the user name is used */
+ groups System.getProperty(Constants.GROUPS_PROPERTY_NAME,
+ System.getProperty('user.name'))
+
+ /* Declares the artifacts required for deployment. Note the 'dl'
+ * classifier used for the 'download' jar */
+ artifact id:'service', 'org.drools:drools-grid-rio:5.1.0.SNAPSHOT'
+ artifact id:'service-dl', 'org.drools:drools-grid-rio:dl:5.1.0.SNAPSHOT'
+
+ /*
+ * Declare the service to be deployed. The number of instances deployed
+ * defaults to 1. If you require > 1 instances change as needed
+ */
+ service(name: 'ExecutionNodeService') {
+ interfaces {
+ classes 'org.drools.grid.ExecutionNodeService'
+ artifact ref:'service-dl'
+ }
+ implementation(class:'org.drools.grid.distributed.impl.ExecutionNodeServiceImpl') {
+ artifact ref:'service'
+ }
+ sla(id:'load', low:10, high: 30) {
+ rule resource: 'ScalingRuleHandler', max:5
+ }
+ maintain 2
+ }
+ service(name: 'DirectoryNodeService') {
+ interfaces {
+ classes 'org.drools.grid.DirectoryNodeService'
+ artifact ref:'service-dl'
+ }
+ implementation(class:'org.drools.grid.distributed.impl.DirectoryNodeServiceImpl') {
+ artifact ref:'service'
+ }
+
+ association (name:'ExecutionNodeService', type:'uses', property:'nodeServices')
+
+ maintain 1
+ }
+
+ service(name: 'Gnostic') {
+ interfaces {
+ classes 'org.rioproject.gnostic.Gnostic'
+ artifact ref: 'service-dl'
+ }
+ implementation(class: 'org.rioproject.gnostic.GnosticImpl') {
+ artifact ref: 'service'
+ }
+
+ parameters {
+ parameter name: "create-core-associations", value: "yes"
+ }
+
+ associations {
+ ['ExecutionNodeService'].each {
+ association name: "$it",
+ type: 'uses', property: 'service',
+ serviceType: Service.name
+ }
+ }
+ maintain 1
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/pom.xml (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/pom.xml 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,79 @@
+<?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>
+
+ <artifactId>drools-grid-task</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+
+ <name>Drools :: Grid :: Task</name>
+ <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>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-compiler</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>
+ <version>5.1.0.SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-grid-core</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+
+ </dependency>
+
+
+ <!-- DB H2 -->
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <version>1.2.128</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/CommandBasedServicesWSHumanTaskHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/CommandBasedServicesWSHumanTaskHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/CommandBasedServicesWSHumanTaskHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,382 @@
+package org.drools.grid.task;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.SystemEventListenerFactory;
+import org.drools.eventmessaging.EventKey;
+import org.drools.eventmessaging.Payload;
+import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.grid.remote.mina.MinaNodeConnector;
+import org.drools.grid.remote.mina.MinaIoHandler;
+import org.drools.task.AccessType;
+import org.drools.task.Content;
+import org.drools.task.Group;
+import org.drools.task.I18NText;
+import org.drools.task.OrganizationalEntity;
+import org.drools.task.PeopleAssignments;
+import org.drools.task.SubTasksStrategy;
+import org.drools.task.SubTasksStrategyFactory;
+import org.drools.task.Task;
+import org.drools.task.TaskData;
+import org.drools.task.User;
+import org.drools.task.event.TaskCompletedEvent;
+import org.drools.task.event.TaskEvent;
+import org.drools.task.event.TaskEventKey;
+import org.drools.task.event.TaskFailedEvent;
+import org.drools.task.event.TaskSkippedEvent;
+import org.drools.task.service.Command;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.responsehandlers.AbstractBaseResponseHandler;
+
+import org.drools.grid.task.TaskClientMessageHandlerImpl.AddTaskMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.GetContentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.GetTaskMessageResponseHandler;
+import org.drools.grid.task.eventmessaging.EventMessageResponseHandler;
+
+/**
+ * @author salaboy
+ * @author Lucas Amador
+ *
+ */
+
+public class CommandBasedServicesWSHumanTaskHandler implements WorkItemHandler {
+
+ private String ipAddress = "127.0.0.1";
+ private int port = 9124;
+ private SocketAddress address;
+ private GenericNodeConnector connector;
+ private HumanTaskServiceImpl client;
+ private KnowledgeRuntime session;
+ private Map<Long, Long> idMapping = new HashMap<Long, Long>();
+ private Map<Long, WorkItemManager> managers = new HashMap<Long, WorkItemManager>();
+
+ public CommandBasedServicesWSHumanTaskHandler(KnowledgeRuntime session) {
+ this.session = session;
+ this.address = new InetSocketAddress(ipAddress, port);
+ }
+
+ public void connect() throws RemoteException {
+ if (connector == null) {
+ NioSocketConnector htclientConnector = new NioSocketConnector();
+ htclientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener()));
+ connector = new MinaNodeConnector("client ht",
+ htclientConnector,
+ this.address,
+ SystemEventListenerFactory.getSystemEventListener());
+ boolean connected = connector.connect();
+ if (!connected) {
+ throw new IllegalArgumentException("Could not connect task client");
+ }
+ int id = ((StatefulKnowledgeSession) session).getId();
+ client = new HumanTaskServiceImpl(connector, id);
+ }
+ }
+
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ try {
+ connect();
+ } catch (RemoteException ex) {
+ Logger.getLogger(CommandBasedServicesWSHumanTaskHandler.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ Task task = new Task();
+ String taskName = (String) workItem.getParameter("TaskName");
+ if (taskName != null) {
+ List<I18NText> names = new ArrayList<I18NText>();
+ names.add(new I18NText("en-UK", taskName));
+ task.setNames(names);
+ }
+ String comment = (String) workItem.getParameter("Comment");
+ if (comment != null) {
+ List<I18NText> descriptions = new ArrayList<I18NText>();
+ descriptions.add(new I18NText("en-UK", comment));
+ task.setDescriptions(descriptions);
+ List<I18NText> subjects = new ArrayList<I18NText>();
+ subjects.add(new I18NText("en-UK", comment));
+ task.setSubjects(subjects);
+ }
+ String priorityString = (String) workItem.getParameter("Priority");
+ int priority = 0;
+ if (priorityString != null) {
+ try {
+ priority = new Integer(priorityString);
+ } catch (NumberFormatException e) {
+ // do nothing
+ }
+ }
+ task.setPriority(priority);
+
+ TaskData taskData = new TaskData();
+ taskData.setWorkItemId(workItem.getId());
+ taskData.setSkipable(!"false".equals(workItem.getParameter("Skippable")));
+ //Sub Task Data
+ Long parentId = (Long) workItem.getParameter("ParentId");
+ if (parentId != null) {
+ taskData.setParentId(parentId);
+ }
+
+ String subTaskStrategiesCommaSeparated = (String) workItem.getParameter("SubTaskStrategies");
+ if (subTaskStrategiesCommaSeparated != null && !subTaskStrategiesCommaSeparated.equals("")) {
+ String[] subTaskStrategies = subTaskStrategiesCommaSeparated.split(",");
+ List<SubTasksStrategy> strategies = new ArrayList<SubTasksStrategy>();
+ for (String subTaskStrategyString : subTaskStrategies) {
+ SubTasksStrategy subTaskStrategy = SubTasksStrategyFactory.newStrategy(subTaskStrategyString);
+ strategies.add(subTaskStrategy);
+ }
+ task.setSubTaskStrategies(strategies);
+ }
+
+ PeopleAssignments assignments = new PeopleAssignments();
+ List<OrganizationalEntity> potentialOwners = new ArrayList<OrganizationalEntity>();
+
+ String actorId = (String) workItem.getParameter("ActorId");
+ if (actorId != null) {
+
+ String[] actorIds = actorId.split(",");
+ for (String id : actorIds) {
+ User user = new User();
+ user.setId(id.trim());
+ potentialOwners.add(user);
+ }
+ //Set the first user as creator ID??? hmmm might be wrong
+ if (potentialOwners.size() > 0) {
+ taskData.setCreatedBy((User) potentialOwners.get(0));
+ }
+ }
+ String groupId = (String) workItem.getParameter("GroupId");
+ if (groupId != null) {
+
+ String[] groupIds = groupId.split(",");
+ for (String id : groupIds) {
+
+ potentialOwners.add(new Group(id));
+ }
+
+ }
+
+ assignments.setPotentialOwners(potentialOwners);
+ List<OrganizationalEntity> businessAdministrators = new ArrayList<OrganizationalEntity>();
+ businessAdministrators.add(new User("Administrator"));
+ assignments.setBusinessAdministrators(businessAdministrators);
+ task.setPeopleAssignments(assignments);
+
+ task.setTaskData(taskData);
+
+ ContentData content = null;
+ Object contentObject = workItem.getParameter("Content");
+ if (contentObject != null) {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutputStream out;
+ try {
+ out = new ObjectOutputStream(bos);
+ out.writeObject(contentObject);
+ out.close();
+ content = new ContentData();
+ content.setContent(bos.toByteArray());
+ content.setAccessType(AccessType.Inline);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ TaskWorkItemAddTaskMessageResponseHandler taskResponseHandler =
+ new TaskWorkItemAddTaskMessageResponseHandler(workItem.getId(), this.managers, idMapping, manager);
+ client.addTask(task, content, taskResponseHandler);
+ }
+
+ public void dispose() throws RemoteException {
+ if (connector != null) {
+ connector.disconnect();
+ }
+ }
+
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ Long taskId = idMapping.get(workItem.getId());
+ if (taskId != null) {
+ synchronized (idMapping) {
+ idMapping.remove(taskId);
+ }
+ synchronized (managers) {
+ managers.remove(taskId);
+ }
+ client.skip(taskId, "Administrator", null);
+ }
+ }
+
+ public class TaskWorkItemAddTaskMessageResponseHandler extends AbstractBaseResponseHandler implements AddTaskMessageResponseHandler {
+
+ private Map<Long, WorkItemManager> managers;
+ private Map<Long, Long> idMapping;
+ private WorkItemManager manager;
+ private long workItemId;
+
+ public TaskWorkItemAddTaskMessageResponseHandler(long workItemId,
+ Map<Long, WorkItemManager> managers, Map<Long, Long> idMapping,
+ WorkItemManager manager) {
+ this.workItemId = workItemId;
+ this.managers = managers;
+ this.idMapping = idMapping;
+ this.manager = manager;
+ }
+
+ public void execute(long taskId) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void receive(Message message) {
+ Command command = (Command) message.getPayload();
+ Long taskId = (Long) command.getArguments().get(0);
+
+ synchronized (managers) {
+ managers.put(taskId, this.manager);
+ }
+ synchronized (idMapping) {
+ idMapping.put(workItemId, taskId);
+ }
+ System.out.println("Created task " + taskId + " for work item " + workItemId);
+
+ EventKey key = new TaskEventKey(TaskCompletedEvent.class, taskId);
+ TaskCompletedMessageHandler eventResponseHandler = new TaskCompletedMessageHandler(workItemId, taskId, managers);
+ client.registerForEvent(key, true, eventResponseHandler);
+ key = new TaskEventKey(TaskFailedEvent.class, taskId);
+ client.registerForEvent(key, true, eventResponseHandler);
+ key = new TaskEventKey(TaskSkippedEvent.class, taskId);
+ client.registerForEvent(key, true, eventResponseHandler);
+ }
+ }
+
+ private class TaskCompletedMessageHandler extends AbstractBaseResponseHandler implements EventMessageResponseHandler {
+
+ private long workItemId;
+ private long taskId;
+ private final Map<Long, WorkItemManager> managers;
+
+ public TaskCompletedMessageHandler(long workItemId, long taskId, Map<Long, WorkItemManager> managers) {
+ this.workItemId = workItemId;
+ this.taskId = taskId;
+ this.managers = managers;
+ }
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ Payload payload = (Payload) cmd.getArguments().get(0);
+ TaskEvent event = (TaskEvent) payload.get();
+ if (event.getTaskId() != taskId) {
+ // defensive check that should never happen, just here for testing
+ setError(new IllegalStateException("Expected task id and arrived task id do not march"));
+ return;
+ }
+ if (event instanceof TaskCompletedEvent) {
+ synchronized (this.managers) {
+ WorkItemManager manager = this.managers.get(taskId);
+ if (manager != null) {
+ GetCompletedTaskMessageResponseHandler getTaskResponseHandler = new GetCompletedTaskMessageResponseHandler(manager);
+ client.getTask(taskId, getTaskResponseHandler);
+ }
+ }
+ } else {
+ synchronized (this.managers) {
+ WorkItemManager manager = this.managers.get(taskId);
+ if (manager != null) {
+ manager.abortWorkItem(workItemId);
+ }
+ }
+ }
+ }
+
+ public void execute(Payload payload) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+
+ private class GetCompletedTaskMessageResponseHandler extends AbstractBaseResponseHandler implements GetTaskMessageResponseHandler {
+
+ private WorkItemManager manager;
+
+ public GetCompletedTaskMessageResponseHandler(WorkItemManager manager) {
+ this.manager = manager;
+ }
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ Task task = (Task) cmd.getArguments().get(0);
+ long workItemId = task.getTaskData().getWorkItemId();
+ String userId = task.getTaskData().getActualOwner().getId();
+ Map<String, Object> results = new HashMap<String, Object>();
+ results.put("ActorId", userId);
+ long contentId = task.getTaskData().getOutputContentId();
+ if (contentId != -1) {
+ GetResultContentMessageResponseHandler getContentResponseHandler =
+ new GetResultContentMessageResponseHandler(manager, task, results);
+ client.getContent(contentId, getContentResponseHandler);
+ } else {
+ manager.completeWorkItem(workItemId, results);
+ }
+ }
+
+ public void execute(Task task) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+
+ private class GetResultContentMessageResponseHandler extends AbstractBaseResponseHandler implements GetContentMessageResponseHandler {
+
+ private Task task;
+ private final WorkItemManager manager;
+ private Map<String, Object> results;
+
+ public GetResultContentMessageResponseHandler(WorkItemManager manager, Task task, Map<String, Object> results) {
+ this.manager = manager;
+ this.task = task;
+ this.results = results;
+ }
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ Content content = (Content) cmd.getArguments().get(0);
+ ByteArrayInputStream bis = new ByteArrayInputStream(content.getContent());
+ ObjectInputStream in;
+ try {
+ in = new ObjectInputStream(bis);
+ Object result = in.readObject();
+ in.close();
+ results.put("Result", result);
+ if (result instanceof Map) {
+ Map<?, ?> map = (Map) result;
+ for (Map.Entry<?, ?> entry : map.entrySet()) {
+ if (entry.getKey() instanceof String) {
+ results.put((String) entry.getKey(), entry.getValue());
+ }
+ }
+ }
+ manager.completeWorkItem(task.getTaskData().getWorkItemId(), results);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void execute(Content content) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/GenericEventTransport.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/GenericEventTransport.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/GenericEventTransport.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,42 @@
+package org.drools.grid.task;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+import org.drools.eventmessaging.EventTriggerTransport;
+import org.drools.eventmessaging.Payload;
+import org.drools.grid.generic.GenericIoWriter;
+import org.drools.grid.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.CommandName;
+
+public class GenericEventTransport implements EventTriggerTransport {
+ private String uuid;
+ private Map<String, GenericIoWriter> sessions;
+ private int responseId;
+ private boolean remove;
+
+ GenericEventTransport(String uuid, int responseId, Map<String, GenericIoWriter> sessions, boolean remove) {
+ this.uuid = uuid;
+ this.responseId = responseId;
+ this.sessions = sessions;
+ this.remove = remove;
+ }
+
+ public void trigger(Payload payload) {
+ GenericIoWriter session = sessions.get( uuid );
+ List args = new ArrayList( 1 );
+ args.add( payload );
+ Command resultsCmnd = new Command( responseId, CommandName.EventTriggerResponse, args);
+ session.write(new Message(Integer.parseInt(uuid),
+ responseId,
+ false,
+ resultsCmnd ), null);
+ }
+
+ public boolean isRemove() {
+ return this.remove;
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskFactoryService.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskFactoryService.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskFactoryService.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,14 @@
+package org.drools.grid.task;
+
+import org.drools.Service;
+import org.drools.grid.generic.GenericNodeConnector;
+
+
+
+
+public interface HumanTaskFactoryService extends Service {
+ public HumanTaskService newHumanTaskService();
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskService.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskService.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskService.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,59 @@
+package org.drools.grid.task;
+
+import java.util.List;
+
+import org.drools.eventmessaging.EventKey;
+
+import org.drools.grid.task.TaskClientMessageHandlerImpl.AddAttachmentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.AddCommentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.AddTaskMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.DeleteAttachmentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.DeleteCommentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.GetContentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.GetTaskMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.SetDocumentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.TaskOperationMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.TaskSummaryMessageResponseHandler;
+import org.drools.grid.task.eventmessaging.EventMessageResponseHandler;
+import org.drools.task.Attachment;
+import org.drools.task.Comment;
+import org.drools.task.Content;
+import org.drools.task.Task;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.FaultData;
+
+
+public interface HumanTaskService {
+ public void addTask(Task task, ContentData content, AddTaskMessageResponseHandler responseHandler);
+ public Task getTask(long taskId, GetTaskMessageResponseHandler responseHandler);
+ public void addComment(long taskId, Comment comment, AddCommentMessageResponseHandler responseHandler);
+ public void deleteComment(long taskId, long commentId, DeleteCommentMessageResponseHandler responseHandler);
+ public void addAttachment(long taskId, Attachment attachment, Content content, AddAttachmentMessageResponseHandler responseHandler);
+ public void deleteAttachment(long taskId, long attachmentId, long contentId, DeleteAttachmentMessageResponseHandler responseHandler );
+ public void setDocumentContent(long taskId, Content content, SetDocumentMessageResponseHandler responseHandler);
+ public void getContent(long contentId, GetContentMessageResponseHandler responseHandler);
+ public void claim(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+ public void start(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+ public void stop(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+ public void release(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+ public void suspend(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+ public void resume(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+ public void skip(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+ public void delegate(long taskId, String userId, String targetUserId, TaskOperationMessageResponseHandler responseHandler);
+ public void forward(long taskId, String userId, String targetEntityId, TaskOperationMessageResponseHandler responseHandler) ;
+ public void complete(long taskId, String userId, ContentData outputData, TaskOperationMessageResponseHandler responseHandler) ;
+ public void fail(long taskId, String userId, FaultData faultData, TaskOperationMessageResponseHandler responseHandler);
+ public void getTasksOwned(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+ public void getTasksAssignedAsBusinessAdministrator(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+ public void getTasksAssignedAsExcludedOwner(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+ public void getTasksAssignedAsPotentialOwner(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+ public void getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, String language, TaskSummaryMessageResponseHandler responseHandler);
+ public void getSubTasksAssignedAsPotentialOwner(long parentId, String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+ public void getSubTasksByParent(long parentId, TaskSummaryMessageResponseHandler responseHandler);
+ public void getTasksAssignedAsRecipient(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+ public void getTasksAssignedAsTaskInitiator(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+ public void getTasksAssignedAsTaskStakeholder(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+ public void registerForEvent(EventKey key, boolean remove, EventMessageResponseHandler responseHandler);
+ public boolean connect();
+ public void disconnect();
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskServiceImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskServiceImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskServiceImpl.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,424 @@
+package org.drools.grid.task;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.drools.eventmessaging.EventKey;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.Message;
+import org.drools.task.Attachment;
+import org.drools.task.Comment;
+import org.drools.task.Content;
+import org.drools.task.Task;
+import org.drools.task.service.Command;
+import org.drools.task.service.CommandName;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.FaultData;
+import org.drools.task.service.Operation;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.AddAttachmentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.AddCommentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.AddTaskMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.DeleteAttachmentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.DeleteCommentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.GetContentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.GetTaskMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.SetDocumentMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.TaskOperationMessageResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.TaskSummaryMessageResponseHandler;
+import org.drools.grid.task.eventmessaging.EventMessageResponseHandler;
+
+/**
+ * @author salaboy
+ * @author Lucas Amador
+ *
+ */
+public class HumanTaskServiceImpl implements HumanTaskService {
+
+ private final GenericNodeConnector client;
+ private final AtomicInteger counter;
+ private int sessionId;
+ private String clientName;
+
+ public HumanTaskServiceImpl(GenericNodeConnector client, int sessionId) {
+ this.client = client;
+ this.counter = new AtomicInteger();
+ this.clientName = String.valueOf(sessionId);
+ this.sessionId = sessionId;
+
+ }
+
+ @Override
+ public boolean connect() {
+ try {
+ return this.client.connect();
+ } catch (RemoteException ex) {
+ Logger.getLogger(HumanTaskServiceImpl.class.getName()).log(Level.SEVERE, null, ex);
+ return false;
+ }
+
+ }
+
+ public void disconnect() {
+ try {
+ this.client.disconnect();
+ } catch (RemoteException ex) {
+ Logger.getLogger(HumanTaskServiceImpl.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
+ public void addTask(Task task, ContentData content, AddTaskMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(task);
+ args.add(content);
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.AddTaskRequest, args);
+
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public Task getTask(long taskId, GetTaskMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(1);
+ args.add(taskId);
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.GetTaskRequest, args);
+
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+ client.write(msg, responseHandler);
+ return null;
+ }
+
+ public void addComment(long taskId, Comment comment, AddCommentMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(taskId);
+ args.add(comment);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.AddCommentRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void deleteComment(long taskId, long commentId, DeleteCommentMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(taskId);
+ args.add(commentId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.DeleteCommentRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void addAttachment(long taskId, Attachment attachment, Content content, AddAttachmentMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(3);
+ args.add(taskId);
+ args.add(attachment);
+ args.add(content);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.AddAttachmentRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void deleteAttachment(long taskId, long attachmentId, long contentId, DeleteAttachmentMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(3);
+ args.add(taskId);
+ args.add(attachmentId);
+ args.add(contentId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.DeleteAttachmentRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void setDocumentContent(long taskId, Content content, SetDocumentMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(taskId);
+ args.add(content);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.SetDocumentContentRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getContent(long contentId, GetContentMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(1);
+ args.add(contentId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.GetContentRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void claim(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(3);
+ args.add(Operation.Claim);
+ args.add(taskId);
+ args.add(userId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void start(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(3);
+ args.add(Operation.Start);
+ args.add(taskId);
+ args.add(userId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void stop(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(3);
+ args.add(Operation.Stop);
+ args.add(taskId);
+ args.add(userId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void release(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(3);
+ args.add(Operation.Release);
+ args.add(taskId);
+ args.add(userId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void suspend(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(3);
+ args.add(Operation.Suspend);
+ args.add(taskId);
+ args.add(userId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void resume(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(3);
+ args.add(Operation.Resume);
+ args.add(taskId);
+ args.add(userId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void skip(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(3);
+ args.add(Operation.Skip);
+ args.add(taskId);
+ args.add(userId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void delegate(long taskId, String userId, String targetUserId, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(4);
+ args.add(Operation.Delegate);
+ args.add(taskId);
+ args.add(userId);
+ args.add(targetUserId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void forward(long taskId, String userId, String targetEntityId, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(4);
+ args.add(Operation.Forward);
+ args.add(taskId);
+ args.add(userId);
+ args.add(targetEntityId);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void complete(long taskId, String userId, ContentData outputData, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(5);
+ args.add(Operation.Complete);
+ args.add(taskId);
+ args.add(userId);
+ args.add(null);
+ args.add(outputData);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void fail(long taskId, String userId, FaultData faultData, TaskOperationMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(5);
+ args.add(Operation.Fail);
+ args.add(taskId);
+ args.add(userId);
+ args.add(null);
+ args.add(faultData);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.OperationRequest, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getTasksOwned(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(userId);
+ args.add(language);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.QueryTasksOwned, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getTasksAssignedAsBusinessAdministrator(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(userId);
+ args.add(language);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.QueryTasksAssignedAsBusinessAdministrator, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getTasksAssignedAsExcludedOwner(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(userId);
+ args.add(language);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.QueryTasksAssignedAsExcludedOwner, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getTasksAssignedAsPotentialOwner(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(userId);
+ args.add(language);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.QueryTasksAssignedAsPotentialOwner, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, String language, TaskSummaryMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(userId);
+ args.add(groupIds);
+ args.add(language);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.QueryTasksAssignedAsPotentialOwnerWithGroup, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getSubTasksAssignedAsPotentialOwner(long parentId, String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(parentId);
+ args.add(userId);
+ args.add(language);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.QuerySubTasksAssignedAsPotentialOwner, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getSubTasksByParent(long parentId, TaskSummaryMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(parentId);
+ //@TODO: un hard code this
+ args.add("en-UK");
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.QueryGetSubTasksByParentTaskId, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getTasksAssignedAsRecipient(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(userId);
+ args.add(language);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.QueryTasksAssignedAsRecipient, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getTasksAssignedAsTaskInitiator(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(userId);
+ args.add(language);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.QueryTasksAssignedAsTaskInitiator, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void getTasksAssignedAsTaskStakeholder(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>(2);
+ args.add(userId);
+ args.add(language);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.QueryTasksAssignedAsTaskStakeholder, args);
+ Message msg = new Message(sessionId, counter.incrementAndGet(), false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+
+ public void registerForEvent(EventKey key, boolean remove, EventMessageResponseHandler responseHandler) { //@TODO: look for the event stuff
+ List<Object> args = new ArrayList<Object>(3);
+ args.add(key);
+ args.add(remove);
+ args.add(clientName);
+
+ Command cmd = new Command(counter.getAndIncrement(), CommandName.RegisterForEventRequest, args);
+ int responseId = counter.incrementAndGet();
+ Message msg = new Message(sessionId, responseId, false, cmd);
+
+ client.write(msg, responseHandler);
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskServiceProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskServiceProviderRemoteClient.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/HumanTaskServiceProviderRemoteClient.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2010 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.grid.task;
+
+import org.drools.grid.generic.GenericNodeConnector;
+
+/**
+ *
+ * @author salaboy
+ */
+public class HumanTaskServiceProviderRemoteClient implements HumanTaskFactoryService {
+
+ private GenericNodeConnector connector;
+ private int id;
+
+ public HumanTaskServiceProviderRemoteClient() {
+ }
+
+ public HumanTaskServiceProviderRemoteClient(GenericNodeConnector connector, int id) {
+ this.connector = connector;
+ this.id = id;
+ }
+
+ public GenericNodeConnector getConnector() {
+ return connector;
+ }
+
+ public void setConnector(GenericNodeConnector connector) {
+ this.connector = connector;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+
+ @Override
+ public HumanTaskService newHumanTaskService() {
+
+
+ return new HumanTaskServiceImpl(this.connector, this.id);
+
+ }
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/TaskClientMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/TaskClientMessageHandlerImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/TaskClientMessageHandlerImpl.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,249 @@
+package org.drools.grid.task;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.drools.SystemEventListener;
+import org.drools.eventmessaging.Payload;
+import org.drools.grid.generic.GenericIoWriter;
+import org.drools.grid.generic.GenericMessageHandler;
+import org.drools.grid.generic.Message;
+import org.drools.grid.generic.MessageResponseHandler;
+import org.drools.task.Content;
+import org.drools.task.Task;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.Command;
+
+import org.drools.grid.task.eventmessaging.EventMessageResponseHandler;
+import org.drools.grid.task.responseHandlers.BlockingTaskSummaryMessageResponseHandler;
+
+public class TaskClientMessageHandlerImpl implements GenericMessageHandler {
+
+ /**
+ * Listener used for logging
+ */
+ private SystemEventListener systemEventListener;
+ protected Map<Integer, MessageResponseHandler> responseHandlers;
+
+ public TaskClientMessageHandlerImpl(SystemEventListener systemEventListener) {
+ this.systemEventListener = systemEventListener;
+ this.responseHandlers = new ConcurrentHashMap<Integer, MessageResponseHandler>();;
+ }
+
+
+ public void exceptionCaught(GenericIoWriter session,
+ Throwable cause) throws Exception {
+ systemEventListener.exception("Uncaught exception on client", cause);
+ }
+
+ public void messageReceived(GenericIoWriter session, Message msg) throws Exception {
+ Command cmd = (Command) msg.getPayload();
+ systemEventListener.debug("Message receieved redirected to the client 1111111111: " + cmd.getName());
+ systemEventListener.debug("Arguments : " + Arrays.toString(cmd.getArguments().toArray()));
+
+ switch (cmd.getName()) {
+ case OperationResponse: {
+ TaskOperationMessageResponseHandler responseHandler = (TaskOperationMessageResponseHandler) responseHandlers.remove(cmd.getId());
+ if (responseHandler != null) {
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ } else {
+ responseHandler.setIsDone(true);
+ System.out.println("IS DONDEEEE");
+ }
+ }
+ break;
+ }
+ case GetTaskResponse: {
+ GetTaskMessageResponseHandler responseHandler = (GetTaskMessageResponseHandler) responseHandlers.remove(cmd.getId());
+ if (responseHandler != null) {
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ } else {
+ Task task = (Task) cmd.getArguments().get(0);
+ responseHandler.execute(task);
+ }
+ }
+ break;
+ }
+ case AddTaskResponse: {
+ AddTaskMessageResponseHandler responseHandler = (AddTaskMessageResponseHandler) responseHandlers.remove(msg.getResponseId());
+ System.out.println("response id searched: " + msg.getResponseId());
+ if (responseHandler != null) {
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ } else {
+ long taskId = (Long) cmd.getArguments().get(0);
+ responseHandler.execute(taskId);
+ }
+ }
+ break;
+ }
+ case AddCommentResponse: {
+ AddCommentMessageResponseHandler responseHandler = (AddCommentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+ if (responseHandler != null) {
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ } else {
+ long commentId = (Long) cmd.getArguments().get(0);
+ responseHandler.execute(commentId);
+ }
+ }
+ break;
+ }
+ case DeleteCommentResponse: {
+ DeleteCommentMessageResponseHandler responseHandler = (DeleteCommentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+ if (responseHandler != null) {
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ } else {
+ responseHandler.setIsDone(true);
+ }
+ }
+ break;
+ }
+ case AddAttachmentResponse: {
+ AddAttachmentMessageResponseHandler responseHandler = (AddAttachmentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+ if (responseHandler != null) {
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ } else {
+ long attachmentId = (Long) cmd.getArguments().get(0);
+ long contentId = (Long) cmd.getArguments().get(1);
+ responseHandler.execute(attachmentId,
+ contentId);
+ }
+ }
+ break;
+ }
+ case DeleteAttachmentResponse: {
+ DeleteAttachmentMessageResponseHandler responseHandler = (DeleteAttachmentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+ if (responseHandler != null) {
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ } else {
+ responseHandler.setIsDone(true);
+ }
+ }
+ break;
+ }
+ case GetContentResponse: {
+ GetContentMessageResponseHandler responseHandler = (GetContentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+ if (responseHandler != null) {
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ } else {
+ Content content = (Content) cmd.getArguments().get(0);
+ responseHandler.execute(content);
+ }
+ }
+ break;
+ }
+ case SetDocumentContentResponse: {
+ SetDocumentMessageResponseHandler responseHandler = (SetDocumentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+ if (responseHandler != null) {
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ } else {
+ long contentId = (Long) cmd.getArguments().get(0);
+ responseHandler.execute(contentId);
+ }
+ }
+ break;
+ }
+ case QueryTaskSummaryResponse: {
+ BlockingTaskSummaryMessageResponseHandler responseHandler = (BlockingTaskSummaryMessageResponseHandler) responseHandlers.remove(msg.getResponseId());
+ System.out.println("responseHandler: " + responseHandler + " id searched: " + msg.getResponseId());
+ if (responseHandler != null) {
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ } else {
+ List<TaskSummary> results = (List<TaskSummary>) cmd.getArguments().get(0);
+ responseHandler.execute(results);
+ }
+ }
+ break;
+ }
+ case EventTriggerResponse: {
+ EventMessageResponseHandler responseHandler = (EventMessageResponseHandler) responseHandlers.remove(cmd.getId()); //@TODO view messaging stuff
+ System.out.println("EVENT TRIGGER RESPONSE " + responseHandler + " size " + responseHandlers.size() + " id " + cmd.getId());
+ if (responseHandler != null) {
+ System.out.println("responseHandler---: " + responseHandler);
+ if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+ responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+ System.out.println("EEerror");
+ } else {
+ Payload payload = (Payload) cmd.getArguments().get(0);
+ System.out.println("EExecute ");
+ responseHandler.execute(payload);
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ public static interface GetTaskMessageResponseHandler
+ extends
+ MessageResponseHandler {
+ public void execute(Task task);
+ }
+
+ public static interface AddTaskMessageResponseHandler
+ extends
+ MessageResponseHandler {
+ public void execute(long taskId);
+ }
+
+ public static interface TaskOperationMessageResponseHandler
+ extends
+ MessageResponseHandler {
+ public void setIsDone(boolean done);
+ }
+
+ public static interface AddCommentMessageResponseHandler
+ extends
+ MessageResponseHandler {
+ public void execute(long commentId);
+ }
+
+ public static interface DeleteCommentMessageResponseHandler
+ extends
+ MessageResponseHandler {
+ public void setIsDone(boolean done);
+ }
+
+ public static interface AddAttachmentMessageResponseHandler
+ extends
+ MessageResponseHandler {
+ public void execute(long attachmentId,
+ long contentId);
+ }
+
+ public static interface DeleteAttachmentMessageResponseHandler
+ extends
+ MessageResponseHandler {
+ public void setIsDone(boolean done);
+ }
+
+ public static interface SetDocumentMessageResponseHandler
+ extends
+ MessageResponseHandler {
+ public void execute(long contentId);
+ }
+
+ public static interface GetContentMessageResponseHandler
+ extends
+ MessageResponseHandler {
+ public void execute(Content content);
+ }
+
+ public static interface TaskSummaryMessageResponseHandler
+ extends
+ MessageResponseHandler {
+ public void execute(List<TaskSummary> results);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/TaskServerMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/TaskServerMessageHandlerImpl.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/TaskServerMessageHandlerImpl.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,437 @@
+package org.drools.grid.task;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+import org.drools.SystemEventListener;
+import org.drools.eventmessaging.EventKey;
+import org.drools.grid.generic.GenericIoWriter;
+import org.drools.grid.generic.GenericMessageHandler;
+import org.drools.grid.generic.Message;
+import org.drools.task.Attachment;
+import org.drools.task.Comment;
+import org.drools.task.Content;
+import org.drools.task.Task;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.Command;
+import org.drools.task.service.CommandName;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.Operation;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+
+
+public class TaskServerMessageHandlerImpl implements GenericMessageHandler {
+ private final TaskService service;
+ private final Map<String, GenericIoWriter> clients;
+
+ /**
+ * Listener used for logging
+ */
+ private final SystemEventListener systemEventListener;
+
+ public TaskServerMessageHandlerImpl(TaskService service, SystemEventListener systemEventListener) {
+ this.service = service;
+ this.clients = new HashMap<String, GenericIoWriter>();
+ this.systemEventListener = systemEventListener;
+ }
+
+
+ public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
+ systemEventListener.exception("Uncaught exception on Server", cause);
+ }
+
+
+ public void messageReceived(GenericIoWriter session, Message msg) throws Exception {
+ Command cmd = (Command) ((Message)msg).getPayload();
+ TaskServiceSession taskSession = service.createSession();
+ CommandName response = null;
+ try {
+ systemEventListener.debug("Message received on server : " + cmd.getName());
+ systemEventListener.debug("Arguments : " + Arrays.toString(cmd.getArguments().toArray()));
+ switch (cmd.getName()) {
+ case OperationRequest: {
+ response = CommandName.OperationResponse;
+ Operation operation = (Operation) cmd.getArguments().get(0);
+
+ systemEventListener.debug("Command receieved on server was operation of type: " + operation);
+
+ long taskId = (Long) cmd.getArguments().get(1);
+ String userId = (String) cmd.getArguments().get(2);
+ String targetEntityId = null;
+ if (cmd.getArguments().size() > 3) {
+ targetEntityId = (String) cmd.getArguments().get(3);
+ }
+ ContentData data = null;
+ if (cmd.getArguments().size() > 4) {
+ data = (ContentData) cmd.getArguments().get(4);
+ }
+ taskSession.taskOperation(operation, taskId, userId, targetEntityId, data);
+
+ List args = Collections.emptyList();
+
+ Command resultsCmnd = new Command(cmd.getId(), CommandName.OperationResponse, args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case GetTaskRequest: {
+ response = CommandName.GetTaskResponse;
+ long taskId = (Long) cmd.getArguments().get(0);
+
+ Task task = taskSession.getTask(taskId);
+
+ List args = new ArrayList(1);
+ args.add(task);
+ Command resultsCmnd = new Command(cmd.getId(), CommandName.GetTaskResponse, args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+
+ break;
+ }
+ case AddTaskRequest: {
+ response = CommandName.AddTaskResponse;
+ Task task = (Task) cmd.getArguments().get(0);
+ ContentData content = (ContentData) cmd.getArguments().get(1);
+ taskSession.addTask(task, content);
+
+ List args = new ArrayList(1);
+ args.add(task.getId());
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.AddTaskResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case AddCommentRequest: {
+ response = CommandName.AddCommentResponse;
+ Comment comment = (Comment) cmd.getArguments().get(1);
+ taskSession.addComment((Long) cmd.getArguments().get(0),
+ comment);
+
+ List args = new ArrayList(1);
+ args.add(comment.getId());
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.AddCommentResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case DeleteCommentRequest: {
+ response = CommandName.DeleteCommentResponse;
+ long taskId = (Long) cmd.getArguments().get(0);
+ long commentId = (Long) cmd.getArguments().get(1);
+ taskSession.deleteComment(taskId,
+ commentId);
+
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.DeleteCommentResponse,
+ Collections.emptyList());
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case AddAttachmentRequest: {
+ response = CommandName.AddAttachmentResponse;
+ Attachment attachment = (Attachment) cmd.getArguments().get(1);
+ Content content = (Content) cmd.getArguments().get(2);
+ taskSession.addAttachment((Long) cmd.getArguments().get(0),
+ attachment,
+ content);
+
+ List args = new ArrayList(2);
+ args.add(attachment.getId());
+ args.add(content.getId());
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.AddAttachmentResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case DeleteAttachmentRequest: {
+ response = CommandName.DeleteAttachmentResponse;
+ long taskId = (Long) cmd.getArguments().get(0);
+ long attachmentId = (Long) cmd.getArguments().get(1);
+ long contentId = (Long) cmd.getArguments().get(2);
+ taskSession.deleteAttachment(taskId,
+ attachmentId,
+ contentId);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.DeleteAttachmentResponse,
+ Collections.emptyList());
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case SetDocumentContentRequest: {
+ response = CommandName.SetDocumentContentResponse;
+ long taskId = (Long) cmd.getArguments().get(0);
+ Content content = (Content) cmd.getArguments().get(1);
+ taskSession.setDocumentContent(taskId,
+ content);
+
+ List args = new ArrayList(1);
+ args.add(content.getId());
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.SetDocumentContentResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case GetContentRequest: {
+ response = CommandName.GetContentResponse;
+ long contentId = (Long) cmd.getArguments().get(0);
+ Content content = taskSession.getContent(contentId);
+ List args = new ArrayList(1);
+ args.add(content);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.GetContentResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case QueryTasksOwned: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getTasksOwned((String) cmd.getArguments().get(0),
+ (String) cmd.getArguments().get(1));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case QueryTasksAssignedAsBusinessAdministrator: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getTasksAssignedAsBusinessAdministrator((String) cmd.getArguments().get(0),
+ (String) cmd.getArguments().get(1));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case QueryTasksAssignedAsPotentialOwner: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getTasksAssignedAsPotentialOwner((String) cmd.getArguments().get(0),
+ (String) cmd.getArguments().get(1));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case QueryTasksAssignedAsPotentialOwnerWithGroup: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getTasksAssignedAsPotentialOwner(
+ (String) cmd.getArguments().get(0),
+ (List<String>) cmd.getArguments().get(1),
+ (String) cmd.getArguments().get(2));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case QueryTasksAssignedAsPotentialOwnerByGroup: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getTasksAssignedAsPotentialOwnerByGroup((String) cmd.getArguments().get(0),
+ (String) cmd.getArguments().get(1));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case QuerySubTasksAssignedAsPotentialOwner: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getSubTasksAssignedAsPotentialOwner((Long) cmd.getArguments().get(0),
+ (String) cmd.getArguments().get(1),
+ (String) cmd.getArguments().get(2));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case QueryGetSubTasksByParentTaskId: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getSubTasksByParent((Long) cmd.getArguments().get(0),
+ (String) cmd.getArguments().get(1));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+
+
+ case QueryTasksAssignedAsTaskInitiator: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getTasksAssignedAsTaskInitiator((String) cmd.getArguments().get(0),
+ (String) cmd.getArguments().get(1));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case QueryTasksAssignedAsExcludedOwner: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getTasksAssignedAsExcludedOwner((String) cmd.getArguments().get(0),
+ (String) cmd.getArguments().get(1));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case QueryTasksAssignedAsRecipient: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getTasksAssignedAsRecipient((String) cmd.getArguments().get(0),
+ (String) cmd.getArguments().get(1));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case QueryTasksAssignedAsTaskStakeholder: {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getTasksAssignedAsTaskStakeholder((String) cmd.getArguments().get(0),
+ (String) cmd.getArguments().get(1));
+ List args = new ArrayList(1);
+ args.add(results);
+ Command resultsCmnd = new Command(cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ break;
+ }
+ case RegisterForEventRequest: {
+ response = CommandName.EventTriggerResponse;
+ EventKey key = (EventKey) cmd.getArguments().get(0);
+ boolean remove = (Boolean) cmd.getArguments().get(1);
+ String uuid = (String) cmd.getArguments().get(2);
+ clients.put(uuid,
+ session);
+ GenericEventTransport transport = new GenericEventTransport(String.valueOf(msg.getSessionId()), //this is wrong
+ msg.getResponseId(), //this is wrong
+ clients,
+ remove);
+ service.getEventKeys().register(key,
+ transport);
+ break;
+ }
+ case RegisterClient: {
+ String uuid = (String) cmd.getArguments().get(0);
+ clients.put(uuid, session);
+ break;
+ }
+ default: {
+ systemEventListener.debug("Unknown command recieved on server");
+ }
+ }
+ } catch (RuntimeException e) {
+ systemEventListener.exception(e.getMessage(),e);
+ e.printStackTrace(System.err);
+ List<Object> list = new ArrayList<Object>(1);
+ list.add(e);
+ Command resultsCmnd = new Command(cmd.getId(), response, list);
+ session.write(new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ resultsCmnd ), null);
+ } finally {
+ taskSession.dispose();
+ }
+ }
+
+
+ public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
+ systemEventListener.debug("Server IDLE " + session.getIdleCount(status));
+ }
+
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/eventmessaging/EventMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/eventmessaging/EventMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/eventmessaging/EventMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,10 @@
+package org.drools.grid.task.eventmessaging;
+
+import org.drools.eventmessaging.Payload;
+import org.drools.grid.generic.MessageResponseHandler;
+
+
+
+public interface EventMessageResponseHandler extends MessageResponseHandler {
+ public void execute(Payload payload);
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddAttachmentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddAttachmentMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddAttachmentMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,17 @@
+package org.drools.grid.task.responseHandlers;
+
+import org.drools.grid.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingAddAttachmentResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.AddAttachmentMessageResponseHandler;
+
+public class BlockingAddAttachmentMessageResponseHandler extends BlockingAddAttachmentResponseHandler implements AddAttachmentMessageResponseHandler {
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ Long attachmentId = (Long) cmd.getArguments().get(0);
+ Long contentId = (Long) cmd.getArguments().get(1);
+ execute(attachmentId, contentId);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddCommentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddCommentMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddCommentMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,16 @@
+package org.drools.grid.task.responseHandlers;
+
+import org.drools.grid.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingAddCommentResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.AddCommentMessageResponseHandler;
+
+public class BlockingAddCommentMessageResponseHandler extends BlockingAddCommentResponseHandler implements AddCommentMessageResponseHandler {
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ Long commentId = (Long) cmd.getArguments().get(0);
+ execute(commentId);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddTaskMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddTaskMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingAddTaskMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,16 @@
+package org.drools.grid.task.responseHandlers;
+
+import org.drools.grid.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingAddTaskResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.AddTaskMessageResponseHandler;
+
+public class BlockingAddTaskMessageResponseHandler extends BlockingAddTaskResponseHandler implements AddTaskMessageResponseHandler {
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ Long taskId = (Long) cmd.getArguments().get(0);
+ execute(taskId);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingDeleteAttachmentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingDeleteAttachmentMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingDeleteAttachmentMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,13 @@
+package org.drools.grid.task.responseHandlers;
+
+import org.drools.grid.generic.Message;
+import org.drools.task.service.responsehandlers.BlockingDeleteAttachmentResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.DeleteAttachmentMessageResponseHandler;
+
+public class BlockingDeleteAttachmentMessageResponseHandler extends BlockingDeleteAttachmentResponseHandler implements DeleteAttachmentMessageResponseHandler {
+
+ public void receive(Message message) {
+ setDone(true);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingDeleteCommentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingDeleteCommentMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingDeleteCommentMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,13 @@
+package org.drools.grid.task.responseHandlers;
+
+import org.drools.grid.generic.Message;
+import org.drools.task.service.responsehandlers.BlockingDeleteCommentResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.DeleteCommentMessageResponseHandler;
+
+public class BlockingDeleteCommentMessageResponseHandler extends BlockingDeleteCommentResponseHandler implements DeleteCommentMessageResponseHandler {
+
+ public void receive(Message message) {
+ setIsDone(true);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingEventMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingEventMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingEventMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,17 @@
+package org.drools.grid.task.responseHandlers;
+
+import org.drools.eventmessaging.Payload;
+import org.drools.grid.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingEventResponseHandler;
+import org.drools.grid.task.eventmessaging.EventMessageResponseHandler;
+
+public class BlockingEventMessageResponseHandler extends BlockingEventResponseHandler implements EventMessageResponseHandler {
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ Payload payload = (Payload) cmd.getArguments().get(0);
+ execute(payload);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingGetContentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingGetContentMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingGetContentMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,17 @@
+package org.drools.grid.task.responseHandlers;
+
+import org.drools.grid.generic.Message;
+import org.drools.task.Content;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingGetContentResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.GetContentMessageResponseHandler;
+
+public class BlockingGetContentMessageResponseHandler extends BlockingGetContentResponseHandler implements GetContentMessageResponseHandler {
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ Content content = (Content) cmd.getArguments().get(0);
+ execute(content);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingGetTaskMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingGetTaskMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingGetTaskMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,17 @@
+package org.drools.grid.task.responseHandlers;
+
+import org.drools.grid.generic.Message;
+import org.drools.task.Task;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingGetTaskResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.GetTaskMessageResponseHandler;
+
+public class BlockingGetTaskMessageResponseHandler extends BlockingGetTaskResponseHandler implements GetTaskMessageResponseHandler {
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ Task task = (Task) cmd.getArguments().get(0);
+ execute(task);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingSetContentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingSetContentMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingSetContentMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,16 @@
+package org.drools.grid.task.responseHandlers;
+
+import org.drools.grid.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingSetContentResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.SetDocumentMessageResponseHandler;
+
+public class BlockingSetContentMessageResponseHandler extends BlockingSetContentResponseHandler implements SetDocumentMessageResponseHandler {
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ long contentId = (Long) cmd.getArguments().get(0);
+ execute(contentId);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingTaskOperationMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingTaskOperationMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingTaskOperationMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,13 @@
+package org.drools.grid.task.responseHandlers;
+
+import org.drools.grid.generic.Message;
+import org.drools.task.service.responsehandlers.BlockingTaskOperationResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.TaskOperationMessageResponseHandler;
+
+public class BlockingTaskOperationMessageResponseHandler extends BlockingTaskOperationResponseHandler implements TaskOperationMessageResponseHandler {
+
+ public void receive(Message message) {
+ setDone(true);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingTaskSummaryMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingTaskSummaryMessageResponseHandler.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/main/java/org/drools/grid/task/responseHandlers/BlockingTaskSummaryMessageResponseHandler.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,20 @@
+package org.drools.grid.task.responseHandlers;
+
+import java.util.List;
+import org.drools.grid.generic.Message;
+
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingTaskSummaryResponseHandler;
+import org.drools.grid.task.TaskClientMessageHandlerImpl.TaskSummaryMessageResponseHandler;
+
+public class BlockingTaskSummaryMessageResponseHandler extends BlockingTaskSummaryResponseHandler implements TaskSummaryMessageResponseHandler {
+
+ public void receive(Message message) {
+ Command cmd = (Command) message.getPayload();
+ List<TaskSummary> results = (List<TaskSummary>) cmd.getArguments().get(0);
+ execute(results);
+ }
+
+}
+
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/BaseTaskServiceTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/BaseTaskServiceTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/BaseTaskServiceTest.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,777 @@
+package org.drools.grid.task;
+
+import org.drools.grid.task.CommandBasedServicesWSHumanTaskHandler;
+import org.drools.grid.task.HumanTaskService;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import junit.framework.Assert;
+
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.process.instance.impl.WorkItemImpl;
+import org.drools.grid.ExecutionNode;
+import org.drools.grid.RemoteConnection;
+import org.drools.grid.task.responseHandlers.BlockingGetContentMessageResponseHandler;
+import org.drools.grid.task.responseHandlers.BlockingGetTaskMessageResponseHandler;
+import org.drools.grid.task.responseHandlers.BlockingTaskOperationMessageResponseHandler;
+import org.drools.grid.task.responseHandlers.BlockingTaskSummaryMessageResponseHandler;
+import org.drools.task.AccessType;
+import org.drools.task.Group;
+import org.drools.task.Status;
+import org.drools.task.Task;
+import org.drools.task.User;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.PermissionDeniedException;
+import org.junit.Test;
+
+
+
+
+public abstract class BaseTaskServiceTest {
+
+ protected CommandBasedServicesWSHumanTaskHandler handler;
+ protected HumanTaskService humanTaskClient;
+ protected static final int DEFAULT_WAIT_TIME = 5000;
+ protected static final int MANAGER_COMPLETION_WAIT_TIME = DEFAULT_WAIT_TIME;
+ protected static final int MANAGER_ABORT_WAIT_TIME = DEFAULT_WAIT_TIME;
+ protected Map<String, User> users;
+ protected Map<String, Group> groups;
+ protected ExecutionNode node;
+ protected RemoteConnection connection = new RemoteConnection();
+
+ @Test
+ public void testTask() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ Assert.assertEquals("TaskName", task.getName());
+ Assert.assertEquals(10, task.getPriority());
+ Assert.assertEquals("Comment", task.getDescription());
+ Assert.assertEquals(Status.Reserved, task.getStatus());
+ Assert.assertEquals("Darth Vader", task.getActualOwner().getId());
+
+ System.out.println("Starting task " + task.getId());
+ BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Started task " + task.getId());
+
+ System.out.println("Completing task " + task.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.complete(task.getId(), "Darth Vader", null, operationResponseHandler);
+ operationResponseHandler.waitTillDone(15000);
+ System.out.println("Completed task " + task.getId());
+ Assert.assertTrue(manager.waitTillCompleted(DEFAULT_WAIT_TIME));
+ Thread.sleep(500);
+ }
+ @Test
+ public void testTaskMultipleActors() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader, Dalai Lama");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ Assert.assertEquals("TaskName", task.getName());
+ Assert.assertEquals(10, task.getPriority());
+ Assert.assertEquals("Comment", task.getDescription());
+ Assert.assertEquals(Status.Ready, task.getStatus());
+
+ System.out.println("Claiming task " + task.getId());
+ BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.claim(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Claimed task " + task.getId());
+
+ System.out.println("Starting task " + task.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Started task " + task.getId());
+
+ System.out.println("Completing task " + task.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.complete(task.getId(), "Darth Vader", null, operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Completed task " + task.getId());
+
+ Assert.assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+
+ Thread.sleep(500);
+ }
+ @Test
+ public void testTaskGroupActors() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("GroupId", "Crusaders");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ List<String> groupIds = new ArrayList<String>();
+ groupIds.add("Crusaders");
+ humanTaskClient.getTasksAssignedAsPotentialOwner(null, groupIds, "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(1, tasks.size());
+ TaskSummary taskSummary = tasks.get(0);
+ Assert.assertEquals("TaskName", taskSummary.getName());
+ Assert.assertEquals(10, taskSummary.getPriority());
+ Assert.assertEquals("Comment", taskSummary.getDescription());
+ Assert.assertEquals(Status.Ready, taskSummary.getStatus());
+
+ System.out.println("Claiming task " + taskSummary.getId());
+ BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.claim(taskSummary.getId(), "Darth Vader", operationResponseHandler);
+ PermissionDeniedException denied = null;
+ System.out.println("1");
+ try {
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("2");
+ } catch (PermissionDeniedException e) {
+ System.out.println("EXCEPTION: " + e);
+ denied = e;
+ }
+ //@TODO: not working I don't know why!
+ //Assert.assertNotNull("Should get permissed denied exception", denied);
+ System.out.println("Claimed task " + taskSummary.getId());
+
+ //Check if the parent task is InProgress
+ BlockingGetTaskMessageResponseHandler getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(taskSummary.getId(), getTaskResponseHandler);
+ Task task = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.Ready, task.getTaskData().getStatus());
+
+ Thread.sleep(500);
+ }
+ @Test
+ public void testTaskSingleAndGroupActors() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task One");
+ workItem.setParameter("TaskName", "TaskNameOne");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("GroupId", "Crusaders");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ workItem = new WorkItemImpl();
+ workItem.setName("Human Task Two");
+ workItem.setParameter("TaskName", "TaskNameTwo");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ List<String> groupIds = new ArrayList<String>();
+ groupIds.add("Crusaders");
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", groupIds, "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(2, tasks.size());
+
+ Thread.sleep(500);
+ }
+ @Test
+ public void testTaskFail() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ Assert.assertEquals("TaskName", task.getName());
+ Assert.assertEquals(10, task.getPriority());
+ Assert.assertEquals("Comment", task.getDescription());
+ Assert.assertEquals(Status.Reserved, task.getStatus());
+ Assert.assertEquals("Darth Vader", task.getActualOwner().getId());
+
+ System.out.println("Starting task " + task.getId());
+ BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Started task " + task.getId());
+
+ System.out.println("Failing task " + task.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.fail(task.getId(), "Darth Vader", null, operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Failed task " + task.getId());
+
+ Assert.assertTrue(manager.waitTillAborted(MANAGER_ABORT_WAIT_TIME));
+
+ Thread.sleep(500);
+ }
+ @Test
+ public void testTaskSkip() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ Assert.assertEquals("TaskName", task.getName());
+ Assert.assertEquals(10, task.getPriority());
+ Assert.assertEquals("Comment", task.getDescription());
+ Assert.assertEquals(Status.Reserved, task.getStatus());
+ Assert.assertEquals("Darth Vader", task.getActualOwner().getId());
+
+ System.out.println("Skipping task " + task.getId());
+ BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.skip(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Skipped task " + task.getId());
+
+ Assert.assertTrue(manager.waitTillAborted(MANAGER_ABORT_WAIT_TIME));
+ }
+ @Test
+ public void testTaskAbortSkippable() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ handler.abortWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(0, tasks.size());
+ }
+ @Test
+ public void testTaskAbortNotSkippable() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("Skippable", "false");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(1, tasks.size());
+
+ handler.abortWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ tasks = responseHandler.getResults();
+ Assert.assertEquals(1, tasks.size());
+ }
+ @Test
+ public void testTaskData() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("Content", "This is the content");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(1, tasks.size());
+ TaskSummary taskSummary = tasks.get(0);
+ Assert.assertEquals("TaskName", taskSummary.getName());
+ Assert.assertEquals(10, taskSummary.getPriority());
+ Assert.assertEquals("Comment", taskSummary.getDescription());
+ Assert.assertEquals(Status.Reserved, taskSummary.getStatus());
+ Assert.assertEquals("Darth Vader", taskSummary.getActualOwner().getId());
+
+ BlockingGetTaskMessageResponseHandler getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(taskSummary.getId(), getTaskResponseHandler);
+ Task task = getTaskResponseHandler.getTask();
+ Assert.assertEquals(AccessType.Inline, task.getTaskData().getDocumentAccessType());
+ long contentId = task.getTaskData().getDocumentContentId();
+ Assert.assertTrue(contentId != -1);
+ BlockingGetContentMessageResponseHandler getContentResponseHandler = new BlockingGetContentMessageResponseHandler();
+ humanTaskClient.getContent(contentId, getContentResponseHandler);
+ ByteArrayInputStream bis = new ByteArrayInputStream(getContentResponseHandler.getContent().getContent());
+ ObjectInputStream in = new ObjectInputStream(bis);
+ Object data = in.readObject();
+ in.close();
+ Assert.assertEquals("This is the content", data);
+
+ System.out.println("Starting task " + task.getId());
+ BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Started task " + task.getId());
+
+ System.out.println("Completing task " + task.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ ContentData result = new ContentData();
+ result.setAccessType(AccessType.Inline);
+ result.setType("java.lang.String");
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutputStream out = new ObjectOutputStream(bos);
+ out.writeObject("This is the result");
+ out.close();
+ result.setContent(bos.toByteArray());
+ humanTaskClient.complete(task.getId(), "Darth Vader", result, operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Completed task " + task.getId());
+
+ Assert.assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+ Map<String, Object> results = manager.getResults();
+ Assert.assertNotNull(results);
+ Assert.assertEquals("Darth Vader", results.get("ActorId"));
+ Assert.assertEquals("This is the result", results.get("Result"));
+ }
+ @Test
+ public void testOnAllSubTasksEndParentEndStrategy() throws Exception {
+
+ TestWorkItemManager manager = new TestWorkItemManager();
+ //Create the parent task
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskNameParent");
+ workItem.setParameter("Comment", "CommentParent");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ //Set the subtask policy
+ workItem.setParameter("SubTaskStrategies", "OnAllSubTasksEndParentEnd");
+ handler.executeWorkItem(workItem, manager);
+
+
+ Thread.sleep(500);
+
+ //Test if the task is succesfully created
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ Assert.assertEquals("TaskNameParent", task.getName());
+ Assert.assertEquals(10, task.getPriority());
+ Assert.assertEquals("CommentParent", task.getDescription());
+ Assert.assertEquals(Status.Reserved, task.getStatus());
+ Assert.assertEquals("Darth Vader", task.getActualOwner().getId());
+
+ //Create the child task
+ workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskNameChild1");
+ workItem.setParameter("Comment", "CommentChild1");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("ParentId", task.getId());
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ //Create the child task2
+ workItem = new WorkItemImpl();
+ workItem.setName("Human Task2");
+ workItem.setParameter("TaskName", "TaskNameChild2");
+ workItem.setParameter("Comment", "CommentChild2");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("ParentId", task.getId());
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ //Start the parent task
+ System.out.println("Starting task " + task.getId());
+ BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Started task " + task.getId());
+
+ //Check if the parent task is InProgress
+ BlockingGetTaskMessageResponseHandler getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(task.getId(), getTaskResponseHandler);
+ Task parentTask = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.InProgress, parentTask.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner());
+
+ //Get all the subtask created for the parent task based on the potential owner
+ responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getSubTasksAssignedAsPotentialOwner(parentTask.getId(), "Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> subTasks = responseHandler.getResults();
+ Assert.assertEquals(2, subTasks.size());
+ TaskSummary subTaskSummary1 = subTasks.get(0);
+ TaskSummary subTaskSummary2 = subTasks.get(1);
+ Assert.assertNotNull(subTaskSummary1);
+ Assert.assertNotNull(subTaskSummary2);
+
+ //Starting the sub task 1
+ System.out.println("Starting sub task " + subTaskSummary1.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.start(subTaskSummary1.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Started sub task " + subTaskSummary1.getId());
+
+ //Starting the sub task 2
+ System.out.println("Starting sub task " + subTaskSummary2.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.start(subTaskSummary2.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Started sub task " + subTaskSummary2.getId());
+
+ //Check if the child task 1 is InProgress
+ getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(subTaskSummary1.getId(), getTaskResponseHandler);
+ Task subTask1 = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.InProgress, subTask1.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner());
+
+ //Check if the child task 2 is InProgress
+ getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(subTaskSummary2.getId(), getTaskResponseHandler);
+ Task subTask2 = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.InProgress, subTask2.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
+
+ // Complete the child task 1
+ System.out.println("Completing sub task " + subTask1.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.complete(subTask1.getId(), "Darth Vader", null, operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Completed sub task " + subTask1.getId());
+
+ // Complete the child task 2
+ System.out.println("Completing sub task " + subTask2.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.complete(subTask2.getId(), "Darth Vader", null, operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Completed sub task " + subTask2.getId());
+
+ //Check if the child task 1 is Completed
+
+ getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(subTask1.getId(), getTaskResponseHandler);
+ subTask1 = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.Completed, subTask1.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner());
+
+ //Check if the child task 2 is Completed
+
+ getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(subTask2.getId(), getTaskResponseHandler);
+ subTask2 = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.Completed, subTask2.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
+
+ // Check is the parent task is Complete
+ getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(parentTask.getId(), getTaskResponseHandler);
+ parentTask = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.Completed, parentTask.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner());
+
+ Assert.assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+ }
+ @Test
+ public void testOnParentAbortAllSubTasksEndStrategy() throws Exception {
+
+ TestWorkItemManager manager = new TestWorkItemManager();
+ //Create the parent task
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskNameParent");
+ workItem.setParameter("Comment", "CommentParent");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ //Set the subtask policy
+ workItem.setParameter("SubTaskStrategies", "OnParentAbortAllSubTasksEnd");
+ handler.executeWorkItem(workItem, manager);
+
+
+ Thread.sleep(500);
+
+ //Test if the task is succesfully created
+ BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ Assert.assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ Assert.assertEquals("TaskNameParent", task.getName());
+ Assert.assertEquals(10, task.getPriority());
+ Assert.assertEquals("CommentParent", task.getDescription());
+ Assert.assertEquals(Status.Reserved, task.getStatus());
+ Assert.assertEquals("Darth Vader", task.getActualOwner().getId());
+
+ //Create the child task
+ workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskNameChild1");
+ workItem.setParameter("Comment", "CommentChild1");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("ParentId", task.getId());
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ //Create the child task2
+ workItem = new WorkItemImpl();
+ workItem.setName("Human Task2");
+ workItem.setParameter("TaskName", "TaskNameChild2");
+ workItem.setParameter("Comment", "CommentChild2");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("ParentId", task.getId());
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ //Start the parent task
+ System.out.println("Starting task " + task.getId());
+ BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Started task " + task.getId());
+
+ //Check if the parent task is InProgress
+ BlockingGetTaskMessageResponseHandler getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(task.getId(), getTaskResponseHandler);
+ Task parentTask = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.InProgress, parentTask.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner());
+
+ //Get all the subtask created for the parent task based on the potential owner
+ responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+ humanTaskClient.getSubTasksAssignedAsPotentialOwner(parentTask.getId(), "Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> subTasks = responseHandler.getResults();
+ Assert.assertEquals(2, subTasks.size());
+ TaskSummary subTaskSummary1 = subTasks.get(0);
+ TaskSummary subTaskSummary2 = subTasks.get(1);
+ Assert.assertNotNull(subTaskSummary1);
+ Assert.assertNotNull(subTaskSummary2);
+
+ //Starting the sub task 1
+ System.out.println("Starting sub task " + subTaskSummary1.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.start(subTaskSummary1.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Started sub task " + subTaskSummary1.getId());
+
+ //Starting the sub task 2
+ System.out.println("Starting sub task " + subTaskSummary2.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.start(subTaskSummary2.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Started sub task " + subTaskSummary2.getId());
+
+ //Check if the child task 1 is InProgress
+ getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(subTaskSummary1.getId(), getTaskResponseHandler);
+ Task subTask1 = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.InProgress, subTask1.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner());
+
+ //Check if the child task 2 is InProgress
+ getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(subTaskSummary2.getId(), getTaskResponseHandler);
+ Task subTask2 = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.InProgress, subTask2.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
+
+ // Complete the parent task
+ System.out.println("Completing parent task " + parentTask.getId());
+ operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+ humanTaskClient.skip(parentTask.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+ System.out.println("Completed parent task " + parentTask.getId());
+
+ //Check if the child task 1 is Completed
+ getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(subTaskSummary1.getId(), getTaskResponseHandler);
+ subTask1 = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.Completed, subTask1.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner());
+
+ //Check if the child task 2 is Completed
+ getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+ humanTaskClient.getTask(subTaskSummary2.getId(), getTaskResponseHandler);
+ subTask2 = getTaskResponseHandler.getTask();
+ Assert.assertEquals(Status.Completed, subTask2.getTaskData().getStatus());
+ Assert.assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
+
+ Assert.assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+ }
+
+ private class TestWorkItemManager implements WorkItemManager {
+
+ private volatile boolean completed;
+ private volatile boolean aborted;
+ private volatile Map<String, Object> results;
+
+ public synchronized boolean waitTillCompleted(long time) {
+ if (!isCompleted()) {
+ try {
+ wait(time);
+ } catch (InterruptedException e) {
+ // swallow and return state of completed
+ }
+ }
+
+ return isCompleted();
+ }
+
+ public synchronized boolean waitTillAborted(long time) {
+ if (!isAborted()) {
+ try {
+ wait(time);
+ } catch (InterruptedException e) {
+ // swallow and return state of aborted
+ }
+ }
+
+ return isAborted();
+ }
+
+ public void abortWorkItem(long id) {
+ setAborted(true);
+ }
+
+ public synchronized boolean isAborted() {
+ return aborted;
+ }
+
+ private synchronized void setAborted(boolean aborted) {
+ this.aborted = aborted;
+ notifyAll();
+ }
+
+ public void completeWorkItem(long id, Map<String, Object> results) {
+ this.results = results;
+ setCompleted(true);
+ }
+
+ private synchronized void setCompleted(boolean completed) {
+ this.completed = completed;
+ notifyAll();
+ }
+
+ public synchronized boolean isCompleted() {
+ return completed;
+ }
+
+ public WorkItem getWorkItem(long id) {
+ return null;
+ }
+
+ public Set<WorkItem> getWorkItems() {
+ return null;
+ }
+
+ public Map<String, Object> getResults() {
+ return results;
+ }
+
+ public void internalAbortWorkItem(long id) {
+ }
+
+ public void internalAddWorkItem(WorkItem workItem) {
+ }
+
+ public void internalExecuteWorkItem(WorkItem workItem) {
+ }
+
+ public void registerWorkItemHandler(String workItemName, WorkItemHandler handler) {
+ }
+
+ @Override
+ public void registerWorkItemHandler(String workItemName, org.drools.runtime.process.WorkItemHandler handler) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ }
+
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/CommandBasedServicesWSHumanTaskHandlerTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/CommandBasedServicesWSHumanTaskHandlerTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/CommandBasedServicesWSHumanTaskHandlerTest.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,227 @@
+package org.drools.grid.task;
+
+import org.drools.grid.task.CommandBasedServicesWSHumanTaskHandler;
+import org.drools.grid.task.HumanTaskServiceProviderRemoteClient;
+import org.drools.grid.task.HumanTaskFactoryService;
+import org.drools.grid.task.TaskServerMessageHandlerImpl;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.Date;
+import java.util.Map;
+import java.util.Properties;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import org.apache.commons.collections.map.HashedMap;
+
+import org.apache.mina.transport.socket.SocketAcceptor;
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.SystemEventListenerFactory;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.grid.generic.NodeData;
+import org.drools.grid.generic.GenericNodeConnector;
+import org.drools.grid.generic.GenericMessageHandlerImpl;
+import org.drools.grid.remote.mina.MinaAcceptor;
+import org.drools.grid.remote.mina.MinaNodeConnector;
+import org.drools.grid.remote.mina.MinaIoHandler;
+import org.drools.grid.strategies.ReturnAlwaysTheFirstSelectionStrategy;
+import org.drools.task.Group;
+import org.drools.task.MockUserInfo;
+import org.drools.task.User;
+import org.drools.task.service.SendIcal;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+import org.junit.After;
+import org.junit.Before;
+import org.mvel2.MVEL;
+import org.mvel2.ParserContext;
+import org.mvel2.compiler.ExpressionCompiler;
+
+public class CommandBasedServicesWSHumanTaskHandlerTest extends BaseTaskServiceTest {
+
+
+
+ private MinaAcceptor server;
+ private MinaAcceptor humanTaskServer;
+ //private NodeConnector nodeConnection;
+
+ protected EntityManagerFactory emf;
+
+ protected static TaskService taskService;
+ protected TaskServiceSession taskSession;
+ protected GenericNodeConnector htMinaClient;
+ protected GenericNodeConnector minaClient;
+ @Before
+ public void setUpTaskService() throws Exception {
+ Properties conf = new Properties();
+ conf.setProperty("mail.smtp.host", "localhost");
+ conf.setProperty("mail.smtp.port", "2345");
+ conf.setProperty("from", "from at domain.com");
+ conf.setProperty("replyTo", "replyTo at domain.com");
+ conf.setProperty("defaultLanguage", "en-UK");
+ SendIcal.initInstance(conf);
+
+ // Use persistence.xml configuration
+ emf = Persistence.createEntityManagerFactory("org.drools.task");
+
+ taskService = new TaskService(emf, SystemEventListenerFactory.getSystemEventListener());
+ taskSession = taskService.createSession();
+ MockUserInfo userInfo = new MockUserInfo();
+ taskService.setUserinfo(userInfo);
+ Map vars = new HashedMap();
+
+ Reader reader = null;
+
+ try {
+ reader = new InputStreamReader(new ClassPathResource("org/drools/task/LoadUsers.mvel").getInputStream());
+ users = (Map<String, User>) eval(reader, vars);
+ for (User user : users.values()) {
+ taskSession.addUser(user);
+ }
+ } finally {
+ if (reader != null) {
+ reader.close();
+ }
+ reader = null;
+ }
+
+ try {
+ reader = new InputStreamReader(new ClassPathResource("org/drools/task/LoadGroups.mvel").getInputStream());
+ groups = (Map<String, Group>) eval(reader, vars);
+ for (Group group : groups.values()) {
+ taskSession.addGroup(group);
+ }
+ } finally {
+ if (reader != null) {
+ reader.close();
+ }
+ }
+
+
+ SocketAddress address = new InetSocketAddress("127.0.0.1", 9123);
+ NodeData nodeData = new NodeData();
+ // Setup Execution Node Server
+ SocketAcceptor acceptor = new NioSocketAcceptor();
+ acceptor.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener(),
+ new GenericMessageHandlerImpl(nodeData,
+ SystemEventListenerFactory.getSystemEventListener())));
+ this.server = new MinaAcceptor(acceptor, address);
+ this.server.start();
+ Thread.sleep(5000);
+ // End Execution Server
+
+ // Human task Server configuration
+ SocketAddress htAddress = new InetSocketAddress("127.0.0.1", 9124);
+ SocketAcceptor htAcceptor = new NioSocketAcceptor();
+
+ htAcceptor.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener(),
+ new TaskServerMessageHandlerImpl(taskService,
+ SystemEventListenerFactory.getSystemEventListener())));
+ this.humanTaskServer = new MinaAcceptor(htAcceptor, htAddress);
+ this.humanTaskServer.start();
+ Thread.sleep(5000);
+ // End Human task Server configuration
+
+ // setup the ht client
+ NioSocketConnector htclientConnector = new NioSocketConnector();
+ htclientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener()));
+ htMinaClient = new MinaNodeConnector("client ht",
+ htclientConnector,
+ htAddress,
+ SystemEventListenerFactory.getSystemEventListener());
+
+ boolean connected = htMinaClient.connect();
+ if (!connected) {
+ throw new IllegalArgumentException("Could not connect task client");
+ }
+
+ // setup RemoteService client
+ NioSocketConnector clientConnector = new NioSocketConnector();
+ clientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener()));
+ minaClient = new MinaNodeConnector("client SM",
+ clientConnector,
+ address,
+ SystemEventListenerFactory.getSystemEventListener());
+
+
+
+ connection.addNodeConnector(minaClient);
+
+ node = connection.getExecutionNode(new ReturnAlwaysTheFirstSelectionStrategy(connection));
+ //nodeConnection.connect();
+
+
+
+
+
+ KnowledgeBase kbase = this.node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ int sessionId = ksession.getId();
+
+ node.set(HumanTaskFactoryService.class, new HumanTaskServiceProviderRemoteClient(htMinaClient, sessionId));
+
+ this.humanTaskClient = this.node.get(HumanTaskFactoryService.class).newHumanTaskService();
+
+
+ this.handler = new CommandBasedServicesWSHumanTaskHandler(ksession);
+
+
+ }
+ @After
+ public void tearDown() throws Exception {
+ this.humanTaskClient.disconnect();
+
+ for(GenericNodeConnector connector : connection.getNodeConnectors()){
+ connector.disconnect();
+ }
+
+ this.handler.dispose();
+ this.server.stop();
+ this.humanTaskServer.stop();
+
+ taskSession.dispose();
+ emf.close();
+
+
+ }
+
+ public Object eval(Reader reader,
+ Map vars) {
+ try {
+ return eval(toString(reader),
+ vars);
+ } catch (IOException e) {
+ throw new RuntimeException("Exception Thrown",
+ e);
+ }
+ }
+
+ public String toString(Reader reader) throws IOException {
+ StringBuilder sb = new StringBuilder(1024);
+ int charValue;
+
+ while ((charValue = reader.read()) != -1) {
+ sb.append((char) charValue);
+ }
+ return sb.toString();
+ }
+
+ public Object eval(String str, Map vars) {
+ ExpressionCompiler compiler = new ExpressionCompiler(str.trim());
+
+ ParserContext context = new ParserContext();
+ context.addPackageImport("org.drools.task");
+ context.addPackageImport("org.drools.task.service");
+ context.addPackageImport("org.drools.task.query");
+ context.addPackageImport("java.util");
+
+ vars.put("now", new Date());
+ return MVEL.executeExpression(compiler.compile(context), vars);
+ }
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/task/MockUserInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/task/MockUserInfo.java (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/java/org/drools/task/MockUserInfo.java 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,74 @@
+package org.drools.task;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+public class MockUserInfo implements UserInfo {
+
+ private Map<Group, List<OrganizationalEntity>> groups = new HashMap<Group, List<OrganizationalEntity>>();
+
+ private Map<OrganizationalEntity, String> emails = new HashMap<OrganizationalEntity, String>();
+
+ private Map<OrganizationalEntity, String> languages = new HashMap<OrganizationalEntity, String>();
+
+ private Map<OrganizationalEntity, String> displayNames = new HashMap<OrganizationalEntity, String>();
+
+ public Map<Group, List<OrganizationalEntity>> getGroups() {
+ return groups;
+ }
+
+ public void setGroups(Map<Group, List<OrganizationalEntity>> groups) {
+ this.groups = groups;
+ }
+
+ public Map<OrganizationalEntity, String> getEmails() {
+ return emails;
+ }
+
+ public void setEmails(Map<OrganizationalEntity, String> emails) {
+ this.emails = emails;
+ }
+
+ public String getEmailForEntity(OrganizationalEntity entity) {
+ return emails.get( entity );
+ }
+
+
+
+ public Map<OrganizationalEntity, String> getDisplayNames() {
+ return displayNames;
+ }
+
+ public void setDisplayNames(Map<OrganizationalEntity, String> displayNames) {
+ this.displayNames = displayNames;
+ }
+
+ public Map<OrganizationalEntity, String> getLanguages() {
+ return languages;
+ }
+
+ public void setLanguages(Map<OrganizationalEntity, String> languages) {
+ this.languages = languages;
+ }
+
+ public Iterator<OrganizationalEntity> getMembersForGroup(Group group) {
+ return groups.get( group ).iterator();
+ }
+
+ public boolean hasEmail(Group group) {
+ return emails.containsKey( group );
+ }
+
+ public String getDisplayName(OrganizationalEntity entity) {
+ String displayName = displayNames.get( entity );
+ return ( displayName != null ) ? displayName : entity.getId();
+ }
+
+ public String getLanguageForEntity(OrganizationalEntity entity) {
+ return languages.get( entity );
+ }
+
+
+}
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/drools.email.conf
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/drools.email.conf (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/drools.email.conf 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,5 @@
+from = from at domain.com
+replyTo = replyTo at domain.com
+mail.smtp.host = localhost
+mail.smtp.port = 25
+defaultLanguage = en-UK
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/orm.xml (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/orm.xml 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,535 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+ version="1.0">
+ <named-query name="TasksAssignedAsBusinessAdministrator">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity businessAdministrator
+where
+ businessAdministrator.id = :userId and
+ businessAdministrator in elements ( t.peopleAssignments.businessAdministrators ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ (
+ subjects.language = :language and
+ subjects in elements( t.subjects)
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+ <named-query name="TasksAssignedAsExcludedOwner">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity excludedOwners
+where
+ excludedOwners.id = :userId and
+ excludedOwners in elements ( t.peopleAssignments.excludedOwners ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ (
+ subjects.language = :language and
+ subjects in elements( t.subjects)
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+ <named-query name="TasksAssignedAsPotentialOwner">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subject.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t
+ left join t.taskData.createdBy
+ left join t.taskData.actualOwner
+ left join t.subjects as subject,
+ I18NText names,
+ I18NText descriptions,
+ OrganizationalEntity potentialOwners
+where
+ potentialOwners.id = :userId and
+ potentialOwners in elements ( t.peopleAssignments.potentialOwners ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ (
+ subject.language = :language
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+
+
+
+ t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+ <named-query name="TasksAssignedAsPotentialOwnerWithGroups">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy left join t.taskData.actualOwner,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity potentialOwners
+where
+ ( potentialOwners.id = :userId or potentialOwners.id in (:groupIds) ) and
+ potentialOwners in elements ( t.peopleAssignments.potentialOwners ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+
+ (
+ subjects.language = :language and
+ subjects in elements( t.subjects)
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+ t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+
+ <named-query name="TasksAssignedAsPotentialOwnerByGroup">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy left join t.taskData.actualOwner,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity potentialOwners
+where
+ potentialOwners.id = :groupId and
+ potentialOwners in elements ( t.peopleAssignments.potentialOwners ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ (
+ subjects.language = :language and
+ subjects in elements( t.subjects)
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+ t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+
+ <named-query name="SubTasksAssignedAsPotentialOwner">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy left join t.taskData.actualOwner,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity potentialOwners
+where
+ t.taskData.parentId = :parentId and
+ potentialOwners.id = :userId and
+ potentialOwners in elements ( t.peopleAssignments.potentialOwners ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ (
+ subjects.language = :language and
+ subjects in elements( t.subjects)
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+ t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+
+<named-query name="GetSubTasksByParentTaskId">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions
+
+where
+ t.taskData.parentId = :parentId and
+ names.language = :language and
+ names in elements( t.names) and
+
+ (
+ subjects.language = :language and
+ subjects in elements( t.subjects)
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+ t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+
+
+ <named-query name="TasksAssignedAsRecipient">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity recipients
+where
+ recipients.id = :userId and
+ recipients in elements ( t.peopleAssignments.recipients ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ (
+ subjects.language = :language and
+ subjects in elements( t.subjects)
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+ <named-query name="TasksAssignedAsTaskInitiator">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity taskInitiator
+where
+ taskInitiator.id = :userId and
+ taskInitiator = t.peopleAssignments.taskInitiator and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ (
+ subjects.language = :language and
+ subjects in elements( t.subjects)
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+ <named-query name="TasksAssignedAsTaskStakeholder">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity taskStakeholder
+where
+ taskStakeholder.id = :userId and
+ taskStakeholder in elements ( t.peopleAssignments.taskStakeholders ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ (
+ subjects.language = :language and
+ subjects in elements( t.subjects)
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+ <named-query name="TasksOwned">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions
+where
+ t.taskData.actualOwner.id = :userId and
+ names in elements( t.names) and
+ names.language = :language and
+
+ (
+ subjects.language = :language and
+ subjects in elements( t.subjects)
+ or t.subjects.size = 0
+ ) and
+
+ (
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions)
+ or t.descriptions.size = 0
+ ) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+ <named-query name="UnescalatedDeadlines">
+ <query>
+select
+ new org.drools.task.query.DeadlineSummary(
+ t.id,
+ d.id,
+ d.date)
+from
+ Task t,
+ Deadline d
+where
+ (d in elements( t.deadlines.startDeadlines ) or d in elements( t.deadlines.endDeadlines ) ) and
+ d.escalated = false
+order by
+ d.date
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+</entity-mappings>
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/persistence.xml (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/META-INF/persistence.xml 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<persistence version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
+http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence">
+ <persistence-unit name="org.drools.task">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <class>org.drools.task.Attachment</class>
+ <class>org.drools.task.Content</class>
+ <class>org.drools.task.BooleanExpression</class>
+ <class>org.drools.task.Comment</class>
+ <class>org.drools.task.Deadline</class>
+ <class>org.drools.task.Comment</class>
+ <class>org.drools.task.Deadline</class>
+ <class>org.drools.task.Delegation</class>
+ <class>org.drools.task.Escalation</class>
+ <class>org.drools.task.Group</class>
+ <class>org.drools.task.I18NText</class>
+ <class>org.drools.task.Notification</class>
+ <class>org.drools.task.EmailNotification</class>
+ <class>org.drools.task.EmailNotificationHeader</class>
+ <class>org.drools.task.PeopleAssignments</class>
+ <class>org.drools.task.Reassignment</class>
+ <class>org.drools.task.Status</class>
+ <class>org.drools.task.Task</class>
+ <class>org.drools.task.TaskData</class>
+ <class>org.drools.task.SubTasksStrategy</class>
+ <class>org.drools.task.OnParentAbortAllSubTasksEndStrategy</class>
+ <class>org.drools.task.OnAllSubTasksEndParentEndStrategy</class>
+
+ <class>org.drools.task.User</class>
+
+ <properties>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+ <property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
+ <property name="hibernate.connection.url" value="jdbc:h2:mem:mydb" />
+ <!-- property name="hibernate.connection.url" value="jdbc:h2:file:\dev\drools\trunk7\drools-process\drools-process-task\mydb"/ -->
+
+<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>-->
+<!-- <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> -->
+<!-- <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/postgres"/>-->
+
+
+ <property name="hibernate.connection.username" value="sa"/>
+ <property name="hibernate.connection.password" value="sasa"/>
+ <property name="hibernate.connection.autocommit" value="false" />
+ <property name="hibernate.max_fetch_depth" value="3"/>
+ <property name="hibernate.hbm2ddl.auto" value="create" />
+ <property name="hibernate.show_sql" value="true" />
+ </properties>
+ </persistence-unit>
+
+</persistence>
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,138 @@
+with ( new Task() ) {
+ priority = 100,
+ peopleAssignments = (with ( new PeopleAssignments() ) {
+ taskInitiator = users['darth' ],
+ potentialOwners = [users['bobba' ], users['jabba' ]],
+ excludedOwners = [users['dalai' ], users['christoper' ]],
+ taskStakeholders = [users['stuart' ], users['jane' ]],
+ businessAdministrators = [users['peter' ], users['steve' ]],
+ recipients = [users['sly' ], users['liz' ]]
+ }),
+ taskData = (with ( new TaskData() ) {
+ actualOwner = users[ 'liz' ],
+ createdBy = users[ 'sly' ],
+ activationTime = new Date( 10000000 ),
+ createdOn = new Date( 10000000 ),
+ expirationTime = new Date( 10000000 ),
+ status = Status.Ready,
+ documentAccessType = AccessType.Inline,
+ documentType = "mvel",
+ documentContentId = 20,
+ attachments = [
+ (with ( new Attachment() ) {
+ accessType = AccessType.Inline,
+ attachedAt = new Date( 10000000 ),
+ attachedBy = users['liz' ],
+ contentType = "text",
+ name = "file.txt",
+ size = 5000,
+ attachmentContentId = 5
+ }),
+ (with ( new Attachment() ) {
+ accessType = AccessType.Url,
+ attachedAt = new Date( 10000000 ),
+ attachedBy = users['liz' ],
+ contentType = "text",
+ name = "file2.txt",
+ size = 500,
+ attachmentContentId = 3
+ })
+ ],
+ comments = [
+ (with ( new Comment ) {
+ addedBy = users['peter' ],
+ addedAt = new Date( 10000000 ),
+ text = "this is a short comment"
+ }),
+ (with ( new Comment ) {
+ addedBy = users['steve' ],
+ addedAt = new Date( 10000000 ),
+ text = "this is a loooooooooooooooooooooooooooooooooooooooooooooooong comment"
+ })
+ ]
+ }),
+ names = [ new I18NText( "en-UK", "This is my task name" ),
+ new I18NText( "en-DK", "Dies ist mein task Name" )],
+ subjects = [ new I18NText( "en-UK", "This is my task subject" ),
+ new I18NText( "en-DK", "Das ist mein task Thema" ) ],
+ descriptions = [ new I18NText( "en-UK", "This is my task description" ),
+ new I18NText( "en-DK", "Das ist mein task Beschreibung" ) ],
+ delegation = ( with( new Delegation() ) {
+ allowed = AllowedToDelegate.PotentialOwners,
+ delegates = [ groups['crusaders' ], groups['knightsTempler' ] ]
+ }),
+ deadlines = ( with ( new Deadlines() ) {
+ startDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( 10000000 ),
+ escalated = true,
+ documentation = [ new I18NText( "en-UK", "Start Deadline documentation" ),
+ new I18NText( "en-DK", "Start Termin Dokumentation" ) ],
+ escalations = [
+ (with (new Escalation()) {
+ name = "My Start Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ notifications = [
+ (with (new Notification()) {
+ documentation = [ new I18NText( "en-UK", "Start Notification documentation" ),
+ new I18NText( "en-DK", "Start Anmeldung Dokumentation" ) ],
+ businessAdministrators = [ users['bruce' ], users['peter' ] ],
+ recipients = [ users['tony' ], users['darth' ] ],
+ names = [ new I18NText( "en-UK", "This is my start notification name" ),
+ new I18NText( "en-DK", "Dies ist mein start anmeldung Name" ) ],
+ subjects = [ new I18NText( "en-UK", "This is my start notification subject" ),
+ new I18NText( "en-DK", "Das ist mein start anmeldung Thema" ) ],
+ descriptions = [new I18NText( "en-UK", "This is my start notification description" ),
+ new I18NText( "en-DK", "Das ist mein start anmeldung Beschreibung" ) ]
+ })
+ ],
+ reassignments = [
+ (with (new Reassignment()) {
+ documentation = [ new I18NText( "en-UK", "Start Reassignment documentation" ),
+ new I18NText( "en-DK", "Start Neuzuweisung Dokumentation" ) ],
+ potentialOwners = [ users['bobba' ], users['luke' ] ]
+ })
+ ]
+
+ })
+ ]
+ })
+ ],
+ endDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( 10000000 ),
+ escalated = true,
+ documentation = [ new I18NText( "en-UK", "End Deadline documentation" ),
+ new I18NText( "en-DK", "Ende Termin Dokumentation" ) ],
+ escalations = [
+ (with (new Escalation()) {
+ name = "My End Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ notifications = [
+ (with (new Notification()) {
+ documentation = [ new I18NText( "en-UK", "End Notification documentation" ),
+ new I18NText( "en-DK", "Ende Anmeldung Dokumentation" ) ],
+ businessAdministrators = [ users['bobba' ], users['darth' ] ],
+ recipients = [ users['liz' ], users['jane' ] ],
+ names = [ new I18NText( "en-UK", "This is my end notification name" ),
+ new I18NText( "en-DK", "Dies ist mein ende anmeldung Name" ) ],
+ subjects = [ new I18NText( "en-UK", "This is my end notification subject" ),
+ new I18NText( "en-DK", "Das ist mein ende anmeldung Thema" ) ],
+ descriptions = [new I18NText( "en-UK", "This is my end notification description" ),
+ new I18NText( "en-DK", "Das ist mein ende anmeldung Beschreibung" ) ]
+ })
+ ],
+ reassignments = [
+ (with (new Reassignment()) {
+ documentation = [ new I18NText( "en-UK", "End Reassignment documentation" ),
+ new I18NText( "en-DK", "Ende Neuzuweisung Dokumentation" ) ],
+ potentialOwners = [ users['stuart' ], users['dalai' ] ]
+ })
+ ]
+
+ })
+ ]
+ })
+ ]
+ })
+};
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/LoadGroups.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/LoadGroups.mvel (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/LoadGroups.mvel 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,6 @@
+groups = [ 'knightsTempler' : new Group( "Knights Templer" ),
+ 'crusaders' : new Group( "Crusaders" )
+ ];
+
+return groups;
+
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/LoadUsers.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/LoadUsers.mvel (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/LoadUsers.mvel 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,12 @@
+users = [ 'darth' : new User('Darth Vader'),
+ 'bobba' : new User( 'Bobba Fet'), 'jabba' : new User('Jabba Hutt'),
+ 'dalai' : new User('Dalai Lama'), 'christoper' : new User('Christoper Columbus'),
+ 'stuart' : new User('Stuart Little'), 'jane' : new User('Jane Austin'),
+ 'peter' : new User('Peter Parker'), 'steve' : new User('Steve Rogers'),
+ 'sly' : new User('Sly Stalone'), 'liz' : new User('Elizabeth Windsor'),
+ 'bruce' : new User('Bruce Wayne' ), 'tony' : new User('Tony Stark'),
+ 'luke' : new User('Luke Cage'), 'admin' : new User('Administrator')
+ ];
+
+return users;
+
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/QueryData_UnescalatedDeadlines.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/QueryData_UnescalatedDeadlines.mvel (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/QueryData_UnescalatedDeadlines.mvel 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,121 @@
+format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
+
+tasks = [
+ (with ( new Task() ) {
+ priority = 20,
+ taskData = (with ( new TaskData() ) {
+ actualOwner = users[ 'peter' ],
+ createdBy = users[ 'sly' ],
+ createdOn = format.parse( "15/Jan/2008" ),
+ activationTime = format.parse( "20/Jan/2008" ),
+ status = Status.Created,
+ }),
+ deadlines = ( with ( new Deadlines() ) {
+ startDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( now.getTime() + 20000 ),
+ escalated = false,
+ escalations = [
+ (with (new Escalation()) {
+ name = "My Start Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ notifications = [
+ (with (new Notification()) {
+ recipients = [ users['tony' ], users['darth' ] ],
+ })
+ ],
+ reassignments = [
+ (with (new Reassignment()) {
+ potentialOwners = [ users['bobba' ], users['luke' ] ]
+ })
+ ]
+
+ })
+ ]
+ })
+ ],
+ endDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( now.getTime() + 22000 ),
+ escalated = false,
+ escalations = [
+ (with (new Escalation()) {
+ name = "My End Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ notifications = [
+ (with (new Notification()) {
+ recipients = [ users['liz' ], users['jane' ] ],
+ })
+ ],
+ reassignments = [
+ (with (new Reassignment()) {
+ potentialOwners = [ users['stuart' ], users['dalai' ] ]
+ })
+ ]
+
+ })
+ ]
+ })
+ ]
+ })
+ }),
+ (with ( new Task() ) {
+ priority = 150,
+ taskData = (with ( new TaskData() ) {
+ actualOwner = users[ 'steve' ],
+ createdBy = users[ 'tony' ],
+ createdOn = format.parse( "15/Feb/2008" ),
+ activationTime = format.parse( "20/Feb/2008" ),
+ status = Status.Created,
+ }),
+ deadlines = ( with ( new Deadlines() ) {
+ startDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( now.getTime() - 1000 ),
+ escalated = true,
+ escalations = [
+ (with (new Escalation()) {
+ name = "My Start Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ notifications = [
+ (with (new Notification()) {
+ recipients = [ users['tony' ], users['darth' ] ],
+ })
+ ],
+ reassignments = [
+ (with (new Reassignment()) {
+ potentialOwners = [ users['bobba' ], users['luke' ] ]
+ })
+ ]
+
+ })
+ ]
+ })
+ ],
+ endDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( now.getTime() + 24000 ),
+ escalations = [
+ (with (new Escalation()) {
+ name = "My End Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ notifications = [
+ (with (new Notification()) {
+ recipients = [ users['liz' ], users['jane' ] ],
+ })
+ ],
+ reassignments = [
+ (with (new Reassignment()) {
+ potentialOwners = [ users['stuart' ], users['dalai' ] ]
+ })
+ ]
+
+ })
+ ]
+ })
+ ]
+ })
+ })
+]
+
+return tasks;
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,29 @@
+with ( new Task() ) {
+ taskData = (with ( new TaskData() ) {
+ documentAccessType = AccessType.Inline,
+ documentType = "MVEL"
+ }),
+ deadlines = ( with ( new Deadlines() ) {
+ startDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( now.time + 5000 ),
+ escalations = [
+ (with (new Escalation()) {
+ name = "My Start Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ notifications = [
+ (with (new EmailNotification()) {
+ recipients = [ users['tony' ], users['darth' ] ],
+ emailHeaders = [ 'en-UK' : (with (new EmailNotificationHeader()) {
+ language = 'en-UK',
+ subject = "@{doc.subject}",
+ body = "@{doc.body}"
+ }) ]
+ })
+ ]
+ })
+ ]
+ })
+ ]
+ })
+};
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,25 @@
+with ( new Task() ) {
+ peopleAssignments = (with ( new PeopleAssignments() ) {
+ potentialOwners = [users['luke' ], users['tony']],
+ }),
+ taskData = (with ( new TaskData() ) {
+ documentAccessType = AccessType.Inline,
+ documentType = "MVEL"
+ }),
+ deadlines = ( with ( new Deadlines() ) {
+ startDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( now.time + 5000 ),
+ escalations = [
+ (with (new Escalation()) {
+ name = "My Start Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ reassignments = [(with ( new Reassignment() ) {
+ potentialOwners = [users['bobba' ], users['jabba' ]]
+ })]
+ })
+ ]
+ })
+ ]
+ })
+};
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryData_TasksOwned.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryData_TasksOwned.mvel (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryData_TasksOwned.mvel 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,117 @@
+format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
+
+tasks = [
+ (with ( new Task() ) {
+ priority = 20,
+ taskData = (with ( new TaskData() ) {
+ actualOwner = users[ 'peter' ],
+ createdOn = format.parse( "15/Jan/2008" ),
+ activationTime = format.parse( "20/Jan/2008" ),
+ status = Status.Created,
+ }),
+ peopleAssignments = (with ( new PeopleAssignments() ) {
+ taskInitiator = users['darth' ],
+ potentialOwners = [users['bobba' ], users['jabba' ]],
+ excludedOwners = [users['liz' ], users['dalai' ], users['christoper' ]]
+ }),
+ names = [ new I18NText( "en-UK", "This is my task name Jan" ),
+ new I18NText( "en-DK", "Dies ist mein task Name Jan" )],
+ subjects = [ new I18NText( "en-UK", "This is my task subject Jan" ),
+ new I18NText( "en-DK", "Das ist mein task Thema Jan" ) ],
+ descriptions = [ new I18NText( "en-UK", "This is my task description Jan" ),
+ new I18NText( "en-DK", "Das ist mein task Beschreibung Jan" ) ]
+ }),
+ (with ( new Task() ) {
+ priority = 150,
+ peopleAssignments = (with ( new PeopleAssignments() ) {
+ excludedOwners = [users['liz' ], users['dalai' ], users['christoper' ]],
+ potentialOwners = [users['bobba' ], users['jabba' ]],
+ taskStakeholders = [users['liz' ], users['stuart' ], users['jane' ]],
+ businessAdministrators = [users['peter' ], users['steve' ]],
+ recipients = [users['sly' ], users['bobba' ], users['liz' ]]
+ }),
+ taskData = (with ( new TaskData() ) {
+ actualOwner = users[ 'steve' ],
+ createdBy = users[ 'tony' ],
+ createdOn = format.parse( "15/Feb/2008" ),
+ activationTime = format.parse( "20/Feb/2008" ),
+ status = Status.Created,
+ }),
+ names = [ new I18NText( "en-UK", "This is my task name Feb" ),
+ new I18NText( "en-DK", "Dies ist mein task Name Feb" )],
+ subjects = [ new I18NText( "en-UK", "This is my task subject Feb" ),
+ new I18NText( "en-DK", "Das ist mein task Thema Feb" ) ],
+ descriptions = [ new I18NText( "en-UK", "This is my task description Feb" ),
+ new I18NText( "en-DK", "Das ist mein task Beschreibung Feb" ) ]
+ }),
+ (with ( new Task() ) {
+ priority = 90,
+ peopleAssignments = (with ( new PeopleAssignments() ) {
+ businessAdministrators = [users['liz' ], users['darth' ]],
+ potentialOwners = [users['bobba' ], users['jabba' ]],
+ }),
+ taskData = (with ( new TaskData() ) {
+ actualOwner = users[ 'peter' ],
+ createdBy = users[ 'steve' ],
+ createdOn = format.parse( "15/Mar/2008" ),
+ activationTime = format.parse( "20/Mar/2008" ),
+ status = Status.Created,
+ }),
+ names = [ new I18NText( "en-UK", "This is my task name Mar" ),
+ new I18NText( "en-DK", "Dies ist mein task Name Mar" )],
+ subjects = [ new I18NText( "en-UK", "This is my task subject Mar" ),
+ new I18NText( "en-DK", "Das ist mein task Thema Mar" ) ],
+ descriptions = [ new I18NText( "en-UK", "This is my task description Mar" ),
+ new I18NText( "en-DK", "Das ist mein task Beschreibung Mar" ) ]
+ }),
+ (with ( new Task() ) {
+ priority = 20,
+ taskData = (with ( new TaskData() ) {
+ actualOwner = users[ 'darth' ],
+ createdBy = users[ 'bobba' ],
+ createdOn = format.parse( "15/Apr/2008" ),
+ activationTime = format.parse( "20/Apr/2008" ),
+ status = Status.Created,
+ }),
+ names = [ new I18NText( "en-UK", "This is my task name Apr" ),
+ new I18NText( "en-DK", "Dies ist mein task Name Apr" )],
+ subjects = [ new I18NText( "en-UK", "This is my task subject Apr" ),
+ new I18NText( "en-DK", "Das ist mein task Thema Apr" ) ],
+ descriptions = [ new I18NText( "en-UK", "This is my task description Apr" ),
+ new I18NText( "en-DK", "Das ist mein task Beschreibung Apr" ) ]
+ }),
+ (with ( new Task() ) {
+ priority = 20,
+ taskData = (with ( new TaskData() ) {
+ actualOwner = users[ 'peter' ],
+ createdBy = users[ 'steve' ],
+ createdOn = format.parse( "15/May/2008" ),
+ activationTime = format.parse( "20/May/2008" ),
+ status = Status.Created,
+ }),
+ names = [ new I18NText( "en-UK", "This is my task name May" ),
+ new I18NText( "en-DK", "Dies ist mein task Name May" )],
+ subjects = [ new I18NText( "en-UK", "This is my task subject May" ),
+ new I18NText( "en-DK", "Das ist mein task Thema May" ) ],
+ descriptions = [ new I18NText( "en-UK", "This is my task description May" ),
+ new I18NText( "en-DK", "Das ist mein task Beschreibung May" ) ]
+ }),
+ (with ( new Task() ) {
+ priority = 15,
+ taskData = (with ( new TaskData() ) {
+ actualOwner = users[ 'steve' ],
+ createdBy = users[ 'steve' ],
+ createdOn = format.parse( "15/Jun/2008" ),
+ activationTime = format.parse( "20/Jun/2008" ),
+ status = Status.Created,
+ }),
+ names = [ new I18NText( "en-UK", "This is my task name Jun" ),
+ new I18NText( "en-DK", "Dies ist mein task Name Jun" )],
+ subjects = [ new I18NText( "en-UK", "This is my task subject Jun" ),
+ new I18NText( "en-DK", "Das ist mein task Thema Jun" ) ],
+ descriptions = [ new I18NText( "en-UK", "This is my task description Jun" ),
+ new I18NText( "en-DK", "Das ist mein task Beschreibung Jun" ) ]
+ })
+]
+
+return tasks;
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,27 @@
+format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
+
+[ 'darth' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
+ Status.Ready, 20, false, users[ 'peter' ], null,
+ format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ) ],
+ 'bobba' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
+ Status.Ready, 20, false, users[ 'peter' ], null,
+ format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
+ new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
+ Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ],
+ format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ),
+ new TaskSummary( 1, 'This is my task name Mar', 'This is my task subject Mar', 'This is my task description Mar',
+ Status.Ready, 90, false, users[ 'peter' ], users[ 'steve' ],
+ format.parse( "15/Mar/2008" ), format.parse( "20/Mar/2008" ), null ) ],
+ 'steve' : [ new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
+ Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ],
+ format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ) ],
+ 'liz' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
+ Status.Ready, 20, false, users[ 'peter' ], null,
+ format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
+ new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
+ Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ],
+ format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ) ],
+ 'sly' : [ new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
+ Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ],
+ format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ) ]
+]
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,21 @@
+format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
+
+[ 'peter' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
+ Status.Ready, 20, false, users[ 'peter' ], null,
+ format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
+ new TaskSummary( 1, 'This is my task name May', 'This is my task subject May', 'This is my task description May',
+ Status.Created, 20, false, users[ 'peter' ], users[ 'steve' ],
+ format.parse( "15/May/2008" ), format.parse( "20/May/2008" ), null ),
+ new TaskSummary( 1, 'This is my task name Mar', 'This is my task subject Mar', 'This is my task description Mar',
+ Status.Ready, 90, false, users[ 'peter' ], users[ 'steve' ],
+ format.parse( "15/Mar/2008" ), format.parse( "20/Mar/2008" ), null ) ],
+ 'steve' : [new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
+ Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ],
+ format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ),
+ new TaskSummary( 1, 'This is my task name Jun', 'This is my task subject Jun', 'This is my task description Jun',
+ Status.Created, 15, false, users[ 'steve' ], users[ 'steve' ],
+ format.parse( "15/Jun/2008" ), format.parse( "20/Jun/2008" ), null ) ]
+ 'darth' : [ new TaskSummary( 1, 'This is my task name Apr', 'This is my task subject Apr', 'This is my task description Apr',
+ Status.Created, 20, false, users[ 'darth' ], users[ 'bobba' ],
+ format.parse( "15/Apr/2008" ), format.parse( "20/Apr/2008" ), null ) ]
+]
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/drools-grid-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,21 @@
+format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
+
+[ 'peter' : [ new TaskSummary( 1, 'Dies ist mein task Name Jan', 'Das ist mein task Thema Jan', 'Das ist mein task Beschreibung Jan',
+ Status.Ready, 20, false, users[ 'peter' ], null,
+ format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
+ new TaskSummary( 1, 'Dies ist mein task Name May', 'Das ist mein task Thema May', 'Das ist mein task Beschreibung May',
+ Status.Created, 20, false, users[ 'peter' ], users[ 'steve' ],
+ format.parse( "15/May/2008" ), format.parse( "20/May/2008" ),null ),
+ new TaskSummary( 1, 'Dies ist mein task Name Mar', 'Das ist mein task Thema Mar', 'Das ist mein task Beschreibung Mar',
+ Status.Ready, 90, false, users[ 'peter' ], users[ 'steve' ],
+ format.parse( "15/Mar/2008" ), format.parse( "20/Mar/2008" ), null ) ],
+ 'steve' : [ new TaskSummary( 1, 'Dies ist mein task Name Feb', 'Das ist mein task Thema Feb', 'Das ist mein task Beschreibung Feb',
+ Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ],
+ format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ),
+ new TaskSummary( 1, 'Dies ist mein task Name Jun', 'Das ist mein task Thema Jun', 'Das ist mein task Beschreibung Jun',
+ Status.Created, 15, false, users[ 'steve' ], users[ 'steve' ],
+ format.parse( "15/Jun/2008" ), format.parse( "20/Jun/2008" ), null ) ]
+ 'darth' : [ new TaskSummary( 1, 'Dies ist mein task Name Apr', 'Das ist mein task Thema Apr', 'Das ist mein task Beschreibung Apr',
+ Status.Created, 20, false, users[ 'darth' ], users[ 'bobba' ],
+ format.parse( "15/Apr/2008" ), format.parse( "20/Apr/2008" ), null ) ]
+]
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/pom.xml (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-grid/pom.xml 2010-04-04 16:25:30 UTC (rev 32401)
@@ -0,0 +1,21 @@
+<?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>
+
+ <artifactId>drools-grid</artifactId>
+ <packaging>pom</packaging>
+ <name>Drools :: Grid</name>
+
+ <modules>
+ <module>drools-grid-core</module>
+ <module>drools-grid-task</module>
+ <module>drools-grid-rio</module>
+ </modules>
+
+</project>
More information about the jboss-svn-commits
mailing list