Obvious question: if Google rate-limited you, how did you end up posting
duplicates?



On 12 March 2013 01:57, Howard W. Smith, Jr. <smithh032...@gmail.com> wrote:

> Wanted to share...
>
> 1. I recently added ActiveMQ logic and dependency (TomEE's simple MDB
> example) to update Google Calendar with data from database as user is in
> web app modifying data; the non-MDB logic worked, but duplicates existed on
> the Google Calendar, since Google Calendar has limits on # of requests per
> user (within a matter of seconds)
>
> 2. The new simple MDB implementation resulted in many more duplicate events
> on the Google Calendar, since messages were processed, asynchronously
>
> 3. This morning, I (FINALLY) fixed the 'duplicate events issue' by marking
> the GoogleCalendarUtil bean as @Singleton with @Lock(WRITE), adding one
> point of entry (deleteAndAddEvents method marked with @AccessTimeout),
> defined 'deleteEvents' and 'addEventToCalendar' method as private (since
> they were defined as 'public' methods, ever since 'birth'), and refactored
> throughout the app, accordingly.
>
> Was this the most appropriate fix? Probably not, but I was happy to develop
> some code based on recommendation(s) that David Blevins shared months ago.
> :)
>
>
>
> On Fri, Mar 8, 2013 at 9:25 AM, Howard W. Smith, Jr. <
> smithh032...@gmail.com
> > wrote:
>
> > +1 to any/all David Blevin's responses...and of course, the same for all
> > of Romain's responses as well!
> >
> > Just to share... I remember I used to see a bunch of LOCK exceptions in
> > server log with @Singleton after David advised me to use @Singleton, but
> I
> > kept tuning the implementation. Now, I have not seen those exceptions any
> > more in server log. I don't know if it was just a TomEE 1.5.1 bug that
> got
> > fixed in 1.5.2-SNAPSHOT, but recently, I decreased the # of minutes on
> the
> > @Schedule method defined on the only 2 @Singleton beans I have, and
> still,
> > it is performing (very) well and no exceptions in server log.
> >
> > I know this may be a bit unrelated, but still thought I might share. I'm
> > hoping to add more @Singleton for @Schedule tasks.
> >
> > My code has been working well with @Stateless for the design, which is
> > evident when web application code is generated by NetBeans from database
> > schema.
> >
> > Entity bean > @Stateless EJB for the entity bean > JSF managed bean which
> > references @Stateless EJB and entity bean > xhtml page, which references
> > the JSF managed bean
> >
> > Of course, I have done refactoring to meet requirements. :)
> >
> > This design/implementation has worked for me, in production, while the
> app
> > was running on Glassfish 3.1+ and now with TomEE.
> >
> >
> > On Thu, Mar 7, 2013 at 7:10 PM, David Blevins <david.blev...@gmail.com
> >wrote:
> >
> >> I'd also recommend @Singleton in conjunction with @Lock(READ).
> >>
> >> The @Stateless bean type is good when you explicitly need to limit the
> >> number of instances/concurrent calls.  If this sort of limiting is not a
> >> critical part of the design, then likely @Stateless was used because
> this
> >> is the bean type people tend to use by default.
> >>
> >> Really, @Singleton with @Lock(READ) should be used by default and other
> >> bean types used only when there is a specific design goal you need to
> >> achieve.
> >>
> >>
> >> -David
> >>
> >> On Mar 6, 2013, at 10:19 AM, Romain Manni-Bucau <rmannibu...@gmail.com>
> >> wrote:
> >>
> >> > In very very heavy load and for a simple app it can be as much as your
> >> http
> >> > request thread pool size (200 by default)
> >> >
> >> > Note: using @Singleton can help too if you can
> >> > Le 6 mars 2013 18:51, "José Luis Cetina" <maxtorz...@gmail.com> a
> >> écrit :
> >> >
> >> >> Really im not sure how many users the webapp could handle, because
> is a
> >> >> public webapp, i will increase the MaxSize to 50 or 100, but for any
> >> >> "unexpected
> >> >> overload"  i will let StrictPooling to false.
> >> >>
> >> >> Do you consider its to much to increase to 50/100 to maxsize??
> >> >>
> >> >>
> >> >>
> >> >> 2013/3/6 Jean-Louis MONTEIRO <jeano...@gmail.com>
> >> >>
> >> >>> José,
> >> >>>
> >> >>> The MinSize is not the problem IMO.
> >> >>> The MaxSize is definitely the issue. Do you have more than 10
> (default
> >> >>> value) simultaneous users?
> >> >>>
> >> >>> The StrictPooling is great to be able to always answer in case of
> >> small
> >> >>> over load.
> >> >>> But, you have to know that after being used, instances will be
> removed
> >> >> and
> >> >>> garbage collected.
> >> >>>
> >> >>> Also, creating instances can be consuming depending on the bean.
> >> >>>
> >> >>> I would recommend not only to set it to true, but before, trying to
> >> >> define
> >> >>> as much as possible the correct value for MaxSize depending on your
> >> SLAs.
> >> >>>
> >> >>> Hope it helps
> >> >>> JLouis
> >> >>>
> >> >>>
> >> >>>
> >> >>>
> >> >>> 2013/3/6 José Luis Cetina <maxtorz...@gmail.com>
> >> >>>
> >> >>>> Im using 1.6.0-SNAPSHOT.
> >> >>>>
> >> >>>> I will change
> >> >>>>
> >> >>>> StrictPooling = true ==> false
> >> >>>> MinSize = 0 ==> 2
> >> >>>>
> >> >>>> In stateless section and let you know.
> >> >>>>
> >> >>>>
> >> >>>>
> >> >>>> 2013/3/6 Howard W. Smith, Jr. <smithh032...@gmail.com>
> >> >>>>
> >> >>>>> José,
> >> >>>>>
> >> >>>>> I'm sure the others will ask, are you seeing this with tomee 1.5.2
> >> or
> >> >>>> 1.6.0
> >> >>>>> snapshot? or only seeing on your production server  running tomee
> >> >> 1.5.1
> >> >>>> or
> >> >>>>> 1.5.2 / 1.6.0 snapshot?
> >> >>>>>
> >> >>>>> Wow, Jean-Louis beat me to it...asking for the TOMEE version. :)
> >> >>>>>
> >> >>>>> Also, i searched google for the following:
> >> >>>>>
> >> >>>>> No instances available in Stateless Session Bean pool
> >> >>>>>
> >> >>>>> and found the following (which is definitely related to Jean-Louis
> >> >>>>> response):
> >> >>>>>
> >> >>>>> [1]
> >> >>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> http://apache-geronimo.328035.n3.nabble.com/jira-Created-GERONIMO-5455-quot-No-instances-available-in-Stateless-Session-Bean-pool-quot-error-wher-td978236.html
> >> >>>>>
> >> >>>>> [2]
> >> >>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> http://openejb.979440.n4.nabble.com/Query-Regarding-Stateless-Session-Bean-Instance-Pool-Configuration-td980239.html
> >> >>>>>
> >> >>>>> [3]
> >> http://docs.oracle.com/cd/E15051_01/wls/docs103/ejb/session.html
> >> >>>>>
> >> >>>>>
> >> >>>>> Howard
> >> >>>>>
> >> >>>>>
> >> >>>>> On Wed, Mar 6, 2013 at 10:46 AM, José Luis Cetina <
> >> >>> maxtorz...@gmail.com
> >> >>>>>> wrote:
> >> >>>>>
> >> >>>>>> Hi im gettin *ConcurrentAccessTimeoutException: No instances
> >> >>> available
> >> >>>> in
> >> >>>>>> Stateless Session Bean pool.  Waited 30 SECONDS....*
> >> >>>>>>
> >> >>>>>> Here is the complete log:  http://pastebin.ca/2328770
> >> >>>>>>
> >> >>>>>> Any advice, what could be? Do i have to configure something in
> >> >>>>> tomee.xml??
> >> >>>>>>
> >> >>>>>> Part of the log:
> >> >>>>>>
> >> >>>>>>
> >> >>>>>> *Mar 05, 2013 9:38:20 PM
> >> >> org.apache.openejb.cdi.CdiAppContextsService
> >> >>>>>> lazyStartSessionContext
> >> >>>>>> WARNING: Could NOT lazily initialize session context because of
> >> >> null
> >> >>>>>> RequestContext
> >> >>>>>> javax.ejb.ConcurrentAccessTimeoutException: No instances
> available
> >> >> in
> >> >>>>>> Stateless Session Bean pool.  Waited 30 SECONDS
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.openejb.core.stateless.StatelessInstanceManager.getInstance(StatelessInstanceManager.java:190)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:186)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:256)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:251)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:85)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:279)
> >> >>>>>> at sun.proxy.$Proxy245.getExamenAplicado(Unknown Source)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> com.grupokx.preparatorianos.controller.examendiagnostico.ExamenDiagnosticoMBean.mypostconstruct(ExamenDiagnosticoMBean.java:63)
> >> >>>>>> at sun.reflect.GeneratedMethodAccessor800.invoke(Unknown Source)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >> >>>>>> at java.lang.reflect.Method.invoke(Method.java:601)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.tomee.catalina.JavaeeInstanceManager.postConstruct(JavaeeInstanceManager.java:132)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:69)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.myfaces.config.annotation.Tomcat7AnnotationLifecycleProvider.postConstruct(Tomcat7AnnotationLifecycleProvider.java:94)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBeanBuilder.java:213)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManagedBean(ManagedBeanResolver.java:333)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:296)
> >> >>>>>> at
> >> >> javax.el.CompositeELResolver.getValue(CompositeELResolver.java:58)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:179)
> >> >>>>>> at
> >> >> org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72)
> >> >>>>>> at org.apache.el.parser.AstValue.getValue(AstValue.java:161)
> >> >>>>>> at org.apache.el.parser.AstEqual.getValue(AstEqual.java:38)
> >> >>>>>> at
> >> >>>>>
> >> >>>
> >> org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.webbeans.el.WrappedValueExpression.getValue(WrappedValueExpression.java:68)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getValue(ContextAwareTagValueExpression.java:96)
> >> >>>>>> at
> >> >>>>>
> >> >>>
> >> javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:266)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1187)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>
> >> >>
> >>
> javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:494)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>
> >> >>
> >>
> javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>
> >> >>
> >>
> javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>
> >> >>
> >>
> javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1981)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:285)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>
> >> >>
> >>
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:241)
> >> >>>>>> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:199)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
> >> >>>>>> at
> >> >>> org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>
> >> >>
> >>
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
> >> >>>>>> at
> >> >> org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
> >> >>>>>> at
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >>
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
> >> >>>>>> 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:722)
> >> >>>>>> *
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>>
> >> >>>>
> >> >>>> --
> >> >>>> -------------------------------------------------------------------
> >> >>>> *SCJA. José Luis Cetina*
> >> >>>> -------------------------------------------------------------------
> >> >>>>
> >> >>>
> >> >>>
> >> >>>
> >> >>> --
> >> >>> Jean-Louis
> >> >>>
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> -------------------------------------------------------------------
> >> >> *SCJA. José Luis Cetina*
> >> >> -------------------------------------------------------------------
> >> >>
> >>
> >>
> >
>

Reply via email to