Author: rmannibucau
Date: Thu Nov 21 09:09:16 2013
New Revision: 1544071
URL: http://svn.apache.org/r1544071
Log:
TOMEE-1083 avoid classloading issues when using tccl with quartz
Modified:
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/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=1544071&r1=1544070&r2=1544071&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
Thu Nov 21 09:09:16 2013
@@ -165,12 +165,14 @@ public class EjbTimerServiceImpl impleme
scheduler = systemInstance.getComponent(Scheduler.class);
if (scheduler == null || newInstance) {
- defaultQuartzConfiguration(properties, deployment,
newInstance);
+ final boolean useTccl =
"true".equalsIgnoreCase(properties.getProperty(OPENEJB_QUARTZ_USE_TCCL,
"false"));
+
+ defaultQuartzConfiguration(properties, deployment,
newInstance, useTccl);
try {
// start in container context to avoid thread leaks
final ClassLoader oldCl =
Thread.currentThread().getContextClassLoader();
- if
("true".equalsIgnoreCase(properties.getProperty(OPENEJB_QUARTZ_USE_TCCL,
"false"))) {
+ if (useTccl) {
Thread.currentThread().setContextClassLoader(deployment.getClassLoader());
} else {
Thread.currentThread().setContextClassLoader(EjbTimerServiceImpl.class.getClassLoader());
@@ -207,7 +209,7 @@ public class EjbTimerServiceImpl impleme
return thisScheduler;
}
- private static void defaultQuartzConfiguration(final Properties
properties, final BeanContext deployment, final boolean newInstance) {
+ private static void defaultQuartzConfiguration(final Properties
properties, final BeanContext deployment, final boolean newInstance, final
boolean tccl) {
final String defaultThreadPool =
DefaultTimerThreadPoolAdapter.class.getName();
if
(!properties.containsKey(StdSchedulerFactory.PROP_THREAD_POOL_CLASS)) {
properties.put(StdSchedulerFactory.PROP_THREAD_POOL_CLASS,
defaultThreadPool);
@@ -241,17 +243,19 @@ public class EjbTimerServiceImpl impleme
}
}
- final String driverDelegate =
properties.getProperty("org.quartz.jobStore.driverDelegateClass");
- if (driverDelegate != null &&
StdJDBCDelegate.class.getName().equals(driverDelegate)) {
- properties.put("org.quartz.jobStore.driverDelegateClass",
PatchedStdJDBCDelegate.class.getName());
- } else if (driverDelegate != null) {
- log.info("You use " + driverDelegate + " driver delegate with
quartz, ensure it doesn't use ObjectInputStream otherwise your custom TimerData
can induce some issues");
- }
+ if (!tccl) {
+ final String driverDelegate =
properties.getProperty("org.quartz.jobStore.driverDelegateClass");
+ if (driverDelegate != null &&
StdJDBCDelegate.class.getName().equals(driverDelegate)) {
+ properties.put("org.quartz.jobStore.driverDelegateClass",
PatchedStdJDBCDelegate.class.getName());
+ } else if (driverDelegate != null) {
+ log.info("You use " + driverDelegate + " driver delegate with
quartz, ensure it doesn't use ObjectInputStream otherwise your custom TimerData
can induce some issues");
+ }
- // adding our custom persister
- if (properties.containsKey("org.quartz.jobStore.class") &&
!properties.containsKey("org.quartz.jobStore.driverDelegateInitString")) {
- properties.put("org.quartz.jobStore.driverDelegateInitString",
- "triggerPersistenceDelegateClasses=" +
EJBCronTriggerPersistenceDelegate.class.getName());
+ // adding our custom persister
+ if (properties.containsKey("org.quartz.jobStore.class") &&
!properties.containsKey("org.quartz.jobStore.driverDelegateInitString")) {
+ properties.put("org.quartz.jobStore.driverDelegateInitString",
+ "triggerPersistenceDelegateClasses=" +
EJBCronTriggerPersistenceDelegate.class.getName());
+ }
}
if
(defaultThreadPool.equals(properties.get(StdSchedulerFactory.PROP_THREAD_POOL_CLASS))