[jboss-svn-commits] JBL Code SVN: r29859 - in labs/jbossrules/trunk/drools-vsm: src/main/java/org/drools/vsm and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Oct 28 14:32:46 EDT 2009
Author: salaboy21
Date: 2009-10-28 14:32:44 -0400 (Wed, 28 Oct 2009)
New Revision: 29859
Added:
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioConnector.java
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioIoHandler.java
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioIoWriter.java
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioServer.java
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/SessionService.java
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/service/
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/service/SessionServiceImpl.java
labs/jbossrules/trunk/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerRioRemoteTest.java
labs/jbossrules/trunk/drools-vsm/src/test/resources/org/drools/sessionService.groovy
Modified:
labs/jbossrules/trunk/drools-vsm/pom.xml
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/remote/ServiceManagerRemoteClient.java
Log:
Grid features with rio.
Modified: labs/jbossrules/trunk/drools-vsm/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-vsm/pom.xml 2009-10-28 18:19:25 UTC (rev 29858)
+++ labs/jbossrules/trunk/drools-vsm/pom.xml 2009-10-28 18:32:44 UTC (rev 29859)
@@ -57,7 +57,67 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.2</version>
- </dependency>
- </dependencies>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rioproject</groupId>
+ <artifactId>rio</artifactId>
+ <version>4.0-M3-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rioproject</groupId>
+ <artifactId>cybernode</artifactId>
+ <version>4.0-M3-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rioproject</groupId>
+ <artifactId>monitor</artifactId>
+ <version>4.0-M3-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rioproject</groupId>
+ <artifactId>boot</artifactId>
+ <version>4.0-M3-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rioproject.tools</groupId>
+ <artifactId>cli</artifactId>
+ <version>4.0-M3-SNAPSHOT</version>
+ </dependency>
+
+
+ </dependencies>
+ <repositories>
+ <repository>
+ <id>rio</id>
+ <url>http://www.rio-project.org/maven2</url>
+ </repository>
+ <repository>
+ <id>elastic-grid</id>
+ <url>http://maven.elastic-grid.com</url>
+ </repository>
+ <repository>
+ <id>jboss-snapshots</id>
+ <url>http://snapshots.jboss.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>
Modified: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/remote/ServiceManagerRemoteClient.java
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/remote/ServiceManagerRemoteClient.java 2009-10-28 18:19:25 UTC (rev 29858)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/remote/ServiceManagerRemoteClient.java 2009-10-28 18:32:44 UTC (rev 29859)
@@ -39,7 +39,7 @@
this.client = client;
this.counter = new AtomicInteger();
}
-
+
private int sessionId = -1;
public boolean connect() {
Added: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioConnector.java
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioConnector.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioConnector.java 2009-10-28 18:32:44 UTC (rev 29859)
@@ -0,0 +1,130 @@
+package org.drools.vsm.rio;
+
+import java.io.IOException;
+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 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.SystemEventListenerFactory;
+import org.drools.vsm.GenericConnector;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class RioConnector
+ implements
+ GenericConnector,
+ GenericIoWriter {
+
+ protected final String name;
+ protected AtomicInteger counter;
+ protected SessionService sessionService;
+ protected SocketAddress address;
+ protected SystemEventListener eventListener;
+ protected RioIoHandler ioHandler;
+
+ public RioConnector(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;
+ this.ioHandler = new RioIoHandler(SystemEventListenerFactory.getSystemEventListener());
+ }
+
+ public RioConnector(String name,
+ SystemEventListener eventListener, SessionService sessionService) {
+ if (name == null) {
+ throw new IllegalArgumentException("Name can not be null");
+ }
+ this.name = name;
+ this.counter = new AtomicInteger();
+ this.eventListener = eventListener;
+ this.sessionService = sessionService;
+ this.ioHandler = new RioIoHandler(this.eventListener);
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.mina.Messenger#connect()
+ */
+ public boolean connect() {
+// Class[] classes = new Class[]{org.drools.vsm.rio.SessionService.class};
+// ServiceTemplate tmpl = new ServiceTemplate(null, classes, null);
+//
+// LookupDiscoveryManager lookupDiscovery = null;
+// ServiceItem item = null;
+// try {
+// lookupDiscovery = new LookupDiscoveryManager(LookupDiscoveryManager.ALL_GROUPS, null, null);
+//
+//
+// System.out.println("Discovering Manager service ...");
+//
+// ServiceDiscoveryManager serviceDiscovery = new ServiceDiscoveryManager(lookupDiscovery, new LeaseRenewalManager());
+//
+// /* Wait no more then 10 seconds to discover the service */
+// item = serviceDiscovery.lookup(tmpl, null, 10000);
+//
+// serviceDiscovery.terminate();
+// } catch (InterruptedException ex) {
+// Logger.getLogger(RioConnector.class.getName()).log(Level.SEVERE, null, ex);
+// } catch (RemoteException ex) {
+// Logger.getLogger(RioConnector.class.getName()).log(Level.SEVERE, null, ex);
+// } catch (IOException ex) {
+// Logger.getLogger(RioConnector.class.getName()).log(Level.SEVERE, null, ex);
+// }
+// if (item != null) {
+// System.out.println("Discovered Account service");
+// if (item.service instanceof SessionService) {
+// sessionService = (SessionService) item.service;
+//
+// }
+// return true;
+// } else {
+// System.out.println("Session service not discovered, make sure the" +
+// "service is deployed");
+// return false;
+// }
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.mina.Messenger#disconnect()
+ */
+ public void disconnect() {
+ //I don't need to be disconected
+ }
+
+ public void write(Message msg) {
+ if (sessionService != null) {
+ try {
+
+ ioHandler.messageReceived(sessionService, this.sessionService.write(msg));
+
+
+ } catch (RemoteException ex) {
+ Logger.getLogger(RioConnector.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (Exception ex) {
+ Logger.getLogger(RioConnector.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+
+ public void addResponseHandler(int id, MessageResponseHandler responseHandler) {
+ ioHandler.addResponseHandler(id, responseHandler);
+ }
+
+ public void setSessionService(SessionService sessionService) {
+ this.sessionService = sessionService;
+ }
+}
Added: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioIoHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioIoHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioIoHandler.java 2009-10-28 18:32:44 UTC (rev 29859)
@@ -0,0 +1,69 @@
+package org.drools.vsm.rio;
+
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+
+import org.drools.SystemEventListener;
+import org.drools.vsm.GenericMessageHandler;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class RioIoHandler {
+ protected Map<Integer, MessageResponseHandler> responseHandlers;
+
+ private GenericMessageHandler handler;
+
+ /**
+ * Listener used for logging
+ */
+ private final SystemEventListener systemEventListener;
+
+ public RioIoHandler(SystemEventListener systemEventListener) {
+ this( systemEventListener,
+ null );
+
+ }
+
+ public RioIoHandler(SystemEventListener systemEventListener,
+ GenericMessageHandler handler) {
+ this.systemEventListener = systemEventListener;
+ this.responseHandlers = new ConcurrentHashMap<Integer, MessageResponseHandler>();
+ this.handler = handler;
+
+ }
+
+ public void addResponseHandler(int id,
+ MessageResponseHandler responseHandler) {
+ this.responseHandlers.put( id,
+ responseHandler );
+ }
+
+
+
+ public void messageReceived(SessionService sessionService, Object object) throws Exception {
+ Message msg = (Message) object;
+
+ systemEventListener.debug( "Message receieved : " + msg );
+
+ MessageResponseHandler responseHandler = (MessageResponseHandler) responseHandlers.remove( msg.getResponseId() );
+
+ if ( responseHandler != null ) {
+ Object payload = msg.getPayload();
+ if ( payload != null && payload instanceof RuntimeException ) {
+ responseHandler.setError( (RuntimeException) payload );
+ } else {
+ responseHandler.receive( msg );
+ }
+ } else if ( handler != null ) {
+ this.handler.messageReceived( new RioIoWriter( sessionService ),
+ (Message) object );
+ } else {
+ throw new RuntimeException( "Unable to process Message" );
+ }
+ }
+
+
+
+}
Added: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioIoWriter.java
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioIoWriter.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioIoWriter.java 2009-10-28 18:32:44 UTC (rev 29859)
@@ -0,0 +1,27 @@
+package org.drools.vsm.rio;
+
+
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.Message;
+
+public class RioIoWriter
+ implements
+ GenericIoWriter {
+ private SessionService sessionService;
+
+ public RioIoWriter(SessionService sessionService) {
+ this.sessionService = sessionService;
+ }
+
+ public void write(Message message) {
+ try {
+ this.sessionService.write(message);
+ } catch (RemoteException ex) {
+ Logger.getLogger(RioIoWriter.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
+}
Added: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioServer.java
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioServer.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/RioServer.java 2009-10-28 18:32:44 UTC (rev 29859)
@@ -0,0 +1,47 @@
+package org.drools.vsm.rio;
+
+
+import java.io.File;
+import java.io.IOException;
+
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.drools.vsm.AcceptorService;
+import org.rioproject.cybernode.StaticCybernode;
+
+public class RioServer
+ implements
+ AcceptorService {
+ private SessionService sessionService;
+ private String opstring = "src/test/resources/org/drools/sessionService.groovy";
+
+ public RioServer() {
+
+ }
+
+ public synchronized void start() throws IOException {
+ try {
+ StaticCybernode cybernode = new StaticCybernode();
+ Map<String, Object> map = cybernode.activate(new File(opstring));
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
+ String beanName = entry.getKey();
+ Object beanImpl = entry.getValue();
+ if (beanName.equals("SessionService")) {
+ sessionService = (SessionService) beanImpl;
+ }
+ }
+ } catch (Exception ex) {
+ Logger.getLogger(RioServer.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
+ public synchronized void stop() {
+ //do nothing
+ }
+ public SessionService getSessionService(){
+ return this.sessionService;
+ }
+
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/SessionService.java
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/SessionService.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/SessionService.java 2009-10-28 18:32:44 UTC (rev 29859)
@@ -0,0 +1,19 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.drools.vsm.rio;
+
+import java.rmi.RemoteException;
+import org.drools.vsm.Message;
+
+/**
+ *
+ * @author salaboy
+ */
+public interface SessionService {
+
+ public Message write(Message msg) throws RemoteException;
+
+
+}
Added: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/service/SessionServiceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/service/SessionServiceImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/rio/service/SessionServiceImpl.java 2009-10-28 18:32:44 UTC (rev 29859)
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.vsm.rio.service;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.List;
+import org.drools.SystemEventListener;
+import org.drools.SystemEventListenerFactory;
+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.vsm.Message;
+import org.drools.vsm.ServiceManagerData;
+import org.drools.vsm.rio.SessionService;
+
+/**
+ *
+ * @author salaboy
+ */
+public class SessionServiceImpl implements SessionService{
+ private SystemEventListener systemEventListener;
+
+ private ServiceManagerData data;
+
+ public SessionServiceImpl() {
+ this.systemEventListener = SystemEventListenerFactory.getSystemEventListener();
+ this.data = new ServiceManagerData();
+ }
+
+
+ public SessionServiceImpl(ServiceManagerData data,
+ SystemEventListener systemEventListener) {
+ this.systemEventListener = systemEventListener;
+ this.data = data;
+ }
+
+
+ public Message write(Message msg) throws RemoteException {
+ 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
+ return new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ new FinishedCommand() );
+ } else {
+ // return the payload
+ return new Message( msg.getSessionId(),
+ msg.getResponseId(),
+ msg.isAsync(),
+ localKresults ) ;
+ }
+ }
+
+}
Added: labs/jbossrules/trunk/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerRioRemoteTest.java
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerRioRemoteTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerRioRemoteTest.java 2009-10-28 18:32:44 UTC (rev 29859)
@@ -0,0 +1,38 @@
+package org.drools.vsm;
+
+
+import org.drools.SystemEventListenerFactory;
+import org.drools.vsm.remote.ServiceManagerRemoteClient;
+import org.drools.vsm.rio.RioConnector;
+import org.drools.vsm.rio.RioServer;
+
+public class ServiceManagerRioRemoteTest extends ServiceManagerTestBase {
+ AcceptorService server;
+
+ protected void setUp() throws Exception {
+
+
+ ServiceManagerData serverData = new ServiceManagerData();
+
+
+
+
+ //setup Server
+ RioServer rioServer = new RioServer();
+ rioServer.start();
+ RioConnector connector = new RioConnector("client 1", SystemEventListenerFactory.getSystemEventListener(), rioServer.getSessionService());
+
+ // setup Client
+ this.client = new ServiceManagerRemoteClient( "client 1", connector );
+ //this.client.connect();
+
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ ((ServiceManagerRemoteClient) client).disconnect();
+ //this.server.stop();
+ }
+
+}
Added: labs/jbossrules/trunk/drools-vsm/src/test/resources/org/drools/sessionService.groovy
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/test/resources/org/drools/sessionService.groovy (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/test/resources/org/drools/sessionService.groovy 2009-10-28 18:32:44 UTC (rev 29859)
@@ -0,0 +1,22 @@
+deployment(name:'sessionService') {
+ groups 'rio'
+
+ //resources id:'impl.jars', 'sparkplug_1.0-SNAPSHOT/lib/sparkplug-oar-1.0-SNAPSHOT-impl.jar'
+ //resources id:'client.jars', 'sparkplug_1.0-SNAPSHOT/lib/sparkplug-oar-1.0-SNAPSHOT-dl.jar'
+
+
+ service(name: 'SessionService') {
+ interfaces {
+ classes 'org.drools.vsm.rio.SessionService'
+ //resources ref:'client.jars'
+ }
+ implementation(class:'org.drools.vsm.rio.service.SessionServiceImpl') {
+ //resources ref:'impl.jars'
+ }
+
+ maintain 1
+ }
+
+
+}
+
More information about the jboss-svn-commits
mailing list