Hello,

On Sun, Jun 14, 2009 at 7:01 PM, Jonathan
Mast<jhmast.develo...@gmail.com> wrote:
> I've not done anything with EJBs and I'm not sure what exactly you mean by
> static "properties".  I have however dealt with reducing instantiations in
> servlets.  I simply created a BeanBag class with static methods to each one
> of my beans; these are not "proper" beans, but where simply objects that
> were formerly used in JSP via the jsp:useBean directive.
>
> Here is the general pattern:
>
> class BeanBag {
>      private static SomeBean someBean = null;
>
>      public static synchronized getSomeBean() {
>             if (someBean == null) someBean = new SomeBean();
>             return someBean;
>     }
> }

This is clearly the worst possible variant of doing it. Since
getSomeBean is called ALL the time and each call is synchronized you
are virtually giving up your concurrency and lining up all requests.
This will cause you serious headache as soon as the site becomes
decent traffic.

There are at least two better ways to do it, static initizialization
and double checked locking (later only on post 1.5 vms).
1.
 class BeanBag {
     private static final SomeBean someBean = new SomeBean();

      public static  SomeBean getSomeBean() {
             return someBean;
     }
 }

The difference is that the initialization happens at the loading time
of the class which is guaranteed be the jvm to be synchronized
(executed only by one thread) so there will be only one instance of
someBean and it will be available at first call to getSomeBean.

2. DLC - double checked locking, this is a very powerful but
hot-discussed pattern, useful if the instantiation of someBean is
really costly and you want to postpone it until it really needed. In
this case:
 class BeanBag {
     private static volatile SomeBean someBean = null;

  public static  SomeBean getSomeBean() {
        if (someBean==null){
                synchronized(BeanBag.class){
                        if (someBean==null){
                                someBean = new SomeBean();
                        }
                }
        }
    return someBean;
  }
 }


>
> I have now numerous Servlets, JSPs and POJOs that use BeanBag to obtain
> singleton instances of my beans.  Its worked great for me.

yet :-)

regards
Leon

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to