tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Romain Manni-Bucau <rmannibu...@gmail.com>
Subject Re: singleton initializing twice? (1.6.0-stable)
Date Fri, 23 Oct 2015 17:23:10 GMT
dont think so, using a scheduler factory you dont have this issue. But
doing it yourself you dont benefit from tomee defaults (values) so you have
to set it and with the right names. TomEE uses a shade with classes
relocation so config prefix changed compared to native quartz properties.



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 18:19 GMT+02:00 Leonardo K. Shikida <shikida@gmail.com>:

> let me guess then
>
> tomee uses quartz and if I want to use the same library that comes bundled
> with tomee for a 2nd scheduler, it hit some configuration singleton because
> quartz did this way?
>
> []
>
> Leo
>
> On Fri, Oct 23, 2015 at 2:13 PM, Romain Manni-Bucau <rmannibucau@gmail.com
> >
> wrote:
>
> > yep just depends the defaults of the impl you use.
> >
> >
> > 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 18:09 GMT+02:00 Leonardo K. Shikida <shikida@gmail.com>:
> >
> > > notice that if I just comment CustomTimer.initialize(), tomee starts
> > > normally, even using the old prefixes
> > >
> > > []
> > >
> > > Leo
> > >
> > > On Fri, Oct 23, 2015 at 12:15 PM, Romain Manni-Bucau <
> > > rmannibucau@gmail.com>
> > > wrote:
> > >
> > > > 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 <shikida@gmail.com>:
> > > >
> > > > > 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. <
> > > > > smithh032772@gmail.com> wrote:
> > > > >
> > > > > > My apologies, I did not see that behavior.
> > > > > >
> > > > > > On Mon, Sep 28, 2015 at 4:15 PM, Howard W. Smith, Jr. <
> > > > > > smithh032772@gmail.com> wrote:
> > > > > >
> > > > > > >
> > > > > > >
> > > > > > > On Mon, Sep 28, 2015 at 3:55 PM, Romain Manni-Bucau <
> > > > > > rmannibucau@gmail.com
> > > > > > > > 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
> > > > > >
> > > > >
> > > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message