can be a side effect of org.quartz relocation in org.apache.openejb.quartz (config prefix changed as well). We limit the config side effects in our code but since you do it yourself you see it.
Romain Manni-Bucau @rmannibucau <https://twitter.com/rmannibucau> | Blog <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> | LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber <http://www.tomitribe.com> 2015-10-23 16:09 GMT+02:00 Leonardo K. Shikida <[email protected]>: > well, with 1.7.2 I get a different error message. > > SEVERE: EjbTransactionUtil.handleSystemException: Thread count must be > 0 > org.apache.openejb.quartz.SchedulerConfigException: Thread count must be > > 0 > at > > org.apache.openejb.quartz.simpl.SimpleThreadPool.initialize(SimpleThreadPool.java:242) > > here's what I am trying (sorry, no github here) > > import javax.annotation.PostConstruct; > import javax.annotation.PreDestroy; > import javax.ejb.Singleton; > import javax.ejb.Startup; > > import org.apache.openejb.quartz.Scheduler; > import org.apache.openejb.quartz.SchedulerException; > import org.apache.openejb.quartz.impl.StdSchedulerFactory; > > @Startup > @Singleton > public class CustomTimer { > private Scheduler scheduler; > > @PostConstruct > public void initialize() throws SchedulerException{ > System.out.println("Initialize "+this); > StdSchedulerFactory factory = new StdSchedulerFactory(); > > > factory.initialize(this.getClass().getResourceAsStream("my.quartz.properties")); > scheduler = factory.getScheduler(); > scheduler.start(); > System.out.println("scheduler > "+scheduler.getMetaData().getSchedulerName()); > } > > @PreDestroy > public void stop() { > try { > System.out.println("scheduler stopping"); > scheduler.shutdown(); > System.out.println("scheduler stopped"); > } catch (SchedulerException e) { > e.printStackTrace(); > } > } > > } > > import javax.ejb.Lock; > import javax.ejb.LockType; > import javax.ejb.Schedule; > import javax.ejb.Singleton; > import javax.ejb.Startup; > > @Singleton > @Startup > @Lock(LockType.READ) > public class DefaultTimer { > > @Schedule(second = "0", minute = "*", hour = "*", info = > "defaultTimer") > public void periodic() { > System.out.println("running periodic timer"); > } > } > > my.quartz.properties > > #============================================================================ > # Configure Main Scheduler Properties > > #============================================================================ > > org.quartz.scheduler.instanceName = MyClusteredScheduler2 > org.quartz.scheduler.instanceId = AUTO > > > #============================================================================ > # Configure ThreadPool > > #============================================================================ > > org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool > org.quartz.threadPool.threadCount = 10 > org.quartz.threadPool.threadPriority = 5 > > application.properties (tomee conf) > > > #============================================================================ > # Configure Main Scheduler Properties > > #============================================================================ > > org.quartz.scheduler.instanceName = myScheduler > org.quartz.scheduler.instanceId = AUTO > > > #============================================================================ > # Configure ThreadPool > > #============================================================================ > > org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool > org.quartz.threadPool.threadCount = 10 > org.quartz.threadPool.threadPriority = 5 > > > I am not sure if I am using some wrong quartz key in the properties file. > This kind of thing seems to work in 1.6.0, before the quartz packages > refactoring in tomee. > > Complete stacktrace below > > Initialize CustomTimer@161485de > Oct 23, 2015 12:04:33 PM org.apache.openejb.quartz.impl.StdSchedulerFactory > instantiate > INFO: Using default implementation for ThreadExecutor > Oct 23, 2015 12:04:33 PM > org.apache.openejb.core.transaction.EjbTransactionUtil > handleSystemException > SEVERE: EjbTransactionUtil.handleSystemException: Thread count must be > 0 > org.apache.openejb.quartz.SchedulerConfigException: Thread count must be > > 0 > at > > org.apache.openejb.quartz.simpl.SimpleThreadPool.initialize(SimpleThreadPool.java:242) > at > > org.apache.openejb.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1288) > at > > org.apache.openejb.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1519) > at CustomTimer.initialize(CustomTimer.java:24) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at > > org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192) > at > > org.apache.openejb.core.interceptor.ReflectionInvocationContext$LifecycleInvocation.invoke(ReflectionInvocationContext.java:223) > at > > org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173) > at > > org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:181) > at > > org.apache.openejb.monitoring.StatsInterceptor.PostConstruct(StatsInterceptor.java:109) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at > > org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192) > at > > org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173) > at > > org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85) > at org.apache.openejb.BeanContext.newInstance(BeanContext.java:1590) > at > > org.apache.openejb.core.singleton.SingletonInstanceManager.createInstance(SingletonInstanceManager.java:179) > at > > org.apache.openejb.core.singleton.SingletonInstanceManager.access$100(SingletonInstanceManager.java:69) > at > > org.apache.openejb.core.singleton.SingletonInstanceManager$1.call(SingletonInstanceManager.java:120) > at > > org.apache.openejb.core.singleton.SingletonInstanceManager$1.call(SingletonInstanceManager.java:118) > at java.util.concurrent.FutureTask.run(FutureTask.java:262) > at > > org.apache.openejb.core.singleton.SingletonInstanceManager.getInstance(SingletonInstanceManager.java:129) > at > > org.apache.openejb.core.singleton.SingletonInstanceManager.initialize(SingletonInstanceManager.java:93) > at > > org.apache.openejb.core.singleton.SingletonInstanceManager.start(SingletonInstanceManager.java:84) > at > > org.apache.openejb.core.singleton.SingletonContainer.start(SingletonContainer.java:125) > at > > org.apache.openejb.assembler.classic.Assembler.startEjbs(Assembler.java:1382) > at > > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:878) > at > > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:652) > at > > org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:1261) > at > > org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:1100) > at > > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:130) > at > > org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) > at > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) > at > > org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5416) > at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) > at > > org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575) > at > > org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565) > at java.util.concurrent.FutureTask.run(FutureTask.java:262) > at > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > at > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > at java.lang.Thread.run(Thread.java:745) > > > [] > > Leo > > On Mon, Sep 28, 2015 at 5:43 PM, Howard W. Smith, Jr. < > [email protected]> wrote: > > > My apologies, I did not see that behavior. > > > > On Mon, Sep 28, 2015 at 4:15 PM, Howard W. Smith, Jr. < > > [email protected]> wrote: > > > > > > > > > > > On Mon, Sep 28, 2015 at 3:55 PM, Romain Manni-Bucau < > > [email protected] > > > > wrote: > > > > > >> got it but knowing 1.7.2 has the same issue helps to identify if we > need > > >> to > > >> solve an unidentified issue or a fixed issue with potentially a > > >> workwround. > > >> > > >> > > > hmmm, i've been using tomee 1.7.2 (in production) ever since June 2015, > > > and I think I saw this behavior, too, recently (once or twice). Let me > > > check my log files and confirm. > > > > > > > > What I saw was my app attempting to send multiple emails via my JavaMail > > POJO, invoked by some non-JMS code and immediately after via some JMS/MDB > > code, initializing twice, > > > > Sep 23, 2015 11:02:06 PM utils.mail.JavaMail initMailSession > > INFO: JavaMail.initMailSession(): initializing DEFAULT instance of > > mailSession > > Sep 23, 2015 11:02:06 PM utils.mail.JavaMail initMailSession > > INFO: JavaMail.initMailSession(): initializing DEFAULT instance of > > mailSession > > > > and then initialized, > > > > Sep 23, 2015 11:02:06 PM utils.mail.JavaMail initMailSession > > INFO: JavaMail.initMailSession(): initialized DEFAULT instance of > > mailSession > > Sep 23, 2015 11:02:06 PM utils.mail.JavaMail initMailSession > > INFO: JavaMail.initMailSession(): initialized DEFAULT instance of > > mailSession > > >
