[Jboss-cvs] JBossAS SVN: r56264 - in trunk/ejb3/src: main/org/jboss/ejb3 main/org/jboss/ejb3/mdb main/org/jboss/ejb3/service main/org/jboss/ejb3/stateful main/org/jboss/ejb3/stateless main/org/jboss/ejb3/timerservice main/org/jboss/ejb3/timerservice/jboss main/org/jboss/ejb3/timerservice/quartz test/org/jboss/ejb3/test/timer test/org/jboss/ejb3/test/timer/unit
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Aug 25 07:53:04 EDT 2006
Author: wolfc
Date: 2006-08-25 07:52:43 -0400 (Fri, 25 Aug 2006)
New Revision: 56264
Modified:
trunk/ejb3/src/main/org/jboss/ejb3/Container.java
trunk/ejb3/src/main/org/jboss/ejb3/ServiceDelegateWrapper.java
trunk/ejb3/src/main/org/jboss/ejb3/ServiceDelegateWrapperMBean.java
trunk/ejb3/src/main/org/jboss/ejb3/mdb/MessagingContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/timerservice/TimerServiceFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/timerservice/jboss/JBossTimerServiceFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/timerservice/jboss/TimerServiceFacade.java
trunk/ejb3/src/main/org/jboss/ejb3/timerservice/quartz/QuartzTimerServiceFactory.java
trunk/ejb3/src/test/org/jboss/ejb3/test/timer/BaseTimerTesterBean.java
trunk/ejb3/src/test/org/jboss/ejb3/test/timer/TimerTester.java
trunk/ejb3/src/test/org/jboss/ejb3/test/timer/unit/RemoteUnitTestCase.java
Log:
EJBTHREE-630: persist timers on undeployment
Modified: trunk/ejb3/src/main/org/jboss/ejb3/Container.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/Container.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/Container.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -45,6 +45,11 @@
TimerService getTimerService();
+ /**
+ * This method is called by EJBTimerServiceImpl to re-establish a persistent timer.
+ */
+ TimerService getTimerService(Object pKey);
+
Pool getPool();
Object construct();
Modified: trunk/ejb3/src/main/org/jboss/ejb3/ServiceDelegateWrapper.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/ServiceDelegateWrapper.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/ServiceDelegateWrapper.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -23,6 +23,9 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+
+import javax.ejb.TimerService;
+
import org.jboss.system.ServiceMBeanSupport;
/**
@@ -138,4 +141,10 @@
else throw new RuntimeException(t);
}
}
+
+ // FIXME: this is here for EJBTHREE-630, re-establishing timers
+ public TimerService getTimerService(Object pKey)
+ {
+ return ((Container) delegate).getTimerService(pKey);
+ }
}
Modified: trunk/ejb3/src/main/org/jboss/ejb3/ServiceDelegateWrapperMBean.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/ServiceDelegateWrapperMBean.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/ServiceDelegateWrapperMBean.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -21,6 +21,8 @@
*/
package org.jboss.ejb3;
+import javax.ejb.TimerService;
+
import org.jboss.system.ServiceMBean;
/**
@@ -31,4 +33,6 @@
*/
public interface ServiceDelegateWrapperMBean extends ServiceMBean
{
+ // FIXME: this is here to re-establish timers (EJBTHREE-630), do not use for other purposes
+ TimerService getTimerService(Object pKey);
}
Modified: trunk/ejb3/src/main/org/jboss/ejb3/mdb/MessagingContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/mdb/MessagingContainer.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/mdb/MessagingContainer.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -149,6 +149,8 @@
timerService = TimerServiceFactory.getInstance().createTimerService(this.getObjectName(), this);
startProxies();
+
+ TimerServiceFactory.getInstance().restoreTimerService(timerService);
}
protected void innerStart() throws Exception
@@ -254,6 +256,12 @@
return timerService;
}
+ public TimerService getTimerService(Object pKey)
+ {
+ assert timerService != null : "Timer Service not yet initialized";
+ return timerService;
+ }
+
public void callTimeout(Timer timer) throws Exception
{
Method timeout = callbackHandler.getTimeoutCallback();
Modified: trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceContainer.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceContainer.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -145,6 +145,8 @@
injectDependencies(beanContext);
registerManagementInterface();
+
+ TimerServiceFactory.getInstance().restoreTimerService(timerService);
}
catch (Exception e)
{
@@ -181,6 +183,12 @@
return timerService;
}
+ public TimerService getTimerService(Object pKey)
+ {
+ assert timerService != null : "Timer Service not yet initialized";
+ return timerService;
+ }
+
public void invokePostConstruct(BeanContext beanContext)
{
//Ignore
Modified: trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulContainer.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulContainer.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -350,10 +350,14 @@
public TimerService getTimerService()
{
- throw new RuntimeException(
- "Illegal operation. StrictlyPooledSessionBean beans can't access TimerService");
+ throw new UnsupportedOperationException("stateful bean doesn't support TimerService (EJB3 18.2#2)");
}
+ public TimerService getTimerService(Object pKey)
+ {
+ return getTimerService();
+ }
+
@Override
public void invokePostActivate(BeanContext beanContext)
{
Modified: trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessContainer.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessContainer.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -96,6 +96,8 @@
super.start();
//timerService = EjbTimerUtil.getTimerService(this, this);
timerService = TimerServiceFactory.getInstance().createTimerService(this.getObjectName(), this);
+
+ TimerServiceFactory.getInstance().restoreTimerService(timerService);
}
catch (Exception e)
{
@@ -123,6 +125,12 @@
return timerService;
}
+ public TimerService getTimerService(Object pKey)
+ {
+ assert timerService != null : "Timer Service not yet initialized";
+ return timerService;
+ }
+
public void callTimeout(Timer timer) throws Exception
{
Method timeout = callbackHandler.getTimeoutCallback();
Modified: trunk/ejb3/src/main/org/jboss/ejb3/timerservice/TimerServiceFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/timerservice/TimerServiceFactory.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/timerservice/TimerServiceFactory.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -77,4 +77,11 @@
}
public abstract void removeTimerService(TimerService timerService);
+
+ /**
+ * Restores the timers held with the specified timer service.
+ *
+ * @param timerService
+ */
+ public abstract void restoreTimerService(TimerService timerService);
}
Modified: trunk/ejb3/src/main/org/jboss/ejb3/timerservice/jboss/JBossTimerServiceFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/timerservice/jboss/JBossTimerServiceFactory.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/timerservice/jboss/JBossTimerServiceFactory.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -25,6 +25,7 @@
import javax.management.ObjectName;
import org.jboss.ejb.txtimer.EJBTimerService;
+import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.timerservice.TimedObjectInvoker;
import org.jboss.ejb3.timerservice.TimerServiceFactory;
import org.jboss.logging.Logger;
@@ -45,13 +46,14 @@
* @see org.jboss.ejb3.timerservice.TimerServiceFactory#createTimerService(javax.management.ObjectName, org.jboss.ejb3.timerservice.TimedObjectInvoker)
*/
@Override
- public TimerService createTimerService(ObjectName objectName, TimedObjectInvoker invoker)
+ public TimerService createTimerService(ObjectName containerId, TimedObjectInvoker invoker)
{
TimerService timerService = null;
try
{
- EJBTimerService service = (EJBTimerService) MBeanProxyExt.create(EJBTimerService.class, EJBTimerService.OBJECT_NAME, MBeanServerLocator.locateJBoss());
- timerService = new TimerServiceFacade(objectName, service.createTimerService(objectName, null, invoker));
+ EJBTimerService service = getEJBTimerService();
+ TimerService delegate = service.createTimerService(containerId, null, invoker);
+ timerService = new TimerServiceFacade(containerId, delegate);
}
catch (Exception e)
{
@@ -68,20 +70,25 @@
return timerService;
}
+ protected EJBTimerService getEJBTimerService()
+ {
+ return (EJBTimerService) MBeanProxyExt.create(EJBTimerService.class, EJBTimerService.OBJECT_NAME, MBeanServerLocator.locateJBoss());
+ }
+
/* (non-Javadoc)
* @see org.jboss.ejb3.timerservice.TimerServiceFactory#removeTimerService(javax.ejb.TimerService)
*/
@Override
public void removeTimerService(TimerService timerService)
{
- removeTimerService(((TimerServiceFacade) timerService).getObjectName());
+ removeTimerService(((TimerServiceFacade) timerService).getContainerId());
}
protected void removeTimerService(ObjectName containerId)
{
try
{
- EJBTimerService service = (EJBTimerService) MBeanProxyExt.create(EJBTimerService.class, EJBTimerService.OBJECT_NAME, MBeanServerLocator.locateJBoss());
+ EJBTimerService service = getEJBTimerService();
service.removeTimerService(containerId, true);
}
catch (Exception e)
@@ -97,4 +104,14 @@
}
}
}
+
+ public void restoreTimerService(TimerService aTimerService)
+ {
+ TimerServiceFacade timerService = (TimerServiceFacade) aTimerService;
+ EJBContainer container = timerService.getContainer();
+ // FIXME: do not assume that a TimedObjectInvoker is an EJBContainer
+ ClassLoader loader = container.getClassloader();
+
+ getEJBTimerService().restoreTimers(timerService.getContainerId(), loader);
+ }
}
Modified: trunk/ejb3/src/main/org/jboss/ejb3/timerservice/jboss/TimerServiceFacade.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/timerservice/jboss/TimerServiceFacade.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/timerservice/jboss/TimerServiceFacade.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -30,6 +30,9 @@
import javax.ejb.TimerService;
import javax.management.ObjectName;
+import org.jboss.ejb3.EJBContainer;
+import org.jboss.ejb3.Ejb3Registry;
+
/**
* Comment
*
@@ -68,13 +71,18 @@
return delegate.createTimer(duration, info);
}
- public Collection getTimers() throws IllegalStateException, EJBException
+ protected EJBContainer getContainer()
{
- return delegate.getTimers();
+ return (EJBContainer) Ejb3Registry.getContainer(getContainerId().getCanonicalName());
}
- protected ObjectName getObjectName()
+ protected ObjectName getContainerId()
{
return containerId;
}
+
+ public Collection getTimers() throws IllegalStateException, EJBException
+ {
+ return delegate.getTimers();
+ }
}
Modified: trunk/ejb3/src/main/org/jboss/ejb3/timerservice/quartz/QuartzTimerServiceFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/timerservice/quartz/QuartzTimerServiceFactory.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/main/org/jboss/ejb3/timerservice/quartz/QuartzTimerServiceFactory.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -210,6 +210,11 @@
timerService.shutdown();
}
+ public void restoreTimerService(TimerService aTimerService)
+ {
+ // TODO: implement Quartz restore timer service
+ }
+
public void setDataSource(String jndiName)
{
JNDIConnectionProvider connectionProvider = new JNDIConnectionProvider(jndiName, false);
Modified: trunk/ejb3/src/test/org/jboss/ejb3/test/timer/BaseTimerTesterBean.java
===================================================================
--- trunk/ejb3/src/test/org/jboss/ejb3/test/timer/BaseTimerTesterBean.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/test/org/jboss/ejb3/test/timer/BaseTimerTesterBean.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -60,18 +60,29 @@
}
- public void startTimer(long pPeriod)
+ private void reset()
{
timerCalled = false;
timer = null;
+ }
+
+ public void setTimer(Date expiration)
+ {
+ reset();
+ System.out.println("************ set timer " + expiration);
+ timer = timerService.createTimer(expiration, "TimerSLSBean");
+ }
+
+ public void startTimer(long pPeriod)
+ {
+ reset();
System.out.println("************ startTimer");
timer = timerService.createTimer(new Date(new Date().getTime() + pPeriod), "TimerSLSBean");
}
public void startTimerAndRollback(long pPeriod)
{
- timerCalled = false;
- timer = null;
+ reset();
System.out.println("************ startTimerAndRollback");
timer = ctx.getTimerService().createTimer(pPeriod, "TimerSLSBean");
ctx.setRollbackOnly();
@@ -79,8 +90,7 @@
public void startTimerViaEJBContext(long pPeriod)
{
- timerCalled = false;
- timer = null;
+ reset();
System.out.println("************ startTimerViaEJBContext");
timer = ctx.getTimerService().createTimer(new Date(new Date().getTime() + pPeriod), "TimerSLSBean");
}
Modified: trunk/ejb3/src/test/org/jboss/ejb3/test/timer/TimerTester.java
===================================================================
--- trunk/ejb3/src/test/org/jboss/ejb3/test/timer/TimerTester.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/test/org/jboss/ejb3/test/timer/TimerTester.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -21,8 +21,10 @@
*/
package org.jboss.ejb3.test.timer;
+import java.util.Date;
+
/**
* Comment
*
@@ -39,6 +41,8 @@
void accessTimer();
+ void setTimer(Date expiration);
+
void startTimerAndRollback(long pPeriod);
void startTimerViaEJBContext(long pPeriod);
Modified: trunk/ejb3/src/test/org/jboss/ejb3/test/timer/unit/RemoteUnitTestCase.java
===================================================================
--- trunk/ejb3/src/test/org/jboss/ejb3/test/timer/unit/RemoteUnitTestCase.java 2006-08-25 11:50:08 UTC (rev 56263)
+++ trunk/ejb3/src/test/org/jboss/ejb3/test/timer/unit/RemoteUnitTestCase.java 2006-08-25 11:52:43 UTC (rev 56264)
@@ -21,6 +21,8 @@
*/
package org.jboss.ejb3.test.timer.unit;
+import java.util.Date;
+
import org.jboss.ejb3.test.timer.TimerTester;
import org.jboss.test.JBossTestCase;
import junit.framework.Test;
@@ -56,6 +58,22 @@
assertTrue(test.isTimerCalled());
}
+ // EJBTHREE-630
+ public void testPersistence() throws Exception
+ {
+ TimerTester test = (TimerTester) getInitialContext().lookup("TimerTesterService/remote");
+ long when = System.currentTimeMillis() + 5000;
+ test.setTimer(new Date(when));
+
+ redeploy("timer-test.jar");
+
+ test = (TimerTester) getInitialContext().lookup("TimerTesterService/remote");
+ long wait = 1000 + (when - System.currentTimeMillis());
+ if(wait > 0)
+ Thread.sleep(wait);
+ assertTrue(test.isTimerCalled());
+ }
+
public void testService() throws Exception
{
TimerTester test = (TimerTester) getInitialContext().lookup("TimerTesterService/remote");
More information about the jboss-cvs-commits
mailing list