[richfaces-svn-commits] JBoss Rich Faces SVN: r12257 - trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/bean.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Tue Jan 13 11:59:19 EST 2009
Author: dsvyatobatsko
Date: 2009-01-13 11:59:19 -0500 (Tue, 13 Jan 2009)
New Revision: 12257
Modified:
trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/bean/AjaxPushTestBean.java
Log:
refactored the thread + NPE fix
Modified: trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/bean/AjaxPushTestBean.java
===================================================================
--- trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/bean/AjaxPushTestBean.java 2009-01-13 16:54:05 UTC (rev 12256)
+++ trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/bean/AjaxPushTestBean.java 2009-01-13 16:59:19 UTC (rev 12257)
@@ -17,31 +17,31 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
+ */
package org.ajax4jsf.bean;
import java.util.Date;
import java.util.EventListener;
import java.util.EventObject;
+import java.util.concurrent.atomic.AtomicInteger;
import org.ajax4jsf.event.PushEventListener;
-public class AjaxPushTestBean implements Runnable {
+public class AjaxPushTestBean {
private boolean enabled = false;
- private Date startDate;
-
private PushEventListener listener;
- private Thread thread;
+ private EventGenerator generator;
- private int eventsSent = 0;
-
private String content = "content";
+ private final Object lock = new Object();
+
/**
* Gets value of content field.
+ *
* @return value of content field
*/
public String getContent() {
@@ -50,7 +50,9 @@
/**
* Set a new value for content field.
- * @param content a new value for content field
+ *
+ * @param content
+ * a new value for content field
*/
public void setContent(String content) {
this.content = content;
@@ -58,60 +60,41 @@
/**
* Gets value of eventsSent field.
+ *
* @return value of eventsSent field
*/
public int getEventsSent() {
- return eventsSent;
+ EventGenerator generator = getGenerator();
+ return generator != null ? generator.getEventsSent() : 0;
}
- /**
- * Set a new value for eventsSent field.
- * @param eventsSent a new value for eventsSent field
- */
- public void setEventsSent(int eventsSent) {
- this.eventsSent = eventsSent;
- }
-
public void addListener(EventListener listener) {
- synchronized (listener) {
+ synchronized (lock) {
if (this.listener != listener) {
this.listener = (PushEventListener) listener;
}
}
}
- public void run() {
- while (thread != null) {
- try {
- long left = System.currentTimeMillis() - startDate.getTime();
- if (left >= 60000) {
- stop();
- }
- listener.onEvent(new EventObject(this));
- eventsSent++;
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- e.printStackTrace();
+ public void start() {
+ synchronized (lock) {
+ if (generator == null && listener != null) {
+ generator = new EventGenerator(listener, 60000);
+ Thread thread = new Thread(generator);
+ thread.setDaemon(true);
+ thread.start();
+ setEnabled(true);
}
}
}
- public void start() {
- if (thread == null) {
- thread = new Thread(this);
- thread.setDaemon(true);
- thread.start();
- startDate = new Date();
- setEnabled(true);
- }
- }
-
public void stop() {
- if (thread != null) {
- startDate = null;
- eventsSent = 0;
- setEnabled(false);
- thread = null;
+ synchronized (lock) {
+ if (generator != null) {
+ generator.stop();
+ setEnabled(false);
+ generator = null;
+ }
}
}
@@ -127,4 +110,55 @@
stop();
start();
}
+
+ private EventGenerator getGenerator() {
+ return generator;
+ }
+
+ private static class EventGenerator implements Runnable {
+
+ private final PushEventListener listener;
+
+ private final long time;
+
+ private AtomicInteger eventsSent = new AtomicInteger(0);
+
+ private volatile boolean stopped;
+
+ public EventGenerator(PushEventListener listener, long time) {
+ this.listener = listener;
+ this.time = time;
+ }
+
+ public void stop() {
+ stopped = true;
+ synchronized (this) {
+ notify();
+ }
+ }
+
+ public void run() {
+ Date startDate = new Date();
+ while (true) {
+ try {
+ long left = System.currentTimeMillis() - startDate.getTime();
+ if (left >= time || stopped) {
+ break;
+ }
+ listener.onEvent(new EventObject(this));
+ eventsSent.incrementAndGet();
+ synchronized (this) {
+ wait(500);
+ }
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public int getEventsSent() {
+ return eventsSent.get();
+ }
+ }
+
}
More information about the richfaces-svn-commits
mailing list