<div dir="ltr">oh - I&#39;m not saying this is the biggest part of the IntialContext blocks.&nbsp; The largest by far is all the calls to &quot;lookup&quot;.&nbsp; This was just the first one that I pinned down, and seemed like an easy fix.&nbsp; I&#39;m looking at the lookup calls, and will post more on it.<br>
<br>FYI - When I profiled with the patch I included the block simply moved farther down into the InitialContext creation code.&nbsp; So a real fix would be limiting the number of instantiations, but as you say it might not be worth the effort.&nbsp; We&#39;ll have to see once we have optimized else where.<br>
<br>-Jay<br><br><div class="gmail_quote">On Tue, Sep 30, 2008 at 4:37 PM, Gavin King <span dir="ltr">&lt;<a href="mailto:gavin@hibernate.org">gavin@hibernate.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Good work, Jay. I&#39;m surprised to find that this is an issue. Really, creation of<br>
an InitialContext should be very lightweight (it should be optimized by the<br>
appserver). But if it&#39;s not, then Seam should optimize it.<br>
<div><div></div><div class="Wj3C7c"><br>
On Tue, Sep 30, 2008 at 2:01 PM, Jay Balunas &lt;<a href="mailto:tech4j@gmail.com">tech4j@gmail.com</a>&gt; wrote:<br>
&gt; I have been looking more into the InitialContext and some of the performance<br>
&gt; issues surrounding it.<br>
&gt;<br>
&gt; There are really a couple of things to look at. &nbsp;One is how the<br>
&gt; InitialContext is created, and manged, and the other broad category is how<br>
&gt; often and what items are looked up? &nbsp;I have investigated the first, and have<br>
&gt; begun investigating the second.<br>
&gt;<br>
&gt; InitialContext creation and management<br>
&gt; ------------------------------------------------<br>
&gt; The only location were seam creates and manages the InitialContext is the<br>
&gt; &quot;org.jboss.seam.util.Naming&quot; class (see:<br>
&gt; <a href="http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/util/Naming.java?r=5444" target="_blank">http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/util/Naming.java?r=5444</a><br>

&gt; ).<br>
&gt;<br>
&gt; The properties are set in one location and done only once in the<br>
&gt; initialization of seam (see:<br>
&gt; <a href="http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/init/Initialization.java?r=9116#l915" target="_blank">http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/init/Initialization.java?r=9116#l915</a><br>

&gt; ).<br>
&gt;<br>
&gt; I see two issues here - one is creating the initial context every single<br>
&gt; time it is needed, and the other is processing/checking the properties every<br>
&gt; time it is called.<br>
&gt;<br>
&gt; The first issue would require some caching mechanism or logic for reuse. &nbsp;I<br>
&gt; am not an expert on when it makes sense to reuse an instance of the<br>
&gt; InitialContext, and when we need to get it fresh. &nbsp;I can say that we<br>
&gt; currently use they exact same properties to initialize it and those are set<br>
&gt; during Seam initialization and do not appear to ever change once created.<br>
&gt; Is there a way to cache and optimize this instantiation?<br>
&gt;<br>
&gt; The second issue is that we do a certain amount of processing every time the<br>
&gt; context is requested, this could be optimized. &nbsp;Currently I see a few<br>
&gt; blocked threads on the &quot;props.size()&quot; call in the Naming class which is a<br>
&gt; synchronized method on the Hashtable. &nbsp;This could easily be avoided.<br>
&gt; Although we need to maintain the logic that if the property list is empty we<br>
&gt; continue to call &quot;new InitialContext()&quot; and not pass in the properties<br>
&gt; object. &nbsp;This is because the first thing the InitialContext constructor does<br>
&gt; with a properties object is clone it which can be costly. &nbsp;I have attached a<br>
&gt; patch that implements these changes for review.<br>
&gt;<br>
&gt; Another item I noticed is that the only place (excluding some test code)<br>
&gt; that does not use &quot;Naming.getInitialContext()&quot; is the<br>
&gt; &quot;org.jboss.seam.remoting.messaging.JBossConnectionProvider&quot;. &nbsp;It using the<br>
&gt; &quot;new InitialContext()&quot; directly. &nbsp;Shane - is there a reason for this?<br>
&gt;<br>
&gt; I&#39;ll write up my findings on the lookup usage asap.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Jay<br>
&gt; --<br>
&gt; blog: <a href="http://in.relation.to/Bloggers/Jay" target="_blank">http://in.relation.to/Bloggers/Jay</a><br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; seam-dev mailing list<br>
&gt; <a href="mailto:seam-dev@lists.jboss.org">seam-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/seam-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/seam-dev</a><br>
&gt;<br>
&gt;<br>
<font color="#888888"><br>
<br>
<br>
--<br>
Gavin King<br>
<a href="mailto:gavin.king@gmail.com">gavin.king@gmail.com</a><br>
<a href="http://in.relation.to/Bloggers/Gavin" target="_blank">http://in.relation.to/Bloggers/Gavin</a><br>
<a href="http://hibernate.org" target="_blank">http://hibernate.org</a><br>
<a href="http://seamframework.org" target="_blank">http://seamframework.org</a><br>
</font></blockquote></div><br><br clear="all"><br>-- <br>blog: <a href="http://in.relation.to/Bloggers/Jay">http://in.relation.to/Bloggers/Jay</a><br>
</div>