[jboss-svn-commits] JBL Code SVN: r18575 - in labs/jbosslabs/labs-3.0-build: core/core-api/src/main/java/org/jboss/labs/events and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Feb 25 04:32:13 EST 2008


Author: unibrew
Date: 2008-02-25 04:32:13 -0500 (Mon, 25 Feb 2008)
New Revision: 18575

Added:
   labs/jbosslabs/labs-3.0-build/core/core-api/src/main/java/org/jboss/labs/events/ProjectEvents.java
   labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/ProjectEventsConsumer.java
   labs/jbosslabs/labs-3.0-build/services/project-service/src/main/java/org/jboss/labs/events/
   labs/jbosslabs/labs-3.0-build/services/project-service/src/main/java/org/jboss/labs/events/ProjectEventsGenerator.java
Modified:
   labs/jbosslabs/labs-3.0-build/core/core-api/src/main/java/org/jboss/labs/events/service/EventsService.java
   labs/jbosslabs/labs-3.0-build/core/pom.xml
   labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/EventListenersStorageServiceRemote.java
   labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/impl/EventListenersStorageService.java
   labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/impl/EventsServiceBean.java
   labs/jbosslabs/labs-3.0-build/services/project-service/pom.xml
Log:
[JBLAB-898] Event service improvements and a sample of how to use it.

Added: labs/jbosslabs/labs-3.0-build/core/core-api/src/main/java/org/jboss/labs/events/ProjectEvents.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/core/core-api/src/main/java/org/jboss/labs/events/ProjectEvents.java	                        (rev 0)
+++ labs/jbosslabs/labs-3.0-build/core/core-api/src/main/java/org/jboss/labs/events/ProjectEvents.java	2008-02-25 09:32:13 UTC (rev 18575)
@@ -0,0 +1,41 @@
+/*
+* JBoss Labs. http://labs.jboss.com/jbosslabs
+*
+* Copyright © 2008  Red Hat Middleware, LLC. All rights reserved.
+*
+* This copyrighted material is made available to anyone wishing to use,
+* modify, copy, or redistribute it subject to the terms and conditions
+* of the GNU Lesser General Public License, v. 2.1.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT A WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License, v.2.1 along with this distribution; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+* 02110-1301, USA.
+*
+* Red Hat Author(s): Bob McWhirter, Przemyslaw Dej, Ryszard Kozmik,
+*     Tomasz Szymanski, Adam Warski, Pawel Wrzeszcz
+*/
+
+package org.jboss.labs.events;
+
+import java.util.EventListener;
+
+import org.jboss.annotation.ejb.Producer;
+
+/**
+ * An interface which defines asynchronous(JMS calls) methods that will
+ * raise events informing about changes in project's structure.
+ * 
+ * @author <a href="mailto:rkozmik at redhat.com">Ryszard Kozmik</a>
+ */
+ at Producer
+public interface ProjectEvents extends EventListener {
+
+    public void updated ( Class clazz , Integer id );
+
+}

Modified: labs/jbosslabs/labs-3.0-build/core/core-api/src/main/java/org/jboss/labs/events/service/EventsService.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/core/core-api/src/main/java/org/jboss/labs/events/service/EventsService.java	2008-02-24 19:07:25 UTC (rev 18574)
+++ labs/jbosslabs/labs-3.0-build/core/core-api/src/main/java/org/jboss/labs/events/service/EventsService.java	2008-02-25 09:32:13 UTC (rev 18575)
@@ -27,12 +27,14 @@
 import java.util.EventListener;
 
 /**
+ * Local interface for an EventsService Stateless Session Bean.
+ * 
  * @author <a href="mailto:rkozmik at redhat.com">Ryszard Kozmik</a>
  */
 @Local
 public interface EventsService {
 
     public boolean addEventsListener( Class clazz , EventListener listener );
-    public boolean removeEventListener( Class clazz , EventListener listener );
+    public boolean removeEventListener( EventListener listener );
 
 }

Modified: labs/jbosslabs/labs-3.0-build/core/pom.xml
===================================================================
--- labs/jbosslabs/labs-3.0-build/core/pom.xml	2008-02-24 19:07:25 UTC (rev 18574)
+++ labs/jbosslabs/labs-3.0-build/core/pom.xml	2008-02-25 09:32:13 UTC (rev 18575)
@@ -23,6 +23,12 @@
             <scope>provided</scope>
        </dependency>
        <dependency>
+           <groupId>jboss</groupId>
+           <artifactId>jboss-annotations-ejb3</artifactId>
+           <version>4.2.0.GA</version>
+           <scope>provided</scope>
+       </dependency>
+       <dependency>
             <groupId>jboss</groupId>
             <artifactId>jboss-jaxws</artifactId>
             <version>1.2.1.GA</version>

