<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>opencomponentry &#187; ognl</title>
	<atom:link href="http://blog.opencomponentry.com/category/java/ognl/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.opencomponentry.com</link>
	<description>blah blah blah, blah blah..</description>
	<lastBuildDate>Mon, 09 Nov 2009 14:49:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>OGNL 2.7.2 Released</title>
		<link>http://blog.opencomponentry.com/2008/02/01/ognl-272-released/</link>
		<comments>http://blog.opencomponentry.com/2008/02/01/ognl-272-released/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 18:51:21 +0000</pubDate>
		<dc:creator>Jesse Kuhnert</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ognl]]></category>

		<guid isPermaLink="false">http://blog.opencomponentry.com/2008/02/01/ognl-272-released/</guid>
		<description><![CDATA[Not knowing where else to announce it I thought I should mention that version 2.7.2 of OGNL was quietly released yesterday and is now available via ibiblio. Special thanks to Toby Tmjee for his recent contributions and help on the project. The number of issues being reported related to expression compilation seems to have gone [...]]]></description>
			<content:encoded><![CDATA[<p>Not knowing where else to announce it I thought I should mention that version 2.7.2 of OGNL was quietly released yesterday and is now available via <a href="http://mirrors.ibiblio.org/pub/mirrors/maven2/ognl/ognl/2.7.2/" title="OGNL 2.7.2" target="_blank">ibiblio</a>.  Special thanks to <a href="http://www.jroller.com/tmjee/" title="Toby Tmjee" target="_blank">Toby Tmjee</a> for his recent contributions and help on the project.</p>
<p>The number of issues being reported related to expression compilation seems to have gone way down &#8211; so it may tentatively be safe to say this feature is &#8220;becoming stable&#8221;.</p>
<p>The javacc grammar parser code was also re-generated for this recent release using some of the new improvements that Tom Copeland mentions <a href="http://tomcopeland.blogs.com/juniordeveloper/2008/01/more-javacc-opt.html" title="JavaCC Optimizations" target="_blank">here</a>.</p>
<p>As I&#8217;ve not really done a good job posting updates about releases I&#8217;ll go ahead and dump the full 2.7 &#8211; 2.7.2 jira issue log here as well.  The good majority of issues fixed have been related to the expression compiler work &#8211; but there is still a lot of good stuff in there that projects using it without expression compilation will still find very useful.  (from straight up bug fixes to substantial performance / concurrency improvements and even full Java 5 support for generics and varargs)</p>
<p><strong>Release Notes &#8211; OGNL &#8211; Version 2.7.2</strong></p>
<h2>        Bug</h2>
<ul>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-80">OGNL-80</a>] &#8211;         CastCastException when setting properties on objects that use generics in superclass properties</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-121">OGNL-121</a>] &#8211;         Race condition in SimpleNode#evaluateGetValueBody(OgnlContext, Object)</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-122">OGNL-122</a>] &#8211;         OGNL Double to BigDecimal type conversion</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-124">OGNL-124</a>] &#8211;         When OgnlException is wrapped in another exception, any exception wrapped by the OgnlException appears to be swallowed</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-125">OGNL-125</a>] &#8211;         When OgnlException is wrapped in another exception, any exception wrapped by the OgnlException appears to be swallowed</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-126">OGNL-126</a>] &#8211;         Don&#8217;t call setter properly</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-127">OGNL-127</a>] &#8211;         can&#8217;t find methods with varargs parameter</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-128">OGNL-128</a>] &#8211;         remainder expression doesn&#8217;t look for child syntax expressions</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-129">OGNL-129</a>] &#8211;         Collision property and method with same name</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-130">OGNL-130</a>] &#8211;         Array syntax error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-134">OGNL-134</a>] &#8211;         primitive character conversion in statement compilation</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-136">OGNL-136</a>] &#8211;         Ignore synthetic methods when using getDeclaredMethods()</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-141">OGNL-141</a>] &#8211;         Very serious OgnlRuntime scalability and concurrency bug in versions greater than 2.6.10</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-142">OGNL-142</a>] &#8211;         scope=provided on javassist dependency leads to NoClassDefFoundError</li>
</ul>
<h2>        New Feature</h2>
<ul>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-7">OGNL-7</a>] &#8211;         Full Java 5 Support for OGNL</li>
</ul>
<h2>        Task</h2>
<ul>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-133">OGNL-133</a>] &#8211;         bring back old OgnlContext.callMethod parameter</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-137">OGNL-137</a>] &#8211;         Port OGNL docs from ogn.org to OpenSymphony&#8217;s OGNL confluence space</li>
</ul>
<p><strong>Release Notes &#8211; OGNL &#8211; Version 2.7.1</strong></p>
<h2>        Bug</h2>
<ul>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-96">OGNL-96</a>] &#8211;         object equality b0rken</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-97">OGNL-97</a>] &#8211;         Compile OGNL expressions often require #this</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-98">OGNL-98</a>] &#8211;         Simple ognl expressions like comparison &#8220;==&#8221; or divide &#8220;/&#8221; cause errors</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-103">OGNL-103</a>] &#8211;         Unable to find correct readMethod named is&#8230;()</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-104">OGNL-104</a>] &#8211;         object equality still broken</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-105">OGNL-105</a>] &#8211;         Compiled OGNL using bracket notation requires #this</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-106">OGNL-106</a>] &#8211;         Null Pointer Exception when parsing enum constant</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-107">OGNL-107</a>] &#8211;         CLONE -ClassCastException in ASTChain</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-108">OGNL-108</a>] &#8211;         Console Stack traces when using instanceof in OGNL</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-110">OGNL-110</a>] &#8211;         Subtracting or multiplying two doubles causes error in log, though the calculation is correct</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-112">OGNL-112</a>] &#8211;         Unable to find getter when multiple getters exist with similar naming</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-113">OGNL-113</a>] &#8211;         Object with null toString() causes NPE in OGNL</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-114">OGNL-114</a>] &#8211;         fails method name resolution for boolean JavaBean properties</li>
</ul>
<p><strong>Release Notes &#8211; OGNL &#8211; Version 2.7</strong></p>
<h2>        Bug</h2>
<ul>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-6">OGNL-6</a>] &#8211;         When setting fields type conversion returning null falsly reports a NoSuchPropertyException</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-9">OGNL-9</a>] &#8211;         Cannot handle hivemind&#8217;s messages.format</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-10">OGNL-10</a>] &#8211;         Calling methods with parameters containing more calls ?</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-11">OGNL-11</a>] &#8211;         ClassCastException in ASTChain</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-12">OGNL-12</a>] &#8211;         expression compilation problem</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-13">OGNL-13</a>] &#8211;         Class loading issue with in OGNL 2.6.7+ when multiple classloaders</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-14">OGNL-14</a>] &#8211;         Ternary expression, NPE</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-16">OGNL-16</a>] &#8211;         Unable to parse OGNL expressio</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-17">OGNL-17</a>] &#8211;         OR expression compile error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-18">OGNL-18</a>] &#8211;         bad array index selectedPresenters[index]</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-19">OGNL-19</a>] &#8211;         expression concatenated via &#8220;and&#8221; / &#8220;&amp;&amp;&#8221; is not evaluated correctly</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-20">OGNL-20</a>] &#8211;         expressions compilation complains about a null setter body</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-21">OGNL-21</a>] &#8211;         another &#8220;setter body: null &#8221; error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-25">OGNL-25</a>] &#8211;         Expression stop working in Tapestry 4.1.2</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-26">OGNL-26</a>] &#8211;         Try to access to the hidden class java.util.HashMap$Entry</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-27">OGNL-27</a>] &#8211;         Bug in new version of OGNL</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-28">OGNL-28</a>] &#8211;         CLONE -OR expression compile error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-29">OGNL-29</a>] &#8211;         String concatenation of different types fails in ternary expression</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-30">OGNL-30</a>] &#8211;         NOT with OR fails</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-31">OGNL-31</a>] &#8211;         Caching problem when looping over different implementations of the same interface</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-32">OGNL-32</a>] &#8211;         Contatenation of single character string results in wrong outcome</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-33">OGNL-33</a>] &#8211;         problem evaluating an expression on an abstract class not implementing all methods of an implemented interface</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-35">OGNL-35</a>] &#8211;         CLONE -expression concatenated via &#8220;and&#8221; / &#8220;&amp;&amp;&#8221; is not evaluated correctly</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-36">OGNL-36</a>] &#8211;         Another &#8220;getter body: null setter body: null &#8221; Error in combination with &#8220;||&#8221;</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-37">OGNL-37</a>] &#8211;         messages.format with 3 parameters causes ArrayIndexOutOfBoundsException</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-38">OGNL-38</a>] &#8211;         CLONE -NOT with OR fails</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-39">OGNL-39</a>] &#8211;         Ternary expression with date formatting causes Mismatched stack types error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-40">OGNL-40</a>] &#8211;         Error appending strings</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-41">OGNL-41</a>] &#8211;         javassist CannotCompileException for Expression &#8221; value || !okOnly &#8220;</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-43">OGNL-43</a>] &#8211;         getValue() not called on second parameter to &amp;&amp; if the first returns true</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-44">OGNL-44</a>] &#8211;         Appending a Long, String, and int results in error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-46">OGNL-46</a>] &#8211;         CLONE -Caching problem when looping over different implementations of the same interface</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-47">OGNL-47</a>] &#8211;         Using a property from an enum constant as a method argument fails</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-48">OGNL-48</a>] &#8211;         ognl string concatenation + static syntax does not render properly</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-49">OGNL-49</a>] &#8211;         VerifyError: wrong return type in function</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-50">OGNL-50</a>] &#8211;         Nullcheck with &amp;&amp; and ! fails</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-52">OGNL-52</a>] &#8211;         setAccessible(false) threading bug</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-53">OGNL-53</a>] &#8211;         OR fails with boolean expression as first condition</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-54">OGNL-54</a>] &#8211;         Calling method of object and passing a &#8216;conditional&#8217; expression as parameter</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-55">OGNL-55</a>] &#8211;         Calling method of object with String parameter</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-56">OGNL-56</a>] &#8211;         the NOT of complex expression fails</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-57">OGNL-57</a>] &#8211;         The compilation of expressions with negate symbol (!) causes javassist exception</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-58">OGNL-58</a>] &#8211;         Ternary that appends multiple types fails</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-59">OGNL-59</a>] &#8211;         Target is null for method</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-60">OGNL-60</a>] &#8211;         messages.format with one parameter on a component fails</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-61">OGNL-61</a>] &#8211;         Method call gets some (javassist?) code fragment passed as argument instead of the evaluated expression</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-62">OGNL-62</a>] &#8211;         Boolean property with is() and toggle() methods causes failsafe error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-63">OGNL-63</a>] &#8211;         IllegalArgumentException</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-64">OGNL-64</a>] &#8211;         Appending a Long with dot notation, a String, and an int creates failsafe error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-65">OGNL-65</a>] &#8211;         OR expression with &amp;&amp; and comparisons causes failsafe error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-66">OGNL-66</a>] &#8211;         Ternary evaluates unused expression</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-67">OGNL-67</a>] &#8211;         Invalid Types error for inequality operator (!=) when used in Ternary Expression</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-69">OGNL-69</a>] &#8211;         Tapestry Exception with a map object</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-70">OGNL-70</a>] &#8211;         CLONE -Ternary evaluates unused expression</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-72">OGNL-72</a>] &#8211;         Wrong return type in function</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-73">OGNL-73</a>] &#8211;         Ternary evaluates unused expression with date formatting</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-74">OGNL-74</a>] &#8211;         Error in ASTProperty when running in JDK1.4</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-75">OGNL-75</a>] &#8211;         Ognl Exception source is null for getProperty(null, &#8220;mapKey&#8221;) when using split on a map</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-76">OGNL-76</a>] &#8211;         Iterating over an Object Array in a For causes NoClassDefFoundError</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-77">OGNL-77</a>] &#8211;         javassist classname error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-78">OGNL-78</a>] &#8211;         Appending strings in ternary causes failsafe error</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-81">OGNL-81</a>] &#8211;         Boolean expression not evaluated</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-82">OGNL-82</a>] &#8211;         java.lang.Integer.valueOf() failling in 1.4 jre</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-83">OGNL-83</a>] &#8211;         Can&#8217;t get object properties returned from Map</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-84">OGNL-84</a>] &#8211;         Indexed expressions (&#8220;prop[index]&#8220;) do not lookup for the getProp(int index) method in the right class</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-85">OGNL-85</a>] &#8211;         constructor signature matching problem (int &lt;-&gt; java.lang.Integer)</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-86">OGNL-86</a>] &#8211;         use of incorrect expression root object in some arithmetic expressions</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-87">OGNL-87</a>] &#8211;         Get an ognl.InappropriateExpressionException when negating a boolean</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-89">OGNL-89</a>] &#8211;         expression compilation problem</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-90">OGNL-90</a>] &#8211;         cannot create empty list using {}</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-91">OGNL-91</a>] &#8211;         compilation problem in case of minus operator</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-92">OGNL-92</a>] &#8211;         &#8220;incompatible array types&#8221; with enum values</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-93">OGNL-93</a>] &#8211;         expression compilation problem</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-94">OGNL-94</a>] &#8211;         Tacos:Tree does not work with the current snapshot</li>
</ul>
<h2>        Improvement</h2>
<ul>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-3">OGNL-3</a>] &#8211;         Allow setter properties to have another return type than VOID</li>
<li>[<a href="http://jira.opensymphony.com/browse/OGNL-15">OGNL-15</a>] &#8211;         public abstract Boolean getQuery() vs isQuery()</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.opencomponentry.com/2008/02/01/ognl-272-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OGNL &#8211; Fastest EL &#8220;in the world&#8221;</title>
		<link>http://blog.opencomponentry.com/2007/07/13/ognl-fastest-el-in-the-world/</link>
		<comments>http://blog.opencomponentry.com/2007/07/13/ognl-fastest-el-in-the-world/#comments</comments>
		<pubDate>Fri, 13 Jul 2007 14:35:17 +0000</pubDate>
		<dc:creator>Jesse Kuhnert</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ognl]]></category>

		<guid isPermaLink="false">http://blog.opencomponentry.com/2007/07/13/ognl-fastest-el-in-the-world/</guid>
		<description><![CDATA[I don&#8217;t know why people care about these things, but just to be a dick I thought I&#8217;d go ahead and say it. OGNL is officially the fastest expression language implementation in the world! hooray, and stuff&#8230;.]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t know why people care about these things,  but just to be a dick I thought I&#8217;d go ahead and say it.</p>
<p>OGNL is officially the fastest expression language implementation <strong><em>in the world</em></strong>! hooray, and stuff&#8230;.</p>
<p><img src="http://blog.opencomponentry.com/wp-content/uploads/2007/07/celebrate.jpg" title="hooray" alt="hooray" align="middle" border="0" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opencomponentry.com/2007/07/13/ognl-fastest-el-in-the-world/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tapestry 4.1.2 / OGNL 2.7 Released</title>
		<link>http://blog.opencomponentry.com/2007/06/26/tapestry-412-ognl-27-released/</link>
		<comments>http://blog.opencomponentry.com/2007/06/26/tapestry-412-ognl-27-released/#comments</comments>
		<pubDate>Wed, 27 Jun 2007 02:28:38 +0000</pubDate>
		<dc:creator>Jesse Kuhnert</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ognl]]></category>
		<category><![CDATA[tapestry]]></category>

		<guid isPermaLink="false">http://blog.opencomponentry.com/2007/06/26/tapestry-412-ognl-27-released/</guid>
		<description><![CDATA[I am both happy and proud to announce the release of Tapestry 4.1.2 and OGNL 2.7. The official change list can be found both here (Tapestry) and here (OGNL). There has been such an immense amount of work put in to both of these releases that it doesn&#8217;t do them justice to just link to [...]]]></description>
			<content:encoded><![CDATA[<p>I am both happy and proud to announce the release of <a href="http://tapestry.apache.org/download.html" title="Download Tapestry 4.1.2.." target="_blank">Tapestry 4.1.2</a> and OGNL 2.7.  The official change list can be found both <a href="http://tapestry.apache.org/tapestry4.1/release-notes.html" title="Tapestry 4.1.2 release notes" target="_blank">here</a> (Tapestry) and <a href="http://jira.opensymphony.com/browse/OGNL?report=com.atlassian.jira.plugin.system.project:changelog-panel" title="OGNL Jira change log" target="_blank">here</a> (OGNL).</p>
<p>There has been such an immense amount of work put in to both of these releases that it doesn&#8217;t do them justice to just link to a simple jira change list:</p>
<ul>
<li><strong>Performance</strong> &#8211; The biggest reason for the delay in this release of Tapestry has been in waiting for the new <a href="http://blog.opencomponentry.com/2007/01/14/new-ognl-release-on-the-horizon-its-faster/" title="New ognl release highlights" target="_blank">OGNL bytecode compiler enhancements</a> to stabilize.  None of this would have been possible without the kind support / dedication of resources by Patrick Lightbody of OpenSymphony/WebWork/Struts2/Selenium/others I don&#8217;t know about.  Thanks Patrick!  The actual performance boost when using this new OGNL version for existing Tapestry 4 users will be like night and day.  The numbers are roughly available in the <a href="http://blog.opencomponentry.com/2007/01/14/new-ognl-release-on-the-horizon-its-faster/" title="Ognl release stats" target="_blank">previous post on the subject</a> &#8211; but you are looking at something around 6 times faster than the old interpreted mode was capable of doing.</li>
<li><strong>Memory consumption / More Performance</strong> &#8211; The ever consuming obsession that has become <a href="http://yourkit.com/" title="YourKit profiler" target="_blank">YourKit</a> has done almost as much for performance and memory consumption that the OGNL bytecode enhancements have.   Development mode issues with running out of jvm memory have been eliminated completely &#8211; as well as a number of unneccessary memory consumers in various internal portions of the framework.  Page/component instances are now pooled by a much more robust / <a href="http://tapestry.apache.org/tapestry4.1/developmentguide/performancetuning.html" title="Tapestry performance tuning guide." target="_blank">configurable</a> pool implementation that finally allows idle pages / components to be discarded from the pool &#8211; thus reclaiming valuable heap space in production applications at non peak times.   As for the performance improvements, well &#8211; let me just say that if you have used YourKit before then you&#8217;ll know what &#8220;the only hot spots left are in the servlet container itself&#8221; means.   It&#8217;s damn fast, ok? <img src='http://blog.opencomponentry.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li><strong>Testing</strong> &#8211; A common complaint in the past is that the framework hasn&#8217;t really been very giving in sharing how it tests components/pages internally.  Obviously people like to test things these days so it makes sense to help with that.  We&#8217;ve refactored things/moved code around some and now have a new tapestry-test library that you can use to help test your Tapestry applications here: <a href="http://tapestry.apache.org/tapestry4.1/tapestry-test/index.html" title="Tapestry test library." target="_blank">http://tapestry.apache.org/tapestry4.1/tapestry-test/index.html</a> .</li>
<li><strong>Asset caching</strong> &#8211; What we feel constitutes one of the higher quality image/javascript/resource caching systems available for standard out of the box servlet apps &#8211; (even rivaling some servlet containers in many instances) &#8211; is also now available.  The details of why/how that came about can be read about <a href="http://blog.opencomponentry.com/2006/12/03/gzip-where-have-you-been-all-my-life/" title="Gzip / caching " target="_blank">here</a>.  These enhacements do all kinds of nice things for your assets for you automatically &#8211; such as gzipping javascript and css resources as well as handling Etag header fields and similar logic &#8211; all while appropriately handling all of the various inevitable browser version quirks that constitute the bain of every web developers existence..</li>
<li><strong>Google rounded corners / drop shadow image services</strong> &#8211; Since we know many of you will only be lured by shiny baubles (myself included) &#8211; we have added a little something extra to entice you with via the very robust <a href="http://tapestry.apache.org/tapestry4.1/developmentguide/hivemind/roundedcorners.html" title="Google rounded corner / drop shadow image services" target="_blank">image generation services</a>.</li>
<li><strong>Documentation</strong> &#8211; We know people haven&#8217;t been very happy about this aspect of things in the past.  A number of big changes have slowly been happening in this area &#8211; the biggest being a great new series of tutorials covering almost all of the common issues you&#8217;ll run across in Tapestry 4 development by <a href="http://sundraw.ws/" title="Alexander Kolesnikov" target="_blank">Alexander Kolesnikov</a>.  They can be found <a href="http://tapestry.apache.org/tapestry4.1/tutorials/index.html" title="Tapestry 4 tutorials" target="_blank">here</a>.  Many updates/additions/improvements have been made to the overall documentation effort of Tapestry 4 as well whenever we have found any obvious holes.  What&#8217;s even better than documentation though?  Not needing it to begin with.  While we have spent a great deal of time updating and adding to the documentation we have also spent a lot of time improving the framework in general and eliminating any obvious quirks that might have previously lead people to wanting more documentation to begin with.  We think you&#8217;ll find that a lot more of your typical every day tasks will really &#8220;just work&#8221; as expected.</li>
<li><strong>Dojo &amp;&amp; Prototype/Scriptaculous integration</strong> &#8211; The bundled version of <a href="http://dojotoolkit.org/" title="Dojo JavaScript Toolkit" target="_blank">Dojo</a> provided by Tapestry has been upgraded to the latest <a href="http://dojotoolkit.org/releaseNotes/0.4.3" title="Dojo 0.4.3 release notes">0.4.3 version</a>. (ok, the latest is technically 0.9 but first things first..)  This has allowed us to not only get all of the great bug fixes / improvements made by the team but also to take advantage of the new layered build system developed by James Burke of AOL.  The layered build system has increased the speed of the overall page load time of any given page substantially and we are very happy/thankful for his awesome work in this area.   This version also features integration of the latest versions of <a href="http://www.prototypejs.org/" title="Prototype Javascript library" target="_blank">Prototype</a>/<a href="http://script.aculo.us/" title="Script.aculo.us " target="_blank">Script.aculo.us</a> libraries and the requisite component that uses them which has been named &#8220;<a href="http://tapestry.apache.org/tapestry4.1/components/scriptaculous/suggest.html" title="New Suggest component" target="_blank">Suggest</a>&#8220;.</li>
<li><strong>Ajax / JSON Support</strong> &#8211; Second only to the performance improvements has been the amount of work put in to refining and improving the Tapestry AJAX/JSON support.  Client side profiling / performance improvements have overall also been substantially improved.  New <a href="http://tapestry.apache.org/tapestry4.1/ajax/index.html" title="Ajax documentation." target="_blank">documentation</a> has been added covering various key areas of this portion of the API as well as some new <a href="http://naturaldocs.org/" title="Naturaldocs" target="_blank">naturaldocs</a> generated apidocs for our <a href="http://tapestry.apache.org/tapestry4.1/jsdoc/index.html" title="Tapestry 4.1.2 javascript api docs" target="_blank">client side javascript library</a>.  I don&#8217;t feel bad in saying that Tapestry 4.1.2 probably represents one of the most robust java web framework libraries available for AJAX applications in the open source java world today.  We&#8217;ve been doing this for a <a href="http://tacos.sourceforge.net/" target="_blank">really</a> long time now and kind of have this area covered.  Show me something that does as much as Tapestry does while also being flexible / debuggable enough to allow you to easily branch off and do things your own way and I&#8217;ll concede defeat.  Until then&#8230;.it&#8217;s well worth checking out if you haven&#8217;t tried this particular side of Tapestry yet.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.opencomponentry.com/2007/06/26/tapestry-412-ognl-27-released/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>tentative ognl 2.7-SNAPSHOT release out to blow up a project near you..</title>
		<link>http://blog.opencomponentry.com/2007/03/05/tentative-ognl-27-snapshot-release-out-to-blow-up-a-project-near-you/</link>
		<comments>http://blog.opencomponentry.com/2007/03/05/tentative-ognl-27-snapshot-release-out-to-blow-up-a-project-near-you/#comments</comments>
		<pubDate>Tue, 06 Mar 2007 02:33:00 +0000</pubDate>
		<dc:creator>Jesse Kuhnert</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ognl]]></category>
		<category><![CDATA[tapestry]]></category>

		<guid isPermaLink="false">http://blog.opencomponentry.com/2007/03/05/tentative-ognl-27-snapshot-release-out-to-blow-up-a-project-near-you/</guid>
		<description><![CDATA[Given the number of new failures I&#8217;ve run into since I completed the first round of getting all of the existing unit tests to pass using the new ExpressionCompiler I&#8217;m pretty terrified at the thought of anyone trying to use it, but progress must come somehow and I&#8217;ve run out of things I can find [...]]]></description>
			<content:encoded><![CDATA[<p>Given the number of new failures I&#8217;ve run into since I completed the first round of getting all of the existing unit tests to pass using the new ExpressionCompiler I&#8217;m pretty terrified at the thought of anyone trying to use it, but progress must come somehow and I&#8217;ve run out of things I can find to break it with &#8211; so you can grab the continuously updated version from <a href="http://howardlewisship.com/repository/ognl/ognl/" title="ognl 2.7--SNAPSHOT Maven2 repo " target="_blank">http://howardlewisship.com/repository/ognl/ognl/ </a>for now. (opensymphony has a new maven2 repo in the works, it&#8217;ll move there once it&#8217;s setup )</p>
<p>What does this mean for the good majority of people? Absolutely nothing! <em>(though absolute neitz sounds better) </em></p>
<p>That is to say, unless you are integrating it into a framework of some sort it is highly unlikely you&#8217;ll find any benefit from using it as you won&#8217;t get the fancy new compilation features unless you use some of the new API calls. Of course I&#8217;ve done the first round and have it officially integrated into the mainline Tapestry 4.1.2-SNAPSHOT releases so you <em>can</em> get some benefit from it if you happen to be using that framework.</p>
<p>I have found some &#8220;unfortunateness&#8221; with some of the javassist api. Namely a lack of support for generics as of the latest 3.4.ga version I&#8217;ve been working against. It looks like I may actually need to sit down and give <a href="http://asm.objectweb.org/" title="ASM - Java bytecode manipulation framework" target="_blank">asm</a> a little test run to see if it fits my needs as was suggested previously by <a href="http://jroller.com/page/eu" target="_blank" title="Eugene Kuleshov  - ASM developer">Eugene</a> &amp;&amp; <a href="http://crazybob.org/" title="He might be crazy.." target="_blank">Bob</a>.  This makes me none too happy, though I hope to be able to take this new knowledge and use it to rip javassist out of Tapestry so that we can support generics properly there. <em>(even though I&#8217;ve added a sort of impure/bastardized version of support for this already) </em></p>
<p><strong>OGNL Future</strong></p>
<p>Ok, so maybe I&#8217;m starting to enjoy some of this work a little more than I was at first now that things are stabilizing a little. As such I plan on implementing a few more features Drew had previously mentioned wanting to see happen (as well as a few of my own / whatever others need):</p>
<ul>
<li>Separation of 1.4/1.5 API so that the introduction of &#8220;Type&#8221; in generic form as well as the impact that has on the enhancements codebase can be clearly separated as much as possible. <em>(I&#8217;ll probably be taking another look at <a href="http://testng.org" title="TestNG - " target="_blank">TestNG</a> for inspiration on doing this properly)<br />
</em></li>
<li>Replace javassist with <a href="http://asm.objectweb.org/" target="_blank">asm</a>.</li>
<li>Refactor/replace OgnlRuntime with a more IoC friendly version that can be controlled in such a way that multiple instances can live together in the same VM without issues related to static constructs..</li>
<li>Introduce a couple new grammar rules for things that look neat, like <a href="http://tapestryjava.blogspot.com/" title="Tapesrty/Hivemind creator" target="_blank">Howards</a> work on <a href="http://tapestry.apache.org/tapestry5/" target="_blank">Tapestry 5</a> and the introduction of the &#8220;0&#8230;N&#8221; loop . <em>(that&#8217;s right, a grammar change &#8211; I&#8217;m looking at you mvel &#8230;..)</em></li>
<li>&#8230;..? Not sure what else is missing.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.opencomponentry.com/2007/03/05/tentative-ognl-27-snapshot-release-out-to-blow-up-a-project-near-you/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>new OGNL release on the horizon (it&#8217;s faster)</title>
		<link>http://blog.opencomponentry.com/2007/01/14/new-ognl-release-on-the-horizon-its-faster/</link>
		<comments>http://blog.opencomponentry.com/2007/01/14/new-ognl-release-on-the-horizon-its-faster/#comments</comments>
		<pubDate>Mon, 15 Jan 2007 01:54:01 +0000</pubDate>
		<dc:creator>Jesse Kuhnert</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ognl]]></category>
		<category><![CDATA[tapestry]]></category>

		<guid isPermaLink="false">http://blog.opencomponentry.com/2007/01/14/new-ognl-release-on-the-horizon-its-faster/</guid>
		<description><![CDATA[I&#8217;ve been pretty busy the last few weeks working on a tiny set of enhancements to OGNL that should help improve the runtime performance of the library. Much like Tapestry-Prop, the new set of OGNL enhancements rely on javassist to do incremental bytecode compilation / translation of your ognl expressions into their pure java equivalents. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been pretty busy the last few weeks working on a tiny set of enhancements to <a target="_blank" title="Object Graph Navigation Language" href="http://www.ognl.org/">OGNL</a> that should help improve the runtime performance of the library.</p>
<p>Much like <a target="_blank" href="http://howardlewisship.com/tapestry-javaforge/tapestry-prop/">Tapestry-Prop</a>, the new set of <a target="_blank" title="Object Graph Navigation Language" href="http://www.ognl.org/">OGNL</a> enhancements rely on <a target="_blank" title="JBoss Javassist" href="http://www.jboss.org/products/javassist">javassist</a> to do incremental bytecode compilation / translation of your ognl expressions into their pure java equivalents. There are still plenty of kinks being knocked out here and there, but overall the changes are finally starting to form into something that might actually be usable.</p>
<p>I&#8217;d like to be able to take credit for it myself &#8211; but the reality is that <a target="_blank" title="Creator of OGNL" href="http://www.ognl.org/">Drew</a> had already started a lot of work doing exactly this, so I just continued on where he stopped. (using knowledge gained while doing <a target="_blank" title="JBoss Javassist" href="http://www.jboss.org/products/javassist">javassist</a> work on <a target="_blank" title="Apache Tapestry" href="http://tapestry.apache.org">Tapestry</a> )</p>
<p>I know people really like seeing performance metrics, so here&#8217;s what I&#8217;m getting back now from a couple basic expressions:</p>
<pre style="background:#efefef;-moz-border-radius:5px;padding-left:6px;border-right:1px solid #aaa;border-bottom:1px solid #aaa"><code>
===================================================================

Constant: 100 + (20 * 5)
       java: 2623089 iterations in 1500 ms
   compiled: 2559264 iterations in 1500 ms (1.025 times slower than java)
interpreted: 2590897 iterations in 1500 ms (1.012 times slower than java)

Single Property: bean2
       java: 2648322 iterations in 1500 ms
   compiled: 2622987 iterations in 1500 ms (1.010 times slower than java)
interpreted: 1816261 iterations in 1500 ms (1.458 times slower than java)

Property Navigation: bean2.bean3.value
       java: 2634885 iterations in 1500 ms
   compiled: 2595186 iterations in 1500 ms (1.015 times slower than java)
interpreted: 538238 iterations in 1500 ms (4.895 times slower than java)

 Property Setting with context key: bean2.bean3.nullValue
       java: 2638050 iterations in 1500 ms
   compiled: 2622542 iterations in 1500 ms (1.006 times slower than java)
interpreted: 563363 iterations in 1500 ms (4.683 times slower than java)

Property Navigation and Comparison: bean2.bean3.value <= 24
       java: 2674087 iterations in 1500 ms
   compiled: 2622686 iterations in 1500 ms (1.020 times slower than java)
interpreted: 517796 iterations in 1500 ms (5.164 times slower than java)

Property Navigation with Indexed Access: bean2.bean3.indexedValue[25]
       java: 2672025 iterations in 1500 ms
   compiled: 2583340 iterations in 1500 ms (1.034 times slower than java)
interpreted: 329001 iterations in 1500 ms (8.122 times slower than java)

Property Navigation with Map Access: bean2.bean3.map["foo"]
       java: 2572917 iterations in 1500 ms
   compiled: 2509147 iterations in 1500 ms (1.025 times slower than java)
interpreted: 404174 iterations in 1500 ms (6.366 times slower than java)

Property Navigation with Map value set: bean2.bean3.map["foo"]
       java: 2543566 iterations in 1500 ms
   compiled: 2545064 iterations in 1500 ms (0.999 times faster than java)
interpreted: 409172 iterations in 1500 ms (6.216 times slower than java)
===================================================================
</code></pre>
<p>This is the direct output from an ant console run, so sorry if the formatting isn't ideal.</p>
<p>If you are wondering if / when this will be released, I really don't know. All of the changes made so far have been local to my machine only - but if the patches are accepted then I'd optimistically expect a new maven2 snapshot version of it released sometime this week.</p>
<p>The new changes have also been integrated / tested with Tapestry 4.1.2 already,  we're just waiting for the right infrastructure to show up to commit the changes to. For an example just hit the standard Tapestry <a target="_blank" title="Apache Tapestry Demos" href="http://tapestry.apache.org/tapestry4.1/demos.html ">demo page</a>, everything there is running on the new code already.</p>
<p><a target="_blank" title="Apache Tapestry Demos" href="http://tapestry.apache.org/tapestry4.1/demos.html ">http://tapestry.apache.org/tapestry4.1/demos.html </a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.opencomponentry.com/2007/01/14/new-ognl-release-on-the-horizon-its-faster/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
