[seam-dev] InitialContext performance issues
Shane Bryzak
shane.bryzak at jboss.com
Wed Oct 1 09:14:36 EDT 2008
Jay Balunas wrote:
> I have been looking more into the InitialContext and some of the
> performance issues surrounding it.
>
> There are really a couple of things to look at. One is how the
> InitialContext is created, and manged, and the other broad category is
> how often and what items are looked up? I have investigated the
> first, and have begun investigating the second.
>
> InitialContext creation and management
> ------------------------------------------------
> The only location were seam creates and manages the InitialContext is
> the "org.jboss.seam.util.Naming" class (see:
> http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/util/Naming.java?r=5444
> ).
>
> The properties are set in one location and done only once in the
> initialization of seam (see:
> http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/init/Initialization.java?r=9116#l915
> ).
>
> I see two issues here - one is creating the initial context every
> single time it is needed, and the other is processing/checking the
> properties every time it is called.
>
> The first issue would require some caching mechanism or logic for
> reuse. I am not an expert on when it makes sense to reuse an instance
> of the InitialContext, and when we need to get it fresh. I can say
> that we currently use they exact same properties to initialize it and
> those are set during Seam initialization and do not appear to ever
> change once created. Is there a way to cache and optimize this
> instantiation?
>
> The second issue is that we do a certain amount of processing every
> time the context is requested, this could be optimized. Currently I
> see a few blocked threads on the "props.size()" call in the Naming
> class which is a synchronized method on the Hashtable. This could
> easily be avoided. Although we need to maintain the logic that if the
> property list is empty we continue to call "new InitialContext()" and
> not pass in the properties object. This is because the first thing
> the InitialContext constructor does with a properties object is clone
> it which can be costly. I have attached a patch that implements these
> changes for review.
>
> Another item I noticed is that the only place (excluding some test
> code) that does not use "Naming.getInitialContext()" is the
> "org.jboss.seam.remoting.messaging.JBossConnectionProvider". It using
> the "new InitialContext()" directly. Shane - is there a reason for
> this?
That class is gone now, I removed it recently.
>
> I'll write up my findings on the lookup usage asap.
>
> Thanks,
> Jay
> --
> blog: http://in.relation.to/Bloggers/Jay
> ------------------------------------------------------------------------
>
> _______________________________________________
> seam-dev mailing list
> seam-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/seam-dev
More information about the seam-dev
mailing list