Added: labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/ProjectEventsConsumer.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/ProjectEventsConsumer.java	                        (rev 0)
+++ labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/ProjectEventsConsumer.java	2008-02-25 09:32:13 UTC (rev 18575)
@@ -0,0 +1,59 @@
+/*
+* JBoss Labs. http://labs.jboss.com/jbosslabs
+*
+* Copyright © 2008  Red Hat Middleware, LLC. All rights reserved.
+*
+* This copyrighted material is made available to anyone wishing to use,
+* modify, copy, or redistribute it subject to the terms and conditions
+* of the GNU Lesser General Public License, v. 2.1.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT A WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License, v.2.1 along with this distribution; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+* 02110-1301, USA.
+*
+* Red Hat Author(s): Bob McWhirter, Przemyslaw Dej, Ryszard Kozmik,
+*     Tomasz Szymanski, Adam Warski, Pawel Wrzeszcz
+*/
+
+package org.jboss.labs.events;
+
+import java.util.List;
+
+import javax.ejb.ActivationConfigProperty;
+
+import javax.ejb.EJB;
+
+import org.jboss.annotation.ejb.Consumer;
+import org.jboss.labs.events.service.EventListenersStorageServiceRemote;
+
+/**
+ * Project events consumer which receives all events and propagets them to all listeners.
+ * 
+ * @author <a href="mailto:rkozmik at redhat.com">Ryszard Kozmik</a>
+ */
+ at Consumer(activationConfig =
+    {
+        @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
+        @ActivationConfigProperty(propertyName="destination", propertyValue="queue/projectEvents")
+    })
+public class ProjectEventsConsumer implements ProjectEvents {
+
+    @EJB EventListenersStorageServiceRemote storage;
+
+    public ProjectEventsConsumer() {
+    }
+
+    public void updated(Class clazz, Integer id) {
+        List<ProjectEvents> list = storage.findAllListeners (((ProjectEvents)this).getClass());
+        for ( ProjectEvents listener : list ) {
+            listener.updated( clazz , id );
+        }
+    }
+
+}

Modified: labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/EventListenersStorageServiceRemote.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/EventListenersStorageServiceRemote.java	2008-02-24 19:07:25 UTC (rev 18574)
+++ labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/EventListenersStorageServiceRemote.java	2008-02-25 09:32:13 UTC (rev 18575)
@@ -27,17 +27,15 @@
 
 import java.util.List;
 
-import org.jboss.labs.events.service.impl.EventListenersStorageService;
-
 /**
  * @author <a href="mailto:rkozmik at redhat.com">Ryszard Kozmik</a>
  */
 public interface EventListenersStorageServiceRemote {
 
-    public boolean addEventListener (Class clazz, EventListener listener);
+    public <T extends EventListener> boolean addEventListener ( Class clazz, T listener );
     
-    public boolean removeEventListener( EventListener listener);
+    public <T extends EventListener> boolean removeEventListener( T listener);
     
-    //public <T extends EventListener> List<T> findAllListeners ();
+    public <T extends EventListener> List<T> findAllListeners ( Class<? extends T> type );
 
 }

Modified: labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/impl/EventListenersStorageService.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/impl/EventListenersStorageService.java	2008-02-24 19:07:25 UTC (rev 18574)
+++ labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/impl/EventListenersStorageService.java	2008-02-25 09:32:13 UTC (rev 18575)
@@ -46,32 +46,33 @@
     public EventListenersStorageService() {
     }
     
