<?xml version="1.0"?>
<!-- RSS generated by Radio UserLand v8.2.1 on Wed, 24 May 2006 17:57:42 GMT -->
<rss version="2.0">
	<channel>
		<title>Sung Im&apos;s Radio Weblog</title>
		<link>http://radio.weblogs.com/0123729/</link>
		<description></description>
		<copyright>Copyright 2006 Sung Im</copyright>
		<lastBuildDate>Wed, 24 May 2006 17:57:42 GMT</lastBuildDate>
		<docs>http://backend.userland.com/rss</docs>
		<generator>Radio UserLand v8.2.1</generator>
		<managingEditor>sung.im@oracle.com</managingEditor>
		<webMaster>sung.im@oracle.com</webMaster>
		<category domain="http://www.weblogs.com/rssUpdates/changes.xml">rssUpdates</category> 
		<cloud domain="radio.xmlstoragesystem.com" port="80" path="/RPC2" registerProcedure="xmlStorageSystem.rssPleaseNotify" protocol="xml-rpc"/>
		<ttl>60</ttl>
		<item>
			<description>&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;STRONG&gt;&lt;U&gt;How Does View Link/Entity Association Consistency Exactly Work?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;I get asked the above question a lot.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;So, I&apos;m going to try to give as much detailed info as possible.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Steve&apos;s following blog page has a lot of functional description of view link consistency&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;a href=&quot;http://radio.weblogs.com/0118231/2003/12/02.html&quot;&gt;http://radio.weblogs.com/0118231/2003/12/02.html&lt;/a&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Please take a look.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;I will focus my discussions on technical details.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;STRONG&gt;&lt;U&gt;What Are View Link/Entity Association Consistency for?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Let me first discuss view link consistency and leave entity association consistency for later.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;This flag controls whether unposted rows show up in the query collections of this VO of not.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;For example, suppose we have 2 VOs: VO1 and VO2 both based on the same entity.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;If you create a new row through VO1, a question comes up as to whether VO2 will see this new row.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;If the view link consistency flag is on for VO2, it can see the new row (more discussion on this below).&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;If the view link consistency flag is off for VO2, VO2 will not see any unposted new row.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;STRONG&gt;&lt;U&gt;How View Link Consistency Works&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Suppose the user creates a new row through VO1.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;The act of creating a new view row means that a new entity row is created for the corresponding entity.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;This row is by default blank (if the user overrode create() to initialize some attr, it won&amp;#161;&amp;#175;t be blank).&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;And, a blank row is not yet added to the entity cache.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Only when some (I say &apos;some&apos; because the EO&apos;s PK may be multi-part) of the PK attributes are set (most likely through the viewRow.setAttribute(..)), will the entity row be added to the entity cache.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;And, in response to the set attribute call, the&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;oracle.jbo.server.EntityCache&apos;s following method is invoked:&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;protected void deliverEntityEvent(EntityEvent event)&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;This will then turn around looking for ViewObject&apos;s that are listening in on the EO events.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Going back to our VO1 and VO2 example, as they are based on this EO, both of them will be listeners to the entity cache, regardless of its view link consistent flag value.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;For each entity listener, the following method is invoked (that of the oracle.jbo.server.EntityListener interface, which ViewObjectImpl implements):&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public void sourceChanged(EntityEvent event);&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;So, VO1&apos;s sourceChanged() is invoked first, followed by VO2.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Let&apos;s assume now that VO1&apos;s view link consistency is false, but VO2&apos;s consistency is true.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Then, VO1&apos;s sourceChanged() will not do anything with this new row.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;VO2, on the other hand, will walk through all its query collections (oracle.jbo.server.QueryCollection) and process the new row for each one of these QCs.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Each QC in a VO has a data structure called the row filter.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Let me back up a bit and explain this.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;A VO may have a where-clause with a bind parameter, e.g.,&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;DEPTNO = :myDeptno&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;for EmpView (myDeptno is the bind variable).&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Typically, setWhereClauseParam() or setNamedWhereClauseParam() is invoked to specify the bind variable value.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Or, if the where-clause was one generated from a view link, the where-clause parameters are automatically supplied by BC4J.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Suppose the user or (in the case of master-detail) the system, creates a row set from this VO for myDeptno = 10.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;This creates a row set and the underlying QC, where the QC&apos;s row filter is {10} (an Object[] with 10 as its only element).&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;If you or the system creates another row set for myDeptno = 20, or if you navigate the master VO to the row whose Deptno is 20, this creates another QC whose row filter is {20}.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;So, the VO now has 2 QCs with row filters {10} and {20}, respectively.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Going back to the view link consistency discussion, while processing the new row for the QC, the VO checks to see if the new row&apos;s row filter value matches that of the QC&apos;s.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;If so, then we proceed further.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Now, a check is made to see if the QC in its collection already has a view row, which is based on this entity row (a data structure named ViewRowCache makes this look-up fast).&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;If the QC already has one, we just return and not bother with the new entity row.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;If the QC does not have any view row, which is based on the new entity row, a new view row is created on the QC and the new view rows points to this new entity row.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;The VO&apos;s RowQualifier/RowMatch is now applied to the new view row to see if the row qualifies to be in this QC.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;If true, the row is finally inserted into the QC and the QC is now able to see the new entity row.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;STRONG&gt;&lt;U&gt;Why Are They Called Link/Assoc Consistency?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;An observant BC4J user asked me why we call this flag view link/entity association when it seems deal with the question of unposted rows.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Part of the reason is historical.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;This feature was originally requested for entity associations where the user wanted to see news rows through the association accessor before they are posted to database.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Another reason is that this feature simply works more logically for master-detail situation.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;More specifically, it works better for the detail VO.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Let&apos;s go back to the above discussion on row filter.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;I mentioned earlier that &quot;The VO checks to see if the new row&apos;s row filter value matches that of the QC&apos;s&quot;.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;For master-detail, we&apos;re able to build the row filter value from the new row because the view link/entity association definition let&apos;s us know which attribute is involved in the QC&apos;s row filter.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;For example, if the view link links Dept&apos;s Deptno to Emp&apos;s Deptno, when we deal with a new Emp row, we take the Emp&apos;s Deptno value to build the row filter value to compare to that of the QC.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;But, if no view link is involved, BC4J doesn&apos;t have that information; in the above example, suppose the where-clause was specified through setWhereClause() and not by a view link.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;When sourceChanged() is invoked, BC4J does not know that the where-clause parameter has any relationship to any of the attributes of Emp.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;So, when view link consistency is being applied to a non-detail VO, we do not perform the row filter check (because the bottom line is that we don&apos;t know how to build the row filter from the row).&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;The row qualifier (oracle.jbo.server.RowQualifier) or the row match (oracle.jbo.RowMatch) check is still performed.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;STRONG&gt;&lt;U&gt;What about Entity Association Consistency?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Keep in mind the following important facts re: entity assocation.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;When you call an entity association accessor, an oracle.jbo.server.EntityRowSetImpl is returned (assuming that the accessor is for the many side of the association).&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;EntityRowSetImpl is a facade in front of ViewRowSetImpl and its main job is to peel off the entity row from the view row.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Behind this EntityRowSetImpl is a ViewObjectImpl which is created through the following ApplicationModule API:&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public ViewObject createViewObjectFromQueryClauses(String voName,&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;String eoName,&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;String selectClause,&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;String fromClause,&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;String whereClause,&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;String orderByClause);&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Hence, all of the above discussions apply to entity association in that EntityRowSetImpl is really a ViewRowSetImpl with the added functionality of peeling the view row off.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;STRONG&gt;&lt;U&gt;Why Are the APIs Called set/isAssociationConsistent Even for View Links?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Someone asked me why the APIs are named AssocationConsistent even for view links.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;As I mentioned early, these APIs first went in for entity associations.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;So, we originally named them set/isAssociationConsistent.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Later, users asked the same functionality to be supported for view links.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;These APIs were elevated to oracle.jbo.RowSet and the names stuck.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;STRONG&gt;&lt;U&gt;What Are the Rules for Computing This Flag?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Steve&apos;s page (link included at the beginning) has detailed description of various ways through which this flag can be specified.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Take a look.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;STRONG&gt;&lt;U&gt;Why Do These New View Rows Sometimes Appear at Different Locations?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;The above description re: how new view rows appear in a QC is only half the story.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;It explains how new view rows appear in an existing QC.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;The other half is what happens if a QC is being formed new (how the new QC picks up unposted new rows).&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;But, before I discussed that, let me say that for an existing QC, the new view rows will appear at the end of the current collection.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;So, suppose the database table contains 100 rows that would go into this QC.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;The QC has fetched 20 rows.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;If the user causes a new row to be inserted through view link consistency, the new row will appear in the 21-st slot.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;If the user then continues to fetch, the 21-st row from the table will go into the 22-nd slot and so on.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;Back to the new QC case (which is the same case as if executeQuery() is invoked on the view object or the row set)...&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;As the QC is created and executeQuery&apos;ed, it will check the view link consistency flag.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;If the flag is true, the appropriate entity cache will be examined to see if it has unposted new rows.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;Depending on whether the QC is for a detail VO or not, the row filter check is made to pre-filter the new entity rows.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;New view rows are created from these and put into a &quot;temporary holding station.&quot;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;As the user retrieves rows from this QC, new rows are moved from this temporary holding station to the real collection and returned to the caller.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;So, these new rows will appear at the beginning of the collection.&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;STRONG&gt;&lt;U&gt;Do View Link Consistency Make Sense for EO-less VOs?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;No.&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;View link consistency is not really supported for VOs that are not EO based.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0123729/2006/05/24.html#a9</guid>
			<pubDate>Wed, 24 May 2006 17:57:42 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=123729&amp;amp;p=9&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0123729%2F2006%2F05%2F24.html%23a9</comments>
			</item>
		<item>
			<description>&lt;!--StartFragment --&gt;
&lt;DIV class=moz-text-flowed lang=x-western style=&quot;FONT-SIZE: 13px; FONT-FAMILY: -moz-fixed&quot;&gt;BC4J 10.1.3 supports a new feature called &quot;query mode.&quot;&amp;nbsp; Using this, the user can decide how the VO draws its data.&lt;/DIV&gt;
&lt;DIV class=moz-text-flowed lang=x-western style=&quot;FONT-SIZE: 13px; FONT-FAMILY: -moz-fixed&quot;&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=moz-text-flowed lang=x-western style=&quot;FONT-SIZE: 13px; FONT-FAMILY: -moz-fixed&quot;&gt;The following constants are defined in oracle.jbo.ViewObject:&lt;/DIV&gt;
&lt;DIV class=moz-text-flowed lang=x-western style=&quot;FONT-SIZE: 13px; FONT-FAMILY: -moz-fixed&quot;&gt;&lt;BR&gt;QUERY_MODE_SCAN_VIEW_ROWS: To refine further View rows currently in the QC (using the RowQualifier--for tier transparency, oracle.jbo.RowMatch is created and RowQualifier subclasses this).&amp;nbsp; For example, your RS may have Emps whose SAL is &amp;gt; 3000.&amp;nbsp; From this, you can further qualify (i.e., remove from the QC unqualifying rows) rows that have Commission &amp;gt; 10. &lt;BR&gt;&lt;BR&gt;QUERY_MODE_SCAN_ENTITY_ROWS: To draw rows from Entity Cache.&amp;nbsp; This is good for performing in-memory filtering of rows that are already in Entity Cache.&amp;nbsp; In addition, this enables the user to produce View rows on Entity rows that were created and not yet posted.&amp;nbsp; Again, you use RowMatch to qualify rows. &lt;BR&gt;&lt;BR&gt;QUERY_MODE_SCAN_DATABASE_TABLES: To draw rows frmo query result as before. &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;The default is QUERY_MODE_SCAN_DATABASE_TABLES.&amp;nbsp; You can OR these flags together.&amp;nbsp; If OR them, BC4J handles skipping of duplicate rows. &lt;BR&gt;&lt;BR&gt;Here are relevant JavaDocs:&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * These &amp;lt;code&amp;gt;QUERY_MODE_SCAN_...&amp;lt;/code&amp;gt; constants are used to specify &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * the query mode for the View Object.&amp;nbsp; Query mode controls how qualifying &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * formulated for each Row Set in the View Object.&amp;nbsp; These constants can be &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * OR&apos;ed together.&amp;nbsp; If more than one query mode is specified in this &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * manner, rows for the collection will be produced from more than &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * one source. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * If you call {@link #setQueryMode(int)} or {@link #addQueryMode(int)} to &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * change the query mode, the new query mode does not go into effect &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * until you call {@link RowSet#executeQuery()} on the Row Set. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Rows can come from three different sources.&amp;nbsp; If the Row Set currently &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * has a collection of rows (View rows), &amp;lt;code&amp;gt;QUERY_MODE_SCAN_VIEW_ROWS&amp;lt;/code&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * will indicate that the row match (see {@link #setRowMatch(RowMatch)}) should &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * be applied to further filter View rows.&amp;nbsp; Unqualifying rows are removed &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * from the collection. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * If the query mode includes &amp;lt;code&amp;gt;QUERY_MODE_SCAN_ENTITY_ROWS&amp;lt;/code&amp;gt;, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * the Entity cache is scanned to see if qualifying rows can be produced. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * If so, these rows are added to the collection. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * If the query mode includes &amp;lt;code&amp;gt;QUERY_MODE_SCAN_DATABASE_TABLES&amp;lt;/code&amp;gt;, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * a database query is issued to produce rows from the query result. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * The default query mode is &amp;lt;code&amp;gt;QUERY_MODE_SCAN_DATABASE_TABLES&amp;lt;/code&amp;gt;. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * If the query mode specifies multiple sources, then care if taken &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * to prevent duplicate rows from appearing. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static final int QUERY_MODE_SCAN_VIEW_ROWS = 0x0001; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Specifies that rows should be produced from Entity cache. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * See above for details. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static final int QUERY_MODE_SCAN_ENTITY_ROWS = 0x0002; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Specifies that rows should be produced from database query result. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * See above for details. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static final int QUERY_MODE_SCAN_DATABASE_TABLES = 0x0004; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Sets an in-memory filter (&amp;lt;code&amp;gt;RowMatch&amp;lt;/code&amp;gt;) for the View Object. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * While the WHERE clause is used when a database query is issued, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * the row match is used for qualifying rows in memory. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Calling this method does not cause filtering of rows by the &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * row match.&amp;nbsp; To filter, {@link RowSet#executeQuery()} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * must be called. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param rowMatch the new row match. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void setRowMatch(RowMatch rowMatch); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Gets the in-memory filter (&amp;lt;code&amp;gt;RowMatch&amp;lt;/code&amp;gt;) for the View Object. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * While the WHERE clause is used when a database query is issued, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * the row match is used for qualifying rows in memory. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return the current row match. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RowMatch getRowMatch(); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Sets query mode for the View Object. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Query mode controls how qualifying rows are formulated for each &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Row Set in the View Object. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * The &amp;lt;code&amp;gt;queryMode&amp;lt;/code&amp;gt; parameter may be an OR&apos;ed flag of &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;code&amp;gt;QUERY_MODE_SCAN_...&amp;lt;/code&amp;gt; constants.&amp;nbsp; See these constants &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * for further details. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Calling this method does not cause automatically cause the new &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * query mode to go into effect.&amp;nbsp; Call &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * {@link RowSet#executeQuery()} to apply the new query &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * mode. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * The default query mode is &amp;lt;code&amp;gt;QUERY_MODE_SCAN_DATABASE_TABLES&amp;lt;/code&amp;gt;. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param queryMode the new query mode. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void setQueryMode(int queryMode); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Adds query mode for the View Object. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Query mode controls how qualifying rows are formulated for each &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Row Set in the View Object. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * The &amp;lt;code&amp;gt;queryMode&amp;lt;/code&amp;gt; parameter may be an OR&apos;ed flag of &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;code&amp;gt;QUERY_MODE_SCAN_...&amp;lt;/code&amp;gt; constants.&amp;nbsp; This method &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * OR&apos;es in the incoming &amp;lt;code&amp;gt;queryMode&amp;lt;/code&amp;gt; to the View Object&apos;s &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * current query mode.&amp;nbsp; See these constants for further details. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Calling this method does not cause automatically cause the new &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * query mode to go into effect.&amp;nbsp; Call &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * {@link RowSet#executeQuery()} to apply the new query &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * mode. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param queryMode the new query mode to be added (OR&apos;ed). &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void addQueryMode(int queryMode); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Gets the current query mode of this View Object. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Query mode controls how qualifying rows are formulated for each &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Row Set in the View Object. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * The returning value may be an OR&apos;ed flag of &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;code&amp;gt;QUERY_MODE_SCAN_...&amp;lt;/code&amp;gt; constants.&amp;nbsp; See these constants &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * for further details. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &amp;lt;p&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * The default query mode is &amp;lt;code&amp;gt;QUERY_MODE_SCAN_DATABASE_TABLES&amp;lt;/code&amp;gt;. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return query mode. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int getQueryMode(); &lt;BR&gt;&lt;/DIV&gt;</description>
			<guid>http://radio.weblogs.com/0123729/2006/05/20.html#a8</guid>
			<pubDate>Sat, 20 May 2006 20:24:10 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=123729&amp;amp;p=8&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0123729%2F2006%2F05%2F20.html%23a8</comments>
			</item>
		<item>
			<description>&lt;P&gt;BC4J 10.1.3 supports &apos;named where-clause params&apos; and &apos;variables&apos; on various BC4J objects.&amp;nbsp; The memo below explains tech details:&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;This memo will describe the named where-clause parameter feature. &lt;/P&gt;
&lt;P&gt;Underlying the named where-clause parameter is a general feature of Variable support (aka, name space).&amp;nbsp; Each app component object (specifically, AM, VO, RS and eventually binding container) is a variable manager (name space). &lt;/P&gt;
&lt;P&gt;Each def object (AM def, VO def, EO def) is a variable manager. &lt;/P&gt;
&lt;P&gt;A variable manager may be nested in the sense of scope nesting. (Interface name is oracle.jbo.VariableManager).&amp;nbsp; Name lookup goes from the current var mgr and searches outward.&amp;nbsp; Hence, a variable mgr has the concept of parent var mgr. &lt;/P&gt;
&lt;P&gt;For a RowSet, the parent var mgr is the VO&apos;s var mgr. &lt;/P&gt;
&lt;P&gt;For a VO, its parents are the AM instance&apos;s var mgr and view def&apos;s var mgr. &lt;/P&gt;
&lt;P&gt;For an AM, its parents are the parent AM&apos;s (in terms of AM nesting) var mgr and the AM def&apos;s var mgr. &lt;/P&gt;
&lt;P&gt;For a VO def its parents are the entity defs of the base EOs. &lt;/P&gt;
&lt;P&gt;~~~~~ &lt;/P&gt;
&lt;P&gt;A var mgr contains variables (interface Variable). &lt;/P&gt;
&lt;P&gt;A variable is typed, has a name, and has a default value.&amp;nbsp; I also copied AttributeHint support into it so that people can to attr-hinting with these vars (just like Shailesh&apos;s JUCtrlParameterDef). &lt;/P&gt;
&lt;P&gt;A var mgr is further extended into VariableValueManager, which knows how to store and manage current values (above and beyond the default value). &lt;/P&gt;
&lt;P&gt;Strictly speaking, an app component object will have a VariableValueManager.&amp;nbsp; AM def, VO def, EO def has VariableManager. &lt;/P&gt;
&lt;P&gt;A variable can be a named where-clause parameter or a method parameter (or other things to be included as requirements arise).&amp;nbsp; A &quot;variable kind&quot; indicates what kind of variable it is. &lt;/P&gt;
&lt;P&gt;A where-clause parameter will have an additional list of integer ids. These ids will be used to bind the variable values into where-clause when the query is executed (will translate into setWhereClauseParam(int, Object) calls). &lt;/P&gt;
&lt;P&gt;~~~~~ &lt;/P&gt;
&lt;P&gt;For named where-clause parameter implementation, I added the following APIs to oracle.jbo.RowSet. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; void defineNamedWhereClauseParam(String name, Object defaultValue, int[] indices); &lt;BR&gt;&amp;nbsp;&amp;nbsp; void removeNamedWhereClauseParam(String name); &lt;BR&gt;&amp;nbsp;&amp;nbsp; void setNamedWhereClauseParam(String name, Object value); &lt;BR&gt;&amp;nbsp;&amp;nbsp; void skipNamedWhereClauseParam(String name); &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Also, use the following link for further info&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.oracle.com/technology/oramag/oracle/06-mar/o26frame.html?msgid=4658272&quot;&gt;&lt;a href=&quot;http://www.oracle.com/technology/oramag/oracle/06-mar/o26frame.html?msgid=4658272&quot;&gt;http://www.oracle.com/technology/oramag/oracle/06-mar/o26frame.html?msgid=4658272&lt;/a&gt;&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0123729/2006/05/20.html#a7</guid>
			<pubDate>Sat, 20 May 2006 18:54:34 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=123729&amp;amp;p=7&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0123729%2F2006%2F05%2F20.html%23a7</comments>
			</item>
		<item>
			<description>&lt;P&gt;To allow customization of data consistency check (between the data&amp;nbsp;in the EO cache and the database), the following overriddable methods are provide:&lt;/P&gt;
&lt;P&gt;oracle.jbo.server.EntityImpl:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; protected boolean checkConsistency (SparseArray target, boolean lock)&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;The default implementation of this method calls EntityImpl.compare() which is also overriddable:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; protected boolean compare(SparseArray target)&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;The default implementation of compare() will check to see if this entity has a change indicator attr.&amp;nbsp; If so, it uses that.&amp;nbsp; If not, is compares all attr values (non-LOB attrs).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0123729/2006/05/20.html#a6</guid>
			<pubDate>Sat, 20 May 2006 18:41:57 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=123729&amp;amp;p=6&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0123729%2F2006%2F05%2F20.html%23a6</comments>
			</item>
		<item>
			<description>&lt;P&gt;Background:&amp;nbsp; RowInconsistentException is an exception thrown under the following scenario.&amp;nbsp; The user reads a row in with value aaa for an attribute.&amp;nbsp; He performs some operation that is about to lock the row.&amp;nbsp; A check is made to see if someone else has modified the row since this user read it.&amp;nbsp; If so, this exception is thrown.&lt;/P&gt;
&lt;P&gt;Question:&amp;nbsp; When&amp;nbsp;RowInconsistentException is thrown, why does BC4J compare values of attributes that are not modified by this user?&amp;nbsp; Isn&apos;t that a bit excessive?&amp;nbsp;&amp;nbsp;In other words, shouldn&apos;t BC4J only compare &apos;modified&apos; attribute&apos;s original value with the db value to raise RowInconsistentException? &lt;BR&gt;&lt;!--StartFragment --&gt;&lt;/P&gt;
&lt;P&gt;Answer: RowInconsistentException is usually thrown when the row is about to be locked.&amp;nbsp; Under pessimistic, RIE will be thrown during lock request ==&amp;gt; No attr has been modified. &lt;BR&gt;&lt;BR&gt;Even under optimistic, since data updates were performed based on the old data, if some data were changed by another transaction, we want the user notified that their updates may have been performed based on stale data. &lt;BR&gt;&lt;BR&gt;For example, suppose in a banking app (under opt), the user sees remaining balance of $300 in his app.&amp;nbsp; The user makes a request to withdraw $250 from it.&amp;nbsp; Before this change is posted, another user comes into the same row and withdraws $200 from it.&amp;nbsp; If we compare only the modified attr, the req to w/d $250 will go through. &lt;BR&gt;&lt;BR&gt;This is why we want to compare all attrs regardless of whether they were modified or not. &lt;BR&gt;&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0123729/2006/05/20.html#a5</guid>
			<pubDate>Sat, 20 May 2006 18:37:12 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=123729&amp;amp;p=5&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0123729%2F2006%2F05%2F20.html%23a5</comments>
			</item>
		<item>
			<description>&lt;P&gt;&lt;FONT face=Geneva,Arial,Sans-Serif&gt;After long silence on this Weblog, I decided to post some useful articles and Q&amp;amp;A&apos;s.&amp;nbsp; Of course, when it comes to BC4J resources, you must first look at Steve&apos;s (Muench) site:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://radio.weblogs.com/0118231/&quot;&gt;&lt;FONT face=Geneva,Arial,Sans-Serif&gt;&lt;a href=&quot;http://radio.weblogs.com/0118231/&quot;&gt;http://radio.weblogs.com/0118231/&lt;/a&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Geneva,Arial,Sans-Serif&gt;Stay tuned for more article.s&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0123729/2006/05/20.html#a4</guid>
			<pubDate>Sat, 20 May 2006 18:33:00 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=123729&amp;amp;p=4&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0123729%2F2006%2F05%2F20.html%23a4</comments>
			</item>
		<item>
			<description>&lt;P&gt;Link to old articles:&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://radio.weblogs.com/0123729/2004/05/25.html&quot;&gt;&lt;a href=&quot;http://radio.weblogs.com/0123729/2004/05/25.html&quot;&gt;http://radio.weblogs.com/0123729/2004/05/25.html&lt;/a&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0123729/2006/05/01.html#a3</guid>
			<pubDate>Mon, 01 May 2006 21:08:09 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=123729&amp;amp;p=3&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0123729%2F2006%2F05%2F01.html%23a3</comments>
			</item>
		</channel>
	</rss>
