tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leonardo K. Shikida" <shik...@gmail.com>
Subject Re: singleton initializing twice? (1.6.0-stable)
Date Fri, 23 Oct 2015 16:19:52 GMT
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