well @Singleton + @Lock(READ) means your bean should be stateless (that's the cause for WS in general) so that's a good choice
*Romain Manni-Bucau* *Twitter: @rmannibucau <https://twitter.com/rmannibucau>* *Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/> *LinkedIn: **http://fr.linkedin.com/in/rmannibucau* *Github: https://github.com/rmannibucau* 2013/3/8 James Green <[email protected]> > This leads nicely to a question I was about to pose on StackOverflow (where > I would expect it to have been answered already): For stateless web > services implemented using JAX-WS and JAX-RS should we be using @Stateless > or @Singleton? > > I ask because without the production level experience telling me otherwise, > I would envisage @Singleton causing a queuing effect for incoming requests > to the same endpoint. > > An example of the "right way" would be helpful to clarify matters. > > Thanks, > > James > > > > On 8 March 2013 00:10, David Blevins <[email protected]> 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 <[email protected]> > > 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" <[email protected]> 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 <[email protected]> > > >> > > >>> 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 <[email protected]> > > >>> > > >>>> 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. <[email protected]> > > >>>> > > >>>>> 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 < > > >>> [email protected] > > >>>>>> 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* > > >> ------------------------------------------------------------------- > > >> > > > > >
