thanks, fixed *Romain Manni-Bucau* *Twitter: @rmannibucau* *Blog: http://rmannibucau.wordpress.com*
2012/8/21 Enrico Olivelli <eolive...@gmail.com> > the property is org.quartz.jobStore.**makeThreadsDaemons > > https://issues.apache.org/**jira/browse/TOMEE-389?** > focusedCommentId=13438735#**comment-13438735<https://issues.apache.org/jira/browse/TOMEE-389?focusedCommentId=13438735#comment-13438735> > > > Caused by: org.quartz.SchedulerException: JobStore class > 'org.quartz.impl.jdbcjobstore.**JobStoreCMT' props could not be > configured. [See nested exception: java.lang.**NoSuchMethodException: No > setter for property 'makeThreadsDaemon'] > at org.quartz.impl.**StdSchedulerFactory.**instantiate(** > StdSchedulerFactory.java:850) > at org.quartz.impl.**StdSchedulerFactory.**getScheduler(** > StdSchedulerFactory.java:1484) > at org.apache.openejb.core.timer.**EjbTimerServiceImpl.** > getDefaultScheduler(**EjbTimerServiceImpl.java:183) > ... 21 more > Caused by: java.lang.**NoSuchMethodException: No setter for property > 'makeThreadsDaemon' > at org.quartz.impl.**StdSchedulerFactory.**setBeanProps(** > StdSchedulerFactory.java:1372) > at org.quartz.impl.**StdSchedulerFactory.**instantiate(** > StdSchedulerFactory.java:848) > ... 23 more > > > Il 20/08/2012 12:01, Romain Manni-Bucau ha scritto: > >> right, >> https://issues.apache.org/**jira/browse/TOMEE-389<https://issues.apache.org/jira/browse/TOMEE-389> >> >> *Romain Manni-Bucau* >> *Twitter: @rmannibucau* >> *Blog: http://rmannibucau.wordpress.**com<http://rmannibucau.wordpress.com> >> * >> >> >> >> >> 2012/8/20 Enrico Olivelli <eolive...@gmail.com> >> >> With this property shutdown now works cleanly >>> org.quartz.jobStore.****makeThreadsDaemons=true >>> >>> maybe it would be a safe settings to use this property too >>> org.quartz.scheduler.****makeSchedulerThreadDaemon=true >>> >>> >>> I think that this two properties need to be always set to true for >>> OpenEJB/TomEE >>> would you consider to hard-code them in EBJTimerImpl ? >>> >>> thanks >>> - Enrico >>> >>> >>> Il 20/08/2012 10:28, Romain Manni-Bucau ha scritto: >>> >>> maybe tunning a bit the datasource pool to validate the connection "on >>>> borrow" can help for such cases >>>> >>>> /Romain Manni-Bucau/ >>>> /Twitter: @rmannibucau/ >>>> /Blog: http://rmannibucau.wordpress.****com/<http://rmannibucau.** >>>> wordpress.com/ <http://rmannibucau.wordpress.com/>> >>>> >>>> >>>> >>>> >>>> >>>> 2012/8/20 Enrico Olivelli <eolive...@gmail.com <mailto: >>>> eolive...@gmail.com>> >>>> >>>> >>>> I think that Quartz says "Could not retrieve datasource via JNDI >>>> url" instead of saying "could not get a connection from DataSource" >>>> >>>> >>>> >>>> org.quartz.****JobPersistenceException: Failed to obtain DB >>>> connection >>>> >>>> from data source 'MyAppDBNonJta': java.sql.SQLException: Could not >>>> retrieve datasource via JNDI url 'openejb:Resource/**** >>>> MyAppDBNonJta' >>>> com.mysql.jdbc.exceptions.****jdbc4.CommunicationsException: >>>> >>>> Communications link failure >>>> >>>> The last packet sent successfully to the server was 0 milliseconds >>>> ago. The driver has not received any packets from the server. [See >>>> nested exception: java.sql.SQLException: Could not retrieve >>>> datasource via JNDI url 'openejb:Resource/****MyAppDBNonJta' >>>> com.mysql.jdbc.exceptions.****jdbc4.CommunicationsException: >>>> >>>> Communications link failure >>>> >>>> The last packet sent successfully to the server was 0 milliseconds >>>> ago. The driver has not received any packets from the server.] >>>> at >>>> org.quartz.impl.jdbcjobstore.****JobStoreCMT.** >>>> getNonManagedTXConnection(****JobStoreCMT.java:168) >>>> at >>>> org.quartz.impl.jdbcjobstore.****JobStoreSupport.** >>>> executeInNonManagedTXLock(****JobStoreSupport.java:3801) >>>> at >>>> org.quartz.impl.jdbcjobstore.****JobStoreSupport.** >>>> triggersFired(** >>>> JobStoreSupport.java:2893) >>>> at >>>> org.quartz.core.****QuartzSchedulerThread.run(** >>>> QuartzSchedulerThread.java:****326) >>>> >>>> Caused by:java.sql.SQLException: Could not retrieve datasource via >>>> JNDI url 'openejb:Resource/****MyAppDBNonJta' >>>> com.mysql.jdbc.exceptions.****jdbc4.CommunicationsException: >>>> >>>> Communications link failure >>>> >>>> The last packet sent successfully to the server was 0 milliseconds >>>> ago. The driver has not received any packets from the server. >>>> >>>> at >>>> org.quartz.utils.****JNDIConnectionProvider.****getConnection(** >>>> JNDIConnectionProvider.java:****163) >>>> at >>>> org.quartz.utils.****DBConnectionManager.****getConnection(** >>>> DBConnectionManager.java:108) >>>> at >>>> org.quartz.impl.jdbcjobstore.****JobStoreCMT.** >>>> getNonManagedTXConnection(****JobStoreCMT.java:165) >>>> >>>> ... 3 more >>>> >>>> >>>> Il 19/08/2012 20:34, Romain Manni-Bucau ha scritto: >>>> >>>> first i'd try the previous settings linked to quartz shutdown. >>>>> >>>>> then about the stack it says the datasource can't be found, can >>>>> you check your log? or a manual lookup? >>>>> >>>>> /Romain Manni-Bucau/ >>>>> /Twitter: @rmannibucau/ >>>>> /Blog: http://rmannibucau.wordpress.****com/<http://rmannibucau.* >>>>> *wordpress.com/ <http://rmannibucau.wordpress.com/>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> 2012/8/19 Enrico Olivelli <eolive...@gmail.com >>>>> <mailto:eolive...@gmail.com>> >>>>> >>>>> >>>>> These is Quartz config in system.properties >>>>> Below you can find the stack trace >>>>> >>>>> org.quartz.jobStore.class = >>>>> org.quartz.impl.jdbcjobstore.****JobStoreCMT >>>>> org.quartz.jobStore.****dataSource=MyAppDB >>>>> org.quartz.dataSource.MyAppDB.****jndiURL=openejb:Resource/** >>>>> MyAppDB >>>>> org.quartz.jobStore.****nonManagedTXDataSource=**** >>>>> MyAppDBNonJta >>>>> org.quartz.dataSource.****MyAppDBNonJta.jndiURL=openejb:**** >>>>> Resource/MyAppDBNonJta >>>>> org.quartz.jobStore.****isClustered=true >>>>> org.quartz.scheduler.****instanceId=InstanceA >>>>> >>>>> >>>>> One note: this is the case when TomEE starts and the DB is >>>>> down >>>>> >>>>> >>>>> 2012-08-19 20:25:30 >>>>> Full thread dump Java HotSpot(TM) 64-Bit Server VM (21.1-b02 >>>>> mixed mode): >>>>> >>>>> "DestroyJavaVM" prio=6 tid=0x0000000008997000 nid=0xeac >>>>> waiting on condition [0x0000000000000000] >>>>> java.lang.Thread.State: RUNNABLE >>>>> >>>>> "QuartzScheduler_OpenEJB-****TimerService-Scheduler-** >>>>> >>>>> InstanceA_MisfireHandler" >>>>> prio=6 tid=0x0000000008995800 nid=0x1064 waiting on condition >>>>> [0x000000000c76f000] >>>>> java.lang.Thread.State: TIMED_WAITING (sleeping) >>>>> at java.lang.Thread.sleep(Native Method) >>>>> at >>>>> org.quartz.impl.jdbcjobstore.****JobStoreSupport$** >>>>> MisfireHandler.run(****JobStoreSupport.java:3988) >>>>> >>>>> "QuartzScheduler_OpenEJB-****TimerService-Scheduler-** >>>>> >>>>> InstanceA_ClusterManager" >>>>> prio=8 tid=0x0000000008995000 nid=0xd68 waiting on condition >>>>> [0x000000000cc0e000] >>>>> java.lang.Thread.State: TIMED_WAITING (sleeping) >>>>> at java.lang.Thread.sleep(Native Method) >>>>> at >>>>> org.quartz.impl.jdbcjobstore.****JobStoreSupport$** >>>>> ClusterManager.run(****JobStoreSupport.java:3902) >>>>> >>>>> >>>>> "Timer-0" daemon prio=6 tid=0x0000000008994800 nid=0xf54 in >>>>> Object.wait() [0x000000000ca3f000] >>>>> java.lang.Thread.State: TIMED_WAITING (on object monitor) >>>>> at java.lang.Object.wait(Native Method) >>>>> - waiting on <0x00000000c0dcac90> (a java.util.TaskQueue) >>>>> at java.util.TimerThread.****mainLoop(Timer.java:552) >>>>> >>>>> - locked <0x00000000c0dcac90> (a java.util.TaskQueue) >>>>> at java.util.TimerThread.run(****Timer.java:505) >>>>> >>>>> "OpenEJB-TimerService-****Scheduler_**** >>>>> QuartzSchedulerThread" >>>>> >>>>> prio=6 >>>>> tid=0x0000000008993800 nid=0x12e8 in Object.wait() >>>>> [0x000000000c87f000] >>>>> java.lang.Thread.State: TIMED_WAITING (on object monitor) >>>>> at java.lang.Object.wait(Native Method) >>>>> - waiting on <0x00000000c0dc9d20> (a java.lang.Object) >>>>> at >>>>> org.quartz.core.****QuartzSchedulerThread.run(** >>>>> QuartzSchedulerThread.java:****437) >>>>> >>>>> - locked <0x00000000c0dc9d20> (a java.lang.Object) >>>>> >>>>> "Stateful cache" daemon prio=6 tid=0x0000000008aee800 >>>>> nid=0x86c waiting on condition [0x0000000009f9e000] >>>>> java.lang.Thread.State: TIMED_WAITING (parking) >>>>> at sun.misc.Unsafe.park(Native Method) >>>>> - parking to wait for <0x00000000c07ed658> (a >>>>> java.util.concurrent.locks.****AbstractQueuedSynchronizer$** >>>>> ConditionObject) >>>>> at >>>>> java.util.concurrent.locks.****LockSupport.parkNanos(** >>>>> LockSupport.java:226) >>>>> at >>>>> java.util.concurrent.locks.****AbstractQueuedSynchronizer$** >>>>> ConditionObject.awaitNanos(****AbstractQueuedSynchronizer.**** >>>>> java:2082) >>>>> at >>>>> java.util.concurrent.****ScheduledThreadPoolExecutor$** >>>>> DelayedWorkQueue.take(****ScheduledThreadPoolExecutor.****java:1090) >>>>> at >>>>> java.util.concurrent.****ScheduledThreadPoolExecutor$** >>>>> DelayedWorkQueue.take(****ScheduledThreadPoolExecutor.****java:807) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor.getTask(** >>>>> ThreadPoolExecutor.java:1043) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor.runWorker(**** >>>>> ThreadPoolExecutor.java:1103) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor$Worker.run(**** >>>>> ThreadPoolExecutor.java:603) >>>>> at java.lang.Thread.run(Thread.****java:722) >>>>> >>>>> >>>>> "RetryTimer" daemon prio=6 tid=0x000000000868c800 nid=0xd44 >>>>> in Object.wait() [0x0000000009ccf000] >>>>> java.lang.Thread.State: WAITING (on object monitor) >>>>> at java.lang.Object.wait(Native Method) >>>>> - waiting on <0x00000000c076c830> (a java.util.TaskQueue) >>>>> at java.lang.Object.wait(Object.****java:503) >>>>> at java.util.TimerThread.****mainLoop(Timer.java:526) >>>>> >>>>> - locked <0x00000000c076c830> (a java.util.TaskQueue) >>>>> at java.util.TimerThread.run(****Timer.java:505) >>>>> >>>>> >>>>> "warmup-4" daemon prio=6 tid=0x0000000007b69800 nid=0xab0 >>>>> waiting on condition [0x000000000984e000] >>>>> java.lang.Thread.State: WAITING (parking) >>>>> at sun.misc.Unsafe.park(Native Method) >>>>> - parking to wait for <0x00000000c0135778> (a >>>>> java.util.concurrent.locks.****AbstractQueuedSynchronizer$** >>>>> ConditionObject) >>>>> at >>>>> java.util.concurrent.locks.****LockSupport.park(LockSupport.* >>>>> *** >>>>> java:186) >>>>> at >>>>> java.util.concurrent.locks.****AbstractQueuedSynchronizer$** >>>>> ConditionObject.await(****AbstractQueuedSynchronizer.****java:2043) >>>>> at >>>>> java.util.concurrent.****LinkedBlockingQueue.take(** >>>>> LinkedBlockingQueue.java:442) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor.getTask(** >>>>> ThreadPoolExecutor.java:1043) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor.runWorker(**** >>>>> ThreadPoolExecutor.java:1103) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor$Worker.run(**** >>>>> ThreadPoolExecutor.java:603) >>>>> at java.lang.Thread.run(Thread.****java:722) >>>>> >>>>> >>>>> "warmup-3" daemon prio=6 tid=0x0000000007b1a000 nid=0x13cc >>>>> waiting on condition [0x000000000972e000] >>>>> java.lang.Thread.State: WAITING (parking) >>>>> at sun.misc.Unsafe.park(Native Method) >>>>> - parking to wait for <0x00000000c0135778> (a >>>>> java.util.concurrent.locks.****AbstractQueuedSynchronizer$** >>>>> ConditionObject) >>>>> at >>>>> java.util.concurrent.locks.****LockSupport.park(LockSupport.* >>>>> *** >>>>> java:186) >>>>> at >>>>> java.util.concurrent.locks.****AbstractQueuedSynchronizer$** >>>>> ConditionObject.await(****AbstractQueuedSynchronizer.****java:2043) >>>>> at >>>>> java.util.concurrent.****LinkedBlockingQueue.take(** >>>>> LinkedBlockingQueue.java:442) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor.getTask(** >>>>> ThreadPoolExecutor.java:1043) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor.runWorker(**** >>>>> ThreadPoolExecutor.java:1103) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor$Worker.run(**** >>>>> ThreadPoolExecutor.java:603) >>>>> at java.lang.Thread.run(Thread.****java:722) >>>>> >>>>> >>>>> "warmup-2" daemon prio=6 tid=0x0000000007d86800 nid=0x9c4 >>>>> waiting on condition [0x000000000946e000] >>>>> java.lang.Thread.State: WAITING (parking) >>>>> at sun.misc.Unsafe.park(Native Method) >>>>> - parking to wait for <0x00000000c0135778> (a >>>>> java.util.concurrent.locks.****AbstractQueuedSynchronizer$** >>>>> ConditionObject) >>>>> at >>>>> java.util.concurrent.locks.****LockSupport.park(LockSupport.* >>>>> *** >>>>> java:186) >>>>> at >>>>> java.util.concurrent.locks.****AbstractQueuedSynchronizer$** >>>>> ConditionObject.await(****AbstractQueuedSynchronizer.****java:2043) >>>>> at >>>>> java.util.concurrent.****LinkedBlockingQueue.take(** >>>>> LinkedBlockingQueue.java:442) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor.getTask(** >>>>> ThreadPoolExecutor.java:1043) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor.runWorker(**** >>>>> ThreadPoolExecutor.java:1103) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor$Worker.run(**** >>>>> ThreadPoolExecutor.java:603) >>>>> at java.lang.Thread.run(Thread.****java:722) >>>>> >>>>> >>>>> "warmup-1" daemon prio=6 tid=0x0000000007d33800 nid=0x360 >>>>> waiting on condition [0x000000000930e000] >>>>> java.lang.Thread.State: WAITING (parking) >>>>> at sun.misc.Unsafe.park(Native Method) >>>>> - parking to wait for <0x00000000c0135778> (a >>>>> java.util.concurrent.locks.****AbstractQueuedSynchronizer$** >>>>> ConditionObject) >>>>> at >>>>> java.util.concurrent.locks.****LockSupport.park(LockSupport.* >>>>> *** >>>>> java:186) >>>>> at >>>>> java.util.concurrent.locks.****AbstractQueuedSynchronizer$** >>>>> ConditionObject.await(****AbstractQueuedSynchronizer.****java:2043) >>>>> at >>>>> java.util.concurrent.****LinkedBlockingQueue.take(** >>>>> LinkedBlockingQueue.java:442) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor.getTask(** >>>>> ThreadPoolExecutor.java:1043) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor.runWorker(**** >>>>> ThreadPoolExecutor.java:1103) >>>>> at >>>>> java.util.concurrent.****ThreadPoolExecutor$Worker.run(**** >>>>> ThreadPoolExecutor.java:603) >>>>> at java.lang.Thread.run(Thread.****java:722) >>>>> >>>>> >>>>> "GC Daemon" daemon prio=2 tid=0x0000000007c08800 nid=0x694 in >>>>> Object.wait() [0x000000000745f000] >>>>> java.lang.Thread.State: TIMED_WAITING (on object monitor) >>>>> at java.lang.Object.wait(Native Method) >>>>> - waiting on <0x00000000c024b478> (a >>>>> sun.misc.GC$LatencyLock) >>>>> at sun.misc.GC$Daemon.run(GC.****java:117) >>>>> >>>>> - locked <0x00000000c024b478> (a sun.misc.GC$LatencyLock) >>>>> >>>>> "Service Thread" daemon prio=6 tid=0x0000000005ed4800 >>>>> nid=0xa00 runnable [0x0000000000000000] >>>>> java.lang.Thread.State: RUNNABLE >>>>> >>>>> "C2 CompilerThread1" daemon prio=10 tid=0x0000000005ed0800 >>>>> nid=0xdf0 waiting on condition [0x0000000000000000] >>>>> java.lang.Thread.State: RUNNABLE >>>>> >>>>> "C2 CompilerThread0" daemon prio=10 tid=0x0000000005ecb000 >>>>> nid=0xbac waiting on condition [0x0000000000000000] >>>>> java.lang.Thread.State: RUNNABLE >>>>> >>>>> "Attach Listener" daemon prio=10 tid=0x0000000005e92800 >>>>> nid=0xc9c waiting on condition [0x0000000000000000] >>>>> java.lang.Thread.State: RUNNABLE >>>>> >>>>> "Signal Dispatcher" daemon prio=10 tid=0x0000000005e91800 >>>>> nid=0x124c runnable [0x0000000000000000] >>>>> java.lang.Thread.State: RUNNABLE >>>>> >>>>> "Finalizer" daemon prio=8 tid=0x0000000005e08800 nid=0x12b0 >>>>> in Object.wait() [0x000000000673f000] >>>>> java.lang.Thread.State: WAITING (on object monitor) >>>>> at java.lang.Object.wait(Native Method) >>>>> - waiting on <0x00000000c068d428> (a >>>>> java.lang.ref.ReferenceQueue$****Lock) >>>>> at >>>>> java.lang.ref.ReferenceQueue.*** >>>>> *remove(ReferenceQueue.java:****135) >>>>> - locked <0x00000000c068d428> (a >>>>> java.lang.ref.ReferenceQueue$****Lock) >>>>> at >>>>> java.lang.ref.ReferenceQueue.*** >>>>> *remove(ReferenceQueue.java:****151) >>>>> at >>>>> java.lang.ref.Finalizer$****FinalizerThread.run(Finalizer.** >>>>> ** >>>>> >>>>> java:177) >>>>> >>>>> "Reference Handler" daemon prio=10 tid=0x0000000005dff800 >>>>> nid=0x12c8 in Object.wait() [0x000000000640f000] >>>>> java.lang.Thread.State: WAITING (on object monitor) >>>>> at java.lang.Object.wait(Native Method) >>>>> - waiting on <0x00000000c068d160> (a >>>>> java.lang.ref.Reference$Lock) >>>>> at java.lang.Object.wait(Object.****java:503) >>>>> at >>>>> java.lang.ref.Reference$****ReferenceHandler.run(** >>>>> >>>>> Reference.java:133) >>>>> - locked <0x00000000c068d160> (a >>>>> java.lang.ref.Reference$Lock) >>>>> >>>>> "VM Thread" prio=10 tid=0x0000000005df7800 nid=0x494 runnable >>>>> >>>>> "GC task thread#0 (ParallelGC)" prio=6 tid=0x0000000002179000 >>>>> nid=0x47c runnable >>>>> >>>>> "GC task thread#1 (ParallelGC)" prio=6 tid=0x000000000217a800 >>>>> nid=0x1338 runnable >>>>> >>>>> "VM Periodic Task Thread" prio=10 tid=0x0000000005ee7800 >>>>> nid=0x4c8 waiting on condition >>>>> >>>>> JNI global references: 319 >>>>> >>>>> >>>>> >>>>> >>>>> Quartz continues to print this error.... >>>>> >>>>> >>>>> Grave: ClusterManager: Error managing cluster: Failed to >>>>> obtain DB connection from data source 'MyAppDBNonJta': >>>>> java.sql.SQLException: Could not retrieve datasource via JNDI >>>>> url 'openejb:Resource/****MyAppDBNonJta' >>>>> javax.naming.NamingException: null >>>>> org.quartz.****JobPersistenceException: Failed to obtain DB >>>>> >>>>> connection from data source 'MyAppDBNonJta': >>>>> java.sql.SQLException: Could not retrieve datasource via JNDI >>>>> url 'openejb:Resource/****MyAppDBNonJta' >>>>> >>>>> javax.naming.NamingException: null [See nested exception: >>>>> java.sql.SQLException: Could not retrieve datasource via JNDI >>>>> url 'openejb:Resource/****MyAppDBNonJta' >>>>> javax.naming.NamingException: null] >>>>> at >>>>> org.quartz.impl.jdbcjobstore.****JobStoreCMT.** >>>>> getNonManagedTXConnection(****JobStoreCMT.java:168) >>>>> at >>>>> org.quartz.impl.jdbcjobstore.****JobStoreSupport.doCheckin(** >>>>> JobStoreSupport.java:3245) >>>>> at >>>>> org.quartz.impl.jdbcjobstore.****JobStoreSupport$** >>>>> ClusterManager.manage(****JobStoreSupport.java:3870) >>>>> at >>>>> org.quartz.impl.jdbcjobstore.****JobStoreSupport$** >>>>> ClusterManager.run(****JobStoreSupport.java:3907) >>>>> >>>>> Caused by: java.sql.SQLException: Could not retrieve >>>>> datasource via JNDI url 'openejb:Resource/****MyAppDBNonJta' >>>>> javax.naming.NamingException: null >>>>> at >>>>> org.quartz.utils.****JNDIConnectionProvider.**** >>>>> getConnection(** >>>>> JNDIConnectionProvider.java:****163) >>>>> at >>>>> org.quartz.utils.****DBConnectionManager.****getConnection(** >>>>> DBConnectionManager.java:108) >>>>> at >>>>> org.quartz.impl.jdbcjobstore.****JobStoreCMT.** >>>>> getNonManagedTXConnection(****JobStoreCMT.java:165) >>>>> >>>>> ... 3 more >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> Il 19/08/2012 19:08, Romain Manni-Bucau ha scritto: >>>>> >>>>> forgot to mention: >>>>>> org.quartz.plugin.****shutdownhook.cleanShutdown (see >>>>>> >>>>>> http://quartz-scheduler.org/****documentation/quartz-2.x/**<http://quartz-scheduler.org/**documentation/quartz-2.x/**> >>>>>> configuration/ConfigPlugins<ht**tp://quartz-scheduler.org/** >>>>>> documentation/quartz-2.x/**configuration/ConfigPlugins<http://quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigPlugins> >>>>>> >) >>>>>> >>>>>> >>>>>> >>>>>> this last one should be enough >>>>>> >>>>>> /Romain Manni-Bucau/ >>>>>> /Twitter: @rmannibucau/ >>>>>> /Blog: http://rmannibucau.wordpress.****com/< >>>>>> http://rmannibucau.**wordpress.com/<http://rmannibucau.wordpress.com/> >>>>>> > >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> 2012/8/19 Romain Manni-Bucau <rmannibu...@gmail.com >>>>>> <mailto:rmannibu...@gmail.com>****> >>>>>> >>>>>> >>>>>> >>>>>> Hi, >>>>>> >>>>>> nice to hear you can now go further :) >>>>>> >>>>>> well some note about your issue: >>>>>> 1) if you can share with us a thread dump (jps to get >>>>>> your java process id + jstack <id> to get the stack ;)) >>>>>> it can help a lot >>>>>> 2) did you specify the >>>>>> properties org.quartz.scheduler.**** >>>>>> makeSchedulerThreadDaemon >>>>>> and >>>>>> org.quartz.threadPool.****makeThreadsDaemons (the last >>>>>> one >>>>>> >>>>>> is relevant if you specify org.quartz.threadPool.class >>>>>> otherwise by default we put a thread factory using >>>>>> daemon threads)? >>>>>> >>>>>> /Romain Manni-Bucau/ >>>>>> /Twitter: @rmannibucau/ >>>>>> /Blog: http://rmannibucau.wordpress.****com/< >>>>>> http://rmannibucau.**wordpress.com/<http://rmannibucau.wordpress.com/> >>>>>> > >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> 2012/8/18 Enrico Olivelli <eolive...@gmail.com >>>>>> <mailto:eolive...@gmail.com>> >>>>>> >>>>>> >>>>>> Hi all, >>>>>> I'm continuing with tests on Quartz and TomEE and >>>>>> Jobstore on DB. >>>>>> I found this interesting situation: >>>>>> - start Tomee with Quartz configured with a JobStore >>>>>> on a shared DB in order to deploy "clustered" EJB >>>>>> timeouts >>>>>> - shutdown the database >>>>>> - try to stop TomEE >>>>>> >>>>>> The JVM will never shutdown, hung on (I think) >>>>>> Quartz non deamon threads >>>>>> >>>>>> Personally I think this is more a Tomcat problem, I >>>>>> never liked Tomcat shutdown process >>>>>> I agree that for the container (Tomcat) it is a good >>>>>> thing to let all thread stop gracefully but is a >>>>>> real world scenario you would like to be able to >>>>>> stop your Tomcat without the need of a "kill -KILL" >>>>>> >>>>>> this scenario cannot be easily reproduced on a JUnit >>>>>> test case >>>>>> >>>>>> - Enrico >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >