Hi Jakob<br><br>I checked the patch and is not possible to add a method to an interface<br>(addTarget on javax.faces.view.AttachedObjectTarget). In that case it is<br>better to let that as an implementation detail.<br><br>
I think in this case (note this is my personal opinion) it is necessary <br>to take a different route than &quot;reuse&quot; the algorithm for <br>vdl.retargetAttachedObjects. In theory, every tag that<br>expose an attached object when is inside a composite component<br>
(ex: f:actionListener), register it in a implementation specific list to be<br>used later by vdl.retargetAttachedObjects. I was thinking on just use<br>another list that will be used by these tags, but in this case take into<br>
account how facelets algorithm is executed and affect it properly when<br>the proposed tags are executed.<br><br>regards,<br><br>Leonardo Uribe<br><br><div class="gmail_quote">2010/11/1 Jakob Korherr <span dir="ltr">&lt;<a href="mailto:jakob.korherr@gmail.com">jakob.korherr@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Hi guys,<br>
<br>
I added a prototype patch for this problem to the spec issue at [1].<br>
<br>
The patch adds the following tags:<br>
<br>
- cc:implementsActionSource<br>
- cc:implementsEditableValueHolder<br>
- cc:implementsValueHolder<br>
- cc:insertClientBehavior<br>
<br>
In addition, the patch contains a systest for cc:implementsActionSource and<br>
cc:implementsEditableValueHolder.<br>
<br>
Everything works great and it really felt good writing the tests with these new<br>
tags.<br>
<br>
One thing did not work though: f:ajax. It seems that it has some hack for<br>
composite components which uses the targets attribute of cc:clientBehavior. Did<br>
not jump into deep here, but &quot;normal&quot; client behaviors are working.<br>
<br>
@David: OK, sorry I misunderstood your mail. Please take a look at the<br>
patch and also the usage examples in the systest. IMHO &quot;implements&quot;<br>
(or &quot;insert&quot; in the case of clientBehavior) fits really, really well<br>
here, because it tells us that the surrounding button implements the<br>
action source with the name XXX of the composite component. And yes,<br>
multiple action source implementations are possible. However we most<br>
certainly can discuss this ;)<br>
<br>
Frankly, it would be very, very great to have this in JSF 2.1.<br>
<br>
Regards,<br>
Jakob<br>
<br>
[1] <a href="https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=901" target="_blank">https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=901</a><br>
<br>
2010/10/31 David Geary &lt;<a href="mailto:clarity.training@gmail.com">clarity.training@gmail.com</a>&gt;:<br>
<div><div></div><div class="h5">&gt; 2010/10/30 Jakob Korherr &lt;<a href="mailto:jakob.korherr@gmail.com">jakob.korherr@gmail.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; Hi,<br>
&gt;&gt;<br>
&gt;&gt; Andy, I totally agree with you in all points mentioned in your<br>
&gt;&gt; previous mail (actually this just made my day).<br>
&gt;<br>
&gt; So do I. Perhaps I wasn&#39;t clear, but I agree that the problems outlined by<br>
&gt; Andy need to be addressed. I also understand, and agree with, the fact that<br>
&gt; targets is an OO misdemeanor, with an interface depending upon<br>
&gt; implementation details.<br>
&gt; I&#39;m just not crazy about the proposed solution. Consider the following<br>
&gt; example from earlier in this thread:<br>
&gt; &lt;composite:interface&gt;<br>
&gt;   &lt;composite:actionSource name=&quot;loginButton&quot;/&gt;<br>
&gt;  &lt;/composite:interface&gt;<br>
&gt;<br>
&gt;  &lt;composite:implementation&gt;<br>
&gt;   &lt;h:commandButton&gt;<br>
&gt;     &lt;composite:implementsActionSource name=&quot;loginButton&quot;/&gt;<br>
&gt;   &lt;/h:commandButton&gt;<br>
&gt;  &lt;/composite:implementation&gt;<br>
&gt; In the preceding markup, the button doesn&#39;t implement the named action<br>
&gt; source, as advertised, because the action source is not an action source at<br>
&gt; all, but rather a reference to one -- and it&#39;s the action source that the<br>
&gt; button already implements! That bit of circular illogic hurts my head. It&#39;s<br>
&gt; also a lot of typing.<br>
&gt; And then there&#39;s the problem of using the same attribute name (&quot;name&quot;) for<br>
&gt; two different things in two closely related tags. At the very least,<br>
&gt; shouldn&#39;t the &quot;name&quot; attribute of &lt;composite:implementsActionSource&gt; be<br>
&gt; something else, maybe &quot;source&quot;, for example?<br>
&gt; Also, if we&#39;re going to use &quot;implements&quot;, why must we have separate tags for<br>
&gt; each type of source? Why not just &lt;composite:implements<br>
&gt; name=&quot;loginButton&quot;/&gt;? Or perhaps something more semantically correct:<br>
&gt; &lt;composite:interface&gt;<br>
&gt;   &lt;composite:actionSource name=&quot;loginButton&quot;/&gt;<br>
&gt;  &lt;/composite:interface&gt;<br>
&gt;<br>
&gt;  &lt;composite:implementation&gt;<br>
&gt;   &lt;h:commandButton&gt;<br>
&gt;     &lt;composite:references source=&quot;loginButton&quot; (or perhaps refersTo instead<br>
&gt; of references)<br>
&gt;   &lt;/h:commandButton&gt;<br>
&gt;  &lt;/composite:implementation&gt;<br>
&gt; Is it just possible to do this with component ids, and forgo the extra tag<br>
&gt; altogether?<br>
&gt; &lt;composite:interface&gt;<br>
&gt;   &lt;composite:actionSource name=&quot;loginButton&quot;/&gt;<br>
&gt;  &lt;/composite:interface&gt;<br>
&gt;<br>
&gt;  &lt;composite:implementation&gt;<br>
&gt;   &lt;h:commandButton id=&quot;loginButton&quot;&gt;<br>
&gt;   &lt;/h:commandButton&gt;<br>
&gt;  &lt;/composite:implementation&gt;<br>
&gt; Finally, perhaps I missed this in the thread, but does this solution let a<br>
&gt; composite component author bind multiple targets (sorry) to a single source?<br>
&gt; Again, I agree with the problems that Andy so eloquently described. I&#39;d just<br>
&gt; like to see us take a little more time to think through the solution.<br>
&gt;<br>
&gt; david<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; And I most liked the<br>
&gt;&gt; following paragraph:<br>
&gt;&gt;<br>
&gt;&gt; &gt;Seriously??  After reading this, is it any wonder that our users are<br>
&gt;&gt; &gt; flailing on this?  If anything in this very extended email discussion reeks<br>
&gt;&gt; &gt; of arcane high priestdom-ness, this is it.  Wouldn&#39;t life have been simpler<br>
&gt;&gt; &gt; for our users if &lt;composite:attribute&gt; had no &quot;targets&quot; attribute<br>
&gt;&gt; &gt; whatsoever, no special-casing for the &quot;name&quot; attribute and instead we simply<br>
&gt;&gt; &gt; boiled this down to: &quot;use #{cc.attrs} for everything&quot;?<br>
&gt;&gt;<br>
&gt;&gt; IMHO: Yes, totally!<br>
&gt;&gt;<br>
&gt;&gt; The current solution really is internally inconsistent, and<br>
&gt;&gt; furthermore many developers (and as you mentioned: even EG members)<br>
&gt;&gt; are having trouble with it. I myself implemented a lot of this for<br>
&gt;&gt; MyFaces, but I still have problems when using it without looking at my<br>
&gt;&gt; cheat-sheet...<br>
&gt;&gt;<br>
&gt;&gt; And it&#39;s not just the inconsistency: the ID-reference approach really<br>
&gt;&gt; is something we should stay away from, because no-one actually knows<br>
&gt;&gt; which ID to use: full clientid? last part of the clientid? what about<br>
&gt;&gt; naming containers? or even worse: what about data tables or<br>
&gt;&gt; &lt;ui:repeat&gt; (because they add an index to the clientId)? Doing a<br>
&gt;&gt; back-reference to the interface section here seems just soooo much<br>
&gt;&gt; better.<br>
&gt;&gt;<br>
&gt;&gt; David, although I know you don&#39;t really like the OO reference here,<br>
&gt;&gt; but IMO the target approach is even worse than this:<br>
&gt;&gt;<br>
&gt;&gt; public interface MyInterface implemented-by Foo, Bar, Bas {}<br>
&gt;&gt;<br>
&gt;&gt; ... because even in this scenario you definitely would know the<br>
&gt;&gt; package of Foo, Bar and Bas (or in other words: you would know which<br>
&gt;&gt; client-id to use).<br>
&gt;&gt;<br>
&gt;&gt; However, I always know how to insert a facet into a composite<br>
&gt;&gt; component, because this approach is very intuitive. Thus I think the<br>
&gt;&gt; right thing to do is to add those tags for actionSource, valueHolder,<br>
&gt;&gt; editableValueHolder and clientBehavior too and to &quot;get rid&quot; of the<br>
&gt;&gt; targets-solution.<br>
&gt;&gt;<br>
&gt;&gt; In the case of actionSource, valueHolder and editableValueHolder I<br>
&gt;&gt; really like &quot;implementsXXX&quot;, because it shows that the certain<br>
&gt;&gt; implementation component implements this functionality for/of the<br>
&gt;&gt; composite component. However in the case of clientBehavior, I think we<br>
&gt;&gt; should go with cc:insertClientBehavior, just as we did with<br>
&gt;&gt; cc:insertFacet, because facets and clientBehaviors are somehow related<br>
&gt;&gt; here..<br>
&gt;&gt;<br>
&gt;&gt; To wrap this up again, I&#39;d propose to add these tags for JSF 2.1 in<br>
&gt;&gt; order to make the life of our users a lot easier:<br>
&gt;&gt;<br>
&gt;&gt; &lt;cc:implementsActionSource name=&quot;XXX&quot; /&gt;<br>
&gt;&gt; &lt;cc:implementsEditableValueHolder name=&quot;XXX&quot; /&gt;<br>
&gt;&gt; &lt;cc:implementsValueHolder name=&quot;XXX&quot; /&gt;<br>
&gt;&gt; &lt;cc:insertClientBehavior name=&quot;XXX&quot; /&gt;<br>
&gt;&gt;<br>
&gt;&gt; Regards,<br>
&gt;&gt; Jakob<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; 2010/10/30 Andy Schwartz &lt;<a href="mailto:andy.schwartz@oracle.com">andy.schwartz@oracle.com</a>&gt;:<br>
&gt;&gt; &gt; On 10/29/10 11:06 PM, David Geary wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; It seems that I am perhaps the only dissenting voice here, but I don&#39;t<br>
&gt;&gt; &gt; care<br>
&gt;&gt; &gt; for this solution.<br>
&gt;&gt; &gt; To those of us that understand the rationale for removing targets and<br>
&gt;&gt; &gt; adding<br>
&gt;&gt; &gt; these cc:implements... tags, the new tags make perfect sense. But to the<br>
&gt;&gt; &gt; uninitiated, they will be bewildering. What does it mean for a button to<br>
&gt;&gt; &gt; &quot;implements action source&quot;? Buttons already implement action source.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Ed also raised this concern.  If we are going to continue on with this<br>
&gt;&gt; &gt; approach (and I hope that we do), perhaps we need to come up with less<br>
&gt;&gt; &gt; ambiguous names for these tags.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; IMO, targets are much easier to understand, and to explain.<br>
&gt;&gt; &gt; I understand the urge to remove the targets attribute based on their OO<br>
&gt;&gt; &gt; impurity,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; OO purity may be part of it, though I believe that the a bigger reason<br>
&gt;&gt; &gt; for<br>
&gt;&gt; &gt; focusing on this area is that end users (and even EG members) seem to be<br>
&gt;&gt; &gt; having difficulty with our existing APIs.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; but I think the solution could use some more thought. There are already<br>
&gt;&gt; &gt; too<br>
&gt;&gt; &gt; many arcane oddities in JSF, whose rationale is only intuited by high<br>
&gt;&gt; &gt; priests, and I hate to see us adding more.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; The &quot;high priest&quot; analogy does not present an especially charitable view<br>
&gt;&gt; &gt; of<br>
&gt;&gt; &gt; what is happening here.  We released an API in JSF 2.0 that users are<br>
&gt;&gt; &gt; finding problematic.  Expert group/community members have recognized<br>
&gt;&gt; &gt; that<br>
&gt;&gt; &gt; this is a problem and are attempting to devise a solution that would be<br>
&gt;&gt; &gt; more<br>
&gt;&gt; &gt; in line with how our users expect this to work.  Perhaps we are off base<br>
&gt;&gt; &gt; in<br>
&gt;&gt; &gt; aspects of this solution, but the fact that we are looking to address a<br>
&gt;&gt; &gt; problem area is a good thing.  I don&#39;t think it is fair to apply the old<br>
&gt;&gt; &gt; high priest/ivory tower motif here.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; My own take is that a big reason why our end users are having difficulty<br>
&gt;&gt; &gt; with our current solution is that it is internally inconsistent.  In<br>
&gt;&gt; &gt; some<br>
&gt;&gt; &gt; cases implementation tags refer to interface metadata (eg.<br>
&gt;&gt; &gt; &lt;composite:insertFacet&gt;).  In other cases interface metadata refers to<br>
&gt;&gt; &gt; implementation tags (eg. &lt;composite:actionSource&gt;).  In one case, that<br>
&gt;&gt; &gt; in<br>
&gt;&gt; &gt; retrospect seems embarrassingly convoluted, we have bi-directional<br>
&gt;&gt; &gt; references between interface and implementation: &lt;composite:attribute&gt;,<br>
&gt;&gt; &gt; which sometimes uses &quot;targets&quot; and other times is referenced via<br>
&gt;&gt; &gt; #{cc.attrs}.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Looking at the tag documentation for the &lt;composite:attribute&gt; &quot;targets&quot;<br>
&gt;&gt; &gt; attribute:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; If this element has a method-signature attribute, the value of the<br>
&gt;&gt; &gt; targets<br>
&gt;&gt; &gt; attribute must be interpreted as a space (not tab) separated list of<br>
&gt;&gt; &gt; client<br>
&gt;&gt; &gt; ids (relative to the top level component) of components within the<br>
&gt;&gt; &gt; &lt;composite:implementation&gt; section. Space is used as the delimiter for<br>
&gt;&gt; &gt; compatibility with the IDREFS and NMTOKENS data types from the XML<br>
&gt;&gt; &gt; Schema.<br>
&gt;&gt; &gt; Each entry in the list must be interpreted as the id of an inner<br>
&gt;&gt; &gt; component<br>
&gt;&gt; &gt; to which the MethodExpression from the composite component tag in the<br>
&gt;&gt; &gt; using<br>
&gt;&gt; &gt; page must be applied. If this element has a method-signature attribute,<br>
&gt;&gt; &gt; but<br>
&gt;&gt; &gt; no targets attribute, the value of the name attribute is used as the<br>
&gt;&gt; &gt; single<br>
&gt;&gt; &gt; entry in the list. If the value of the name attribute is not one of the<br>
&gt;&gt; &gt; special values listed in the description of the name attribute, targets<br>
&gt;&gt; &gt; (or<br>
&gt;&gt; &gt; its derived value) need not correspond to the id of an inner component.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; The &quot;name&quot; attribute documentation isn&#39;t especially reassuring:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; The name of the attribute as it must appear on the composite component<br>
&gt;&gt; &gt; tag<br>
&gt;&gt; &gt; in the using page. If the value of the name attribute is equal to<br>
&gt;&gt; &gt; (without<br>
&gt;&gt; &gt; the quotes) “action”, “actionListener”, “validator”, or<br>
&gt;&gt; &gt; “valueChangeListener”, the action described in<br>
&gt;&gt; &gt; ViewHandler.retargetMethodExpressions() must be taken to handle the<br>
&gt;&gt; &gt; attribute. In these cases, the method-signature attribute, if present,<br>
&gt;&gt; &gt; must<br>
&gt;&gt; &gt; be ignored as its value is derived as described in<br>
&gt;&gt; &gt; retargetMethodExpressions().<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Seriously??  After reading this, is it any wonder that our users are<br>
&gt;&gt; &gt; flailing on this?  If anything in this very extended email discussion<br>
&gt;&gt; &gt; reeks<br>
&gt;&gt; &gt; of arcane high priestdom-ness, this is it.  Wouldn&#39;t life have been<br>
&gt;&gt; &gt; simpler<br>
&gt;&gt; &gt; for our users if &lt;composite:attribute&gt; had no &quot;targets&quot; attribute<br>
&gt;&gt; &gt; whatsoever, no special-casing for the &quot;name&quot; attribute and instead we<br>
&gt;&gt; &gt; simply<br>
&gt;&gt; &gt; boiled this down to: &quot;use #{cc.attrs} for everything&quot;?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I realize that the &lt;composite:attribute&gt; use case is a bit different<br>
&gt;&gt; &gt; from<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &lt;composite:actionSource&gt;/&lt;composite:valueHolder&gt;/&lt;composite:editableValueHolder&gt;<br>
&gt;&gt; &gt; cases, so perhaps it would be sufficient to address the<br>
&gt;&gt; &gt; &lt;composite:attribute&gt; insanity and stop there.  However, I do think it<br>
&gt;&gt; &gt; is<br>
&gt;&gt; &gt; worthwhile to look at the full solution and see whether there is room<br>
&gt;&gt; &gt; for<br>
&gt;&gt; &gt; additional simplification/consistency.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; To me, &lt;composite:actionSource&gt; is not all that different from<br>
&gt;&gt; &gt; &lt;composite:facet&gt;.  The &lt;composite:facet&gt; API, like<br>
&gt;&gt; &gt; &lt;composite:actionSource&gt;, could have just as easily used a target<br>
&gt;&gt; &gt; approach.<br>
&gt;&gt; &gt; Yet we decided to go with this:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &lt;composite:interface&gt;<br>
&gt;&gt; &gt;   &lt;composite:facet name=&quot;foo&quot;/&gt;<br>
&gt;&gt; &gt; &lt;composite:interface&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &lt;composite:implementation&gt;<br>
&gt;&gt; &gt;   &lt;bar:someComp&gt;<br>
&gt;&gt; &gt;     &lt;composite:insertFacet name=&quot;foo&quot;/&gt;<br>
&gt;&gt; &gt;   &lt;/bar:someComp&gt;<br>
&gt;&gt; &gt; &lt;/composite:implementation&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Instead of:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &lt;composite:interface&gt;<br>
&gt;&gt; &gt;   &lt;composite:facet name=&quot;foo&quot; target=&quot;mySomeComp&quot;/&gt;<br>
&gt;&gt; &gt; &lt;composite:interface&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &lt;composite:implementation&gt;<br>
&gt;&gt; &gt;   &lt;bar:someComp id=&quot;mySomeComp&quot;/&gt;<br>
&gt;&gt; &gt; &lt;/composite:implementation&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Why did we go with &lt;composite:insertFacet&gt; instead of &quot;target&quot;?  Which<br>
&gt;&gt; &gt; approach is easier for users?  If we had provided both of these<br>
&gt;&gt; &gt; approaches<br>
&gt;&gt; &gt; in 2.0, which would users prefer?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; In my experience I have found our id-referencing APIs to be a difficult<br>
&gt;&gt; &gt; to<br>
&gt;&gt; &gt; work with.  Id references can be confusing.  It isn&#39;t always clear<br>
&gt;&gt; &gt; whether<br>
&gt;&gt; &gt; relative or full ids should be used or what location relative ids are<br>
&gt;&gt; &gt; relative to.  The presence of naming containers influence the<br>
&gt;&gt; &gt; specification<br>
&gt;&gt; &gt; of id references in ways that can trip up unsuspecting users.  Id<br>
&gt;&gt; &gt; references<br>
&gt;&gt; &gt; are fragile and can easily go stale when refactoring content.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I believe that we had the right idea when we went with the<br>
&gt;&gt; &gt; &lt;composite:facet&gt;/&lt;composite:insertFacet&gt; design.  This solution<br>
&gt;&gt; &gt; provides a<br>
&gt;&gt; &gt; simple, clear way for the user to express their intentions without<br>
&gt;&gt; &gt; suffering<br>
&gt;&gt; &gt; any of the above drawbacks.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; While I admit that the &lt;composite:actionSource&gt; case is not identical to<br>
&gt;&gt; &gt; &lt;composite:facet&gt;, the similarities seem strong.  If JSF 2.0 had<br>
&gt;&gt; &gt; included a<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &lt;composite:actionSource&gt;/&lt;composite:insert/implements/exposes/whateverActionSource&gt;<br>
&gt;&gt; &gt; pair (like &lt;composite:facet&gt;/&lt;composite:insertFacet&gt;) and had not<br>
&gt;&gt; &gt; included<br>
&gt;&gt; &gt; any notion of &quot;targets&quot;, I don&#39;t think that our users would have had<br>
&gt;&gt; &gt; much<br>
&gt;&gt; &gt; difficulty coping with this.  If we had exclusively gone with a<br>
&gt;&gt; &gt; &quot;implementation references interface&quot; approach (no references from<br>
&gt;&gt; &gt; interface<br>
&gt;&gt; &gt; to implementation), I think our users would have been altogether better<br>
&gt;&gt; &gt; off.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Of course, we cannot go back and time and undo what we&#39;ve started in JSF<br>
&gt;&gt; &gt; 2.0.  It is less important for us to question whether our original<br>
&gt;&gt; &gt; design<br>
&gt;&gt; &gt; choices were correct than to decide whether it makes sense to introduce<br>
&gt;&gt; &gt; new<br>
&gt;&gt; &gt; APIs now.  In my mind, this looks like the proposals that we have been<br>
&gt;&gt; &gt; discussion are a step in the right direction.  I like the consistency of<br>
&gt;&gt; &gt; this new approach; it allows users to interact with all of our interface<br>
&gt;&gt; &gt; metadata in a similar manner.  I am certainly open to discussion on<br>
&gt;&gt; &gt; this,<br>
&gt;&gt; &gt; and I completely agree that we need to be careful when pondering new<br>
&gt;&gt; &gt; APIs.<br>
&gt;&gt; &gt; You are right that it is critical that we avoid unintentionally making<br>
&gt;&gt; &gt; life<br>
&gt;&gt; &gt; more difficult for our users, not just in this case, but for all of our<br>
&gt;&gt; &gt; API<br>
&gt;&gt; &gt; decisions.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Andy<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Jakob Korherr<br>
&gt;&gt;<br>
&gt;&gt; blog: <a href="http://www.jakobk.com" target="_blank">http://www.jakobk.com</a><br>
&gt;&gt; twitter: <a href="http://twitter.com/jakobkorherr" target="_blank">http://twitter.com/jakobkorherr</a><br>
&gt;&gt; work: <a href="http://www.irian.at" target="_blank">http://www.irian.at</a><br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div>--<br>
<div><div></div><div class="h5">Jakob Korherr<br>
<br>
blog: <a href="http://www.jakobk.com" target="_blank">http://www.jakobk.com</a><br>
twitter: <a href="http://twitter.com/jakobkorherr" target="_blank">http://twitter.com/jakobkorherr</a><br>
work: <a href="http://www.irian.at" target="_blank">http://www.irian.at</a><br>
</div></div></blockquote></div><br>