-    public boolean addEventListener (Class clazz, EventListener listener) {
+    public <T extends EventListener> boolean addEventListener (Class clazz, T listener) {
         if (clazz == null || listener==null) {
             return false;
         }
-        return listeners.add(new Entry(clazz,listener));
+        return listeners.add(new Entry<T>(clazz,listener));
     }
     
-    public boolean removeEventListener( EventListener listener) {
-        Entry entry = findListenersEntry( listener );
+    public <T extends EventListener> boolean removeEventListener( T listener ) {
+        Entry<T> entry = findListenersEntry( listener );
         if (entry==null) {
             return false;
         }
         return listeners.remove(entry);
     }
     
-//    public <T extends EventListener> List<T> findAllListeners (Class<T> type) {
-//        List<T> list = new LinkedList<T>();
-//        for ( Entry entry : listeners ) {
-//            if ( entry.getListener().getClass().getName().equals(type.getClass().getName())) {
-//                list.add(entry.getListener());
-//            }
-//        }
-//    }
+    public <T extends EventListener> List<T> findAllListeners (Class<? extends T> type) {
+        List<T> list = new LinkedList<T>();
+        for ( Entry<T> entry : listeners ) {
+            if ( entry.getListener().getClass().getName().equals(type.getClass().getName())) {
+                list.add(entry.getListener());
+            }
+        }
+        return list;
+    }
     
-    private Entry findListenersEntry ( EventListener listener ) {
-        for ( Entry entry : this.listeners ) {
+    private <T extends EventListener> Entry<T> findListenersEntry ( T listener ) {
+        for ( Entry<T> entry : this.listeners ) {
             if ( entry.getListener().equals(listener) ) {
                 return entry;
             }

Modified: labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/impl/EventsServiceBean.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/impl/EventsServiceBean.java	2008-02-24 19:07:25 UTC (rev 18574)
+++ labs/jbosslabs/labs-3.0-build/services/events-service/src/main/java/org/jboss/labs/events/service/impl/EventsServiceBean.java	2008-02-25 09:32:13 UTC (rev 18575)
@@ -28,24 +28,39 @@
 import javax.ejb.EJB;
 import javax.ejb.Stateless;
 
-import org.jboss.labs.events.ProjectEventsListener;
 import org.jboss.labs.events.service.EventListenersStorageServiceRemote;
 import org.jboss.labs.events.service.EventsService;
 
 
 /**
+ * This is a Stateless Session Bean that enables other services to register/unregister
+ * event listeners for different types of event types.
+ * 
  * @author <a href="mailto:rkozmik at redhat.com">Ryszard Kozmik</a>
  */
 @Stateless(name="EventsService")
 public class EventsServiceBean implements EventsService {
 
+    // This is where all listeners are stored.
     @EJB EventListenersStorageServiceRemote storage;
 
+    /**
+     * @param clazz - the purpose for this parameter is to have one registered listener
+     *          class that uses it. Important while registered services are being redeployed
+     *          to enable GC to collect old listener.
+     * @param listener - new implementation of specific EventListener
+     * @return A boolean value telling whether the listener was successfully registered or not.
+     */
     public boolean addEventsListener( Class clazz, EventListener listener ) {
         return storage.addEventListener( clazz , listener );
     }
-
-    public boolean removeEventListener( Class clazz , EventListener listener ) {
+    
+    /**
+     * @param clazz - in this case Class object is used as a key to search for a listener to remove.
+     * @param listener - a listener object to remove
+     * @return A boolean value telling whether the listener was successfully unregistered or not.
+     */
+    public boolean removeEventListener( EventListener listener ) {
         return storage.removeEventListener( listener );
     }
     

Modified: labs/jbosslabs/labs-3.0-build/services/project-service/pom.xml
===================================================================
--- labs/jbosslabs/labs-3.0-build/services/project-service/pom.xml	2008-02-24 19:07:25 UTC (rev 18574)
+++ labs/jbosslabs/labs-3.0-build/services/project-service/pom.xml	2008-02-25 09:32:13 UTC (rev 18575)
@@ -58,5 +58,11 @@
       <version>1.2.1.GA</version>
       <scope>provided</scope>
     </dependency>
+    <dependency>
+      <groupId>jboss</groupId>
+      <artifactId>jbossall-client</artifactId>
+      <version>4.2.2.GA</version>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
 </project>

Added: labs/jbosslabs/labs-3.0-build/services/project-service/src/main/java/org/jboss/labs/events/ProjectEventsGenerator.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/services/project-service/src/main/java/org/jboss/labs/events/ProjectEventsGenerator.java	                        (rev 0)
+++ labs/jbosslabs/labs-3.0-build/services/project-service/src/main/java/org/jboss/labs/events/ProjectEventsGenerator.java	2008-02-25 09:32:13 UTC (rev 18575)
@@ -0,0 +1,64 @@
+/*
+* JBoss Labs. http://labs.jboss.com/jbosslabs
+*
+* Copyright © 2008  Red Hat Middleware, LLC. All rights reserved.
+*
+* This copyrighted material is made available to anyone wishing to use,
+* modify, copy, or redistribute it subject to the terms and conditions
+* of the GNU Lesser General Public License, v. 2.1.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT A WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License, v.2.1 along with this distribution; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+* 02110-1301, USA.
+*
+* Red Hat Author(s): Bob McWhirter, Przemyslaw Dej, Ryszard Kozmik,
+*     Tomasz Szymanski, Adam Warski, Pawel Wrzeszcz
+*/
+
+package org.jboss.labs.events;
+
+import javax.naming.InitialContext;
+import org.jboss.ejb3.mdb.ProducerObject;
+import org.jboss.ejb3.mdb.ProducerManager;
+
+
+/**
+ * This class generates project's events by executing asynchronous methods of ProjectEvents producer.
+ * 
+ * @author <a href="mailto:rkozmik at redhat.com">Ryszard Kozmik</a>
+ */
+public class ProjectEventsGenerator {
+    
+    /**
+     * Just an example of how to send an event.
+     * 
+     * TODO: This is just a dummy implementation for tests.
+     * 
+     * @throws Exception
+     */
+    public void send () throws Exception {
+    
+        InitialContext ctx = new InitialContext();
+        ProjectEvents tester = (ProjectEvents)ctx.lookup(ProjectEvents.class.getName());
+        
+        ProducerObject po = (ProducerObject)tester;
+        ProducerManager manager = po.getProducerManager();
+        
+        manager.connect(); // internally create a JMS connection
+        try
+        {
+            tester.updated( getClass() , new Integer(1));
+        }
+        finally
+        {
+            manager.close(); // clean up the JMS connection
+        }
+        
+    }
+}




More information about the jboss-svn-commits mailing list