[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