Author: rmannibucau
Date: Wed Mar 6 17:10:38 2013
New Revision: 1453433
URL: http://svn.apache.org/r1453433
Log:
TOMEE-785 ability to configure the timer store
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1453433&r1=1453432&r2=1453433&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
Wed Mar 6 17:10:38 2013
@@ -28,6 +28,7 @@ import org.apache.openejb.BeanContext;
import org.apache.openejb.BeanType;
import org.apache.openejb.ClassLoaderUtil;
import org.apache.openejb.Container;
+import org.apache.openejb.DeploymentContext;
import org.apache.openejb.DuplicateDeploymentIdException;
import org.apache.openejb.Injection;
import org.apache.openejb.JndiConstants;
@@ -72,6 +73,7 @@ import org.apache.openejb.core.ivm.namin
import org.apache.openejb.core.ivm.naming.IvmJndiFactory;
import org.apache.openejb.core.security.SecurityContextHandler;
import org.apache.openejb.core.timer.EjbTimerServiceImpl;
+import org.apache.openejb.core.timer.MemoryTimerStore;
import org.apache.openejb.core.timer.NullEjbTimerServiceImpl;
import org.apache.openejb.core.timer.ScheduleData;
import org.apache.openejb.core.timer.TimerStore;
@@ -167,6 +169,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.net.MalformedURLException;
@@ -204,6 +207,7 @@ public class Assembler extends Assembler
public static final Logger logger =
Logger.getInstance(LogCategory.OPENEJB_STARTUP, Assembler.class);
public static final String OPENEJB_JPA_DEPLOY_TIME_ENHANCEMENT_PROP =
"openejb.jpa.deploy-time-enhancement";
private static final String GLOBAL_UNIQUE_ID = "global";
+ public static final String TIMER_STORE_CLASS = "timerStore.class";
Messages messages = new Messages(Assembler.class.getPackage().getName());
private final CoreContainerSystem containerSystem;
@@ -860,7 +864,7 @@ public class Assembler extends Assembler
final Collection<Scheduler> schedulers = new ArrayList<Scheduler>();
for (final BeanContext ejb : appContext.getBeanContexts()) {
final Scheduler scheduler = ejb.get(Scheduler.class);
- if (scheduler == null || scheduler == globalScheduler ||
schedulers.contains(scheduler)) {
+ if (scheduler == null || scheduler == globalScheduler ||
schedulers.contains(scheduler)) {
continue;
}
@@ -940,7 +944,7 @@ public class Assembler extends Assembler
}
if (timerServiceRequired) {
// Create the timer
- final EjbTimerServiceImpl timerService = new
EjbTimerServiceImpl(beanContext);
+ final EjbTimerServiceImpl timerService = new
EjbTimerServiceImpl(beanContext, newTimerStore(beanContext));
//Load auto-start timers
final TimerStore timerStore =
timerService.getTimerStore();
for (Iterator<Map.Entry<Method, MethodContext>> it =
beanContext.iteratorMethodContext(); it.hasNext(); ) {
@@ -984,6 +988,29 @@ public class Assembler extends Assembler
return ejbs;
}
+ private static TimerStore newTimerStore(final BeanContext beanContext) {
+ for (final DeploymentContext context : Arrays.asList(beanContext,
beanContext.getModuleContext(),
beanContext.getModuleContext().getAppContext())) {
+ final String timerStoreClass =
context.getProperties().getProperty(TIMER_STORE_CLASS);
+ if (timerStoreClass != null) {
+ logger.info("Found timer class: " + timerStoreClass);
+
+ try {
+ final Class<?> clazz =
beanContext.getClassLoader().loadClass(timerStoreClass);
+ try {
+ final Constructor<?> constructor =
clazz.getConstructor(TransactionManager.class);
+ return
TimerStore.class.cast(constructor.newInstance(EjbTimerServiceImpl.getDefaultTransactionManager()));
+ } catch (final Exception ignored) {
+ return TimerStore.class.cast(clazz.newInstance());
+ }
+ } catch (final Exception e) {
+ logger.error("Can't instantiate " + timerStoreClass + ",
using default memory timer store");
+ }
+ }
+ }
+
+ return new
MemoryTimerStore(EjbTimerServiceImpl.getDefaultTransactionManager());
+ }
+
public void startEjbs(final boolean start, final List<BeanContext>
allDeployments) throws OpenEJBException {
// now that everything is configured, deploy to the container
if (start) {
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java?rev=1453433&r1=1453432&r2=1453433&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
Wed Mar 6 17:10:38 2013
@@ -88,8 +88,8 @@ public class EjbTimerServiceImpl impleme
private transient TimerStore timerStore;
private transient Scheduler scheduler = null;
- public EjbTimerServiceImpl(final BeanContext deployment) {
- this(deployment, getDefaultTransactionManager(), new
MemoryTimerStore(getDefaultTransactionManager()), -1);
+ public EjbTimerServiceImpl(final BeanContext deployment, final TimerStore
timerStore) {
+ this(deployment, getDefaultTransactionManager(), timerStore, -1);
}
public static TransactionManager getDefaultTransactionManager() {