[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