You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/05/21 16:04:43 UTC
svn commit: r1484813 - in
/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer:
EjbTimerServiceImpl.java quartz/ quartz/PatchedStdJDBCDelegate.java
quartz/QuartzObjectInputStream.java
Author: rmannibucau
Date: Tue May 21 14:04:42 2013
New Revision: 1484813
URL: http://svn.apache.org/r1484813
Log:
TOMEE-944 replacing StdJDBCDelegate by PatchedStdJDBCDelegate to use a correct loader
Added:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/PatchedStdJDBCDelegate.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/QuartzObjectInputStream.java
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=1484813&r1=1484812&r2=1484813&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 Tue May 21 14:04:42 2013
@@ -22,6 +22,7 @@ import org.apache.openejb.OpenEJBExcepti
import org.apache.openejb.OpenEJBRuntimeException;
import org.apache.openejb.RpcContainer;
import org.apache.openejb.core.BaseContext;
+import org.apache.openejb.core.timer.quartz.PatchedStdJDBCDelegate;
import org.apache.openejb.core.transaction.TransactionType;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.monitoring.LocalMBeanServer;
@@ -38,6 +39,7 @@ import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
+import org.quartz.impl.jdbcjobstore.StdJDBCDelegate;
import org.quartz.impl.triggers.AbstractTrigger;
import org.quartz.listeners.SchedulerListenerSupport;
import org.quartz.simpl.RAMJobStore;
@@ -239,6 +241,13 @@ 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");
+ }
+
// adding our custom persister
if (properties.containsKey("org.quartz.jobStore.class") && !properties.containsKey("org.quartz.jobStore.driverDelegateInitString")) {
properties.put("org.quartz.jobStore.driverDelegateInitString",
Added: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/PatchedStdJDBCDelegate.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/PatchedStdJDBCDelegate.java?rev=1484813&view=auto
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/PatchedStdJDBCDelegate.java (added)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/PatchedStdJDBCDelegate.java Tue May 21 14:04:42 2013
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.timer.quartz;
+
+import org.quartz.impl.jdbcjobstore.StdJDBCDelegate;
+import org.quartz.spi.ClassLoadHelper;
+import org.slf4j.Logger;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.sql.Blob;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class PatchedStdJDBCDelegate extends StdJDBCDelegate {
+ public PatchedStdJDBCDelegate(final Logger logger, final String tablePrefix, final String schedName, final String instanceId, final ClassLoadHelper classLoadHelper) {
+ super(logger, tablePrefix, schedName, instanceId, classLoadHelper);
+ }
+
+ public PatchedStdJDBCDelegate(final Logger logger, final String tablePrefix, final String schedName, final String instanceId, final ClassLoadHelper classLoadHelper, final Boolean useProperties) {
+ super(logger, tablePrefix, schedName, instanceId, classLoadHelper, useProperties);
+ }
+
+ @Override
+ protected Object getObjectFromBlob(final ResultSet rs, final String colName)
+ throws ClassNotFoundException, IOException, SQLException {
+ Object obj = null;
+
+ Blob blobLocator = rs.getBlob(colName);
+ if (blobLocator != null && blobLocator.length() != 0) {
+ InputStream binaryInput = blobLocator.getBinaryStream();
+
+ if (null != binaryInput) {
+ if (binaryInput instanceof ByteArrayInputStream
+ && ((ByteArrayInputStream) binaryInput).available() == 0 ) {
+ //do nothing
+ } else {
+ ObjectInputStream in = new QuartzObjectInputStream(binaryInput, classLoadHelper);
+ try {
+ obj = in.readObject();
+ } finally {
+ in.close();
+ }
+ }
+ }
+
+ }
+ return obj;
+ }
+}
+
Added: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/QuartzObjectInputStream.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/QuartzObjectInputStream.java?rev=1484813&view=auto
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/QuartzObjectInputStream.java (added)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/quartz/QuartzObjectInputStream.java Tue May 21 14:04:42 2013
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.timer.quartz;
+
+import org.quartz.spi.ClassLoadHelper;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamClass;
+
+public class QuartzObjectInputStream extends ObjectInputStream {
+ private final ClassLoadHelper loader;
+
+ public QuartzObjectInputStream(final InputStream binaryInput, final ClassLoadHelper classLoadHelper) throws IOException {
+ super(binaryInput);
+ this.loader = classLoadHelper;
+ }
+
+ @Override
+ protected Class<?> resolveClass(final ObjectStreamClass desc) throws ClassNotFoundException, IOException {
+ return loader.loadClass(desc.getName());
+ }
+}