<?xml version="1.0"?>
<!-- RSS generated by Radio UserLand v8.0.8 on Tue, 09 Mar 2004 21:43:16 GMT -->
<rss version="2.0">
	<channel>
		<title>Tom Pierce: Java</title>
		<link>http://radio.weblogs.com/0116883/categories/java/</link>
		<description>Java related items, personal opinions, coding, etc.</description>
		<language>en</language>
		<copyright>Copyright 2004 Tom Pierce</copyright>
		<lastBuildDate>Tue, 09 Mar 2004 21:43:16 GMT</lastBuildDate>
		<docs>http://backend.userland.com/rss</docs>
		<generator>Radio UserLand v8.0.8</generator>
		<managingEditor>tpierce@navigatorsystems.com</managingEditor>
		<webMaster>tpierce@navigatorsystems.com</webMaster>
		<category domain="http://www.weblogs.com/rssUpdates/changes.xml">rssUpdates</category> 
		<skipHours>
			<hour>0</hour>
			<hour>1</hour>
			<hour>2</hour>
			<hour>3</hour>
			<hour>4</hour>
			<hour>23</hour>
			<hour>5</hour>
			<hour>18</hour>
			</skipHours>
		<cloud domain="radio.xmlstoragesystem.com" port="80" path="/RPC2" registerProcedure="xmlStorageSystem.rssPleaseNotify" protocol="xml-rpc"/>
		<ttl>60</ttl>
		<item>
			<title>Hibernate circular cascading</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/03/09.html#a658</link>
			<description>&lt;P&gt;I&apos;m going to start by saying that I may have missed something somewhere in the Hibernate documentation, FAQs, or forums.&amp;nbsp; But, I don&apos;t remember seeing direct references to this.&lt;/P&gt;
&lt;P&gt;It seems that is a bad idea to make both ends of an inverse mapping cascade.&amp;nbsp; In this situation, Hibernate will try to cascade multiple times when saving new objects that cause a cascade.&amp;nbsp; The only way I found to prevent it was to remove the cascade attribute on the inverse end of the mapping.&lt;/P&gt;
&lt;P&gt;OK, a little less talk and a little more coding please.&amp;nbsp; I had something like this and it was bad:&lt;/P&gt;&lt;PRE&gt;  &amp;lt;!-- Application class --&amp;gt;
  &amp;lt;class name=&quot;net.trin.colorreports.reportcomments.dao.valueobjects.Application&quot;&amp;gt;
    &amp;lt;id name=&quot;id&quot; column=&quot;application_id&quot; type=&quot;integer&quot;&amp;gt;
      &amp;lt;generator class=&quot;identity&quot;&amp;gt;
      &amp;lt;/generator&amp;gt;
    &amp;lt;/id&amp;gt;
    &amp;lt;property name=&quot;name&quot; type=&quot;string&quot; column=&quot;application_name&quot;&amp;gt;
    &amp;lt;/property&amp;gt;
    
    &amp;lt;set name=&quot;reports&quot; inverse=&quot;true&quot; lazy=&quot;false&quot; &lt;STRONG&gt;cascade=&quot;all&quot;&lt;/STRONG&gt;&amp;gt;
     &amp;lt;key column=&quot;application_id&quot;/&amp;gt;
     &amp;lt;one-to-many class=&quot;net.trin.colorreports.reportcomments.dao.valueobjects.Report&quot; /&amp;gt;
    &amp;lt;/set&amp;gt;
  &amp;lt;/class&amp;gt;
  
  &amp;lt;!-- Report class --&amp;gt;
  &amp;lt;class name=&quot;net.trin.colorreports.reportcomments.dao.valueobjects.Report&quot;&amp;gt;
   &amp;lt;id name=&quot;id&quot; column=&quot;report_id&quot; type=&quot;integer&quot;&amp;gt;
    &amp;lt;generator class=&quot;identity&quot;/&amp;gt;
   &amp;lt;/id&amp;gt; 
   
   &amp;lt;property name=&quot;name&quot; type=&quot;string&quot; column=&quot;name&quot;/&amp;gt;
   
   &amp;lt;many-to-one name=&quot;application&quot; column=&quot;application_id&quot; class=&quot;net.trin.colorreports.reportcomments.dao.valueobjects.Application&quot; cascade=&quot;save-update&quot; /&amp;gt;
   
   &amp;lt;set name=&quot;comments&quot; inverse=&quot;true&quot; lazy=&quot;false&quot; &lt;STRONG&gt;cascade=&quot;all&quot;&lt;/STRONG&gt;&amp;gt;
    &amp;lt;key column=&quot;comment_id&quot;/&amp;gt;
    &amp;lt;one-to-many class=&quot;net.trin.colorreports.reportcomments.dao.valueobjects.SummaryComment&quot; /&amp;gt;
   &amp;lt;/set&amp;gt;
  &amp;lt;/class&amp;gt;
&lt;/PRE&gt;
&lt;P&gt;Notice the cascade attributes on the &amp;lt;set&amp;gt; tags.&amp;nbsp; This created the loop because of the cascade on the &amp;lt;many-to-one&amp;gt; tag I think.&amp;nbsp; Once I removed the cascade attribute from the &amp;lt;set&amp;gt; tags, everything started working beautifully.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/03/09.html#a658</guid>
			<pubDate>Tue, 09 Mar 2004 21:43:15 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=658&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F03%2F09.html%23a658</comments>
			</item>
		<item>
			<title>Naming a directory TAGS in CVS</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/03/09.html#a657</link>
			<description>&lt;P&gt;I hope that someone smarter than I am will read this and correct me.&amp;nbsp; It seems that if I name a directory&amp;nbsp;&quot;tags&quot; somewhere in my CVS project, it will not be handled correctly by IBM Websphere Studio 5.1.1 (Eclipse 2.1.2).&amp;nbsp; When I try to check that directory (a Java package directory) out of CVS, WSAD says &quot;error fetching file revisions&quot;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I am using CVS for NT, but I AM NOT using a repository prefix.&amp;nbsp; So, I don&apos;t have &lt;A href=&quot;http://dev.eclipse.org/viewcvs/index.cgi/platform-vcm-home/docs/online/cvs_features2.0/cvs-faq.html?rev=1.17#server_10&quot;&gt;this&lt;/A&gt; known error situation.&amp;nbsp; I&apos;m not sure if&amp;nbsp;my issue&amp;nbsp;is a WSAD/Eclipse issue, a CVS for NT issue, or just a CVS issue.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;We are working around it by renaming our tags package to taglib.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/03/09.html#a657</guid>
			<pubDate>Tue, 09 Mar 2004 21:23:36 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=657&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F03%2F09.html%23a657</comments>
			</item>
		<item>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/02/27.html#a653</link>
			<description>&lt;P&gt;&lt;A href=&quot;http://www.artima.com/weblogs/viewpost.jsp?thread=36312&quot;&gt;Oh No! DTO!&lt;/A&gt;. Should DTOs have public variables? Or should they have private variables with getters and setters? [&lt;A href=&quot;http://www.artima.com/weblogs/&quot;&gt;Artima Weblogs&lt;/A&gt;]&lt;/P&gt;
&lt;P&gt;There&apos;s an interesting discussion going on in the comments of the blog.&amp;nbsp; Worth reading - I&apos;m sure we&apos;ve all pondered this question before.&amp;nbsp; Especially when you think of languages like Python where it&apos;s downright hard (well, at least contrived) to make member variables private.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/02/27.html#a653</guid>
			<pubDate>Fri, 27 Feb 2004 15:32:12 GMT</pubDate>
			<source url="http://www.artima.com/weblogs/feeds/weblogs.rss">Artima Weblogs</source>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=653&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F02%2F27.html%23a653</comments>
			</item>
		<item>
			<title>Voruta: An Interesting Approach to O/R Mapping</title>
			<link>http://voruta.sourceforge.net/</link>
			<description>Voruta is an OSS framework for automatically generating data access code.&amp;nbsp; The framework allows you to embed SQL calls in the javadoc associated with DAO methods.&amp;nbsp; The code for the DAO calls is generated dynamically at run time.&amp;nbsp; This is an interesting approach, however it doesn&apos;t allow you to externalize the mappings and prevent recompiles when data access queries or methods change.</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/02/10.html#a648</guid>
			<pubDate>Tue, 10 Feb 2004 17:17:54 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=648&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F02%2F10.html%23a648</comments>
			</item>
		<item>
			<title>Don&apos;t forget about the Struts HTML XHTML tag</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/26.html#a643</link>
			<description>If you are developing a Struts web&amp;nbsp;application and you want to develop XHTML compliant pages, don&apos;t forget to add &amp;lt;html:xhtml/&amp;gt; to you pages.&amp;nbsp; If you don&apos;t, the other HTML tags aren&apos;t guarenteed to generate XHTML compliant output.&amp;nbsp; Further, you must put this tag on every JSP fragment or Tile.&amp;nbsp; The fragments don&apos;t inherit the property from their container.</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/26.html#a643</guid>
			<pubDate>Mon, 26 Jan 2004 19:53:29 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=643&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F26.html%23a643</comments>
			</item>
		<item>
			<title>Find all the classes imported in your source files</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/20.html#a642</link>
			<description>Do you do your Java development on Unix or on Windows and have
Cygwin?&amp;nbsp; Do you explicitly import every class in your source
files?&amp;nbsp; If you answered yes to both questions, then you can use
this handy command to find all the classes imported by your source
files:&lt;br&gt;
&lt;font size=&quot;2&quot;&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;find src/. -name &quot;*.java&quot; -type f -exec grep -H -n import {} ; |sed &quot;s/^.*import \(.*\?\);/\1/g&quot; | sort -u&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;/font&gt;&lt;br&gt;
Be sure to change directory (first parameter to the find command).&lt;br&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/20.html#a642</guid>
			<pubDate>Tue, 20 Jan 2004 22:12:17 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=642&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F20.html%23a642</comments>
			</item>
		<item>
			<title>Don&apos;t get fancy with Struts &lt;nested&gt; tags!</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/19.html#a640</link>
			<description>I just spent too long debugging a little problem I was having with the Struts nested tags.&amp;nbsp; With the nested tags, you can define a &quot;root&quot; bean and then access properties off the root with special nested versions of the other Struts tags.&amp;nbsp; This allows you to access properties of beans with syntax like:&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;&amp;lt;nested:root name=&quot;customer&quot;&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;Name = &amp;lt;nested:write property=&quot;name&quot; /&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;&amp;lt;/nested:root&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;Which is really cool, especially with some of the more complex tags because you don&apos;t have to refer to the parent bean.&amp;nbsp; In theory, this allows you to also nest references to beans contained within the bean with something like:&lt;BR&gt;&lt;BR&gt;&lt;FONT style=&quot;FONT-FAMILY: courier&quot; size=2&gt;&amp;lt;nested:root name=&quot;customer&quot;&amp;gt;&lt;BR&gt;Name = &amp;lt;nested:write property=&quot;name&quot; /&amp;gt;&lt;BR&gt;&lt;BR&gt;&amp;lt;nested:root name=&quot;address&quot;&amp;gt;&lt;BR&gt;Address Line 1 = &amp;lt;nested:write property=&quot;line1&quot; /&amp;gt;&lt;BR&gt;Address Line 2 = &amp;lt;nested:write property=&quot;line2&quot; /&amp;gt;&lt;BR&gt;City = &amp;lt;nested:write property=&quot;city&quot; /&amp;gt;&lt;BR&gt;&amp;lt;/nested:root&amp;gt;&lt;BR&gt;&lt;BR&gt;&amp;lt;/nested:root&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;However, the more you nest the tags within each other, the more flaky things are likely to get.&amp;nbsp; In my recent debugging session, I made the decision that from now on, nested roots should contain at most 1 nested root within them.&amp;nbsp; If you have more than 1 root defined within a root, all the subsequent tags outside the 1st nested root don&apos;t work correctly.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;As an example, I don&apos;t think you should do this:&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;&amp;lt;nested:root name=&quot;customer&quot;&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;Name = &amp;lt;nested:write property=&quot;name&quot; /&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;&amp;lt;nested:root name=&quot;address&quot;&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;Address Line 1 = &amp;lt;nested:write property=&quot;line1&quot; /&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;Address Line 2 = &amp;lt;nested:write property=&quot;line2&quot; /&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;City = &amp;lt;nested:write property=&quot;city&quot; /&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;&amp;lt;/nested:root&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;&amp;lt;nested:present name=&quot;altContact&quot;&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;&amp;lt;nested:root name=&quot;altContact&quot;&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;Name = &amp;lt;nested:write property=&quot;name&quot;/&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;&amp;lt;/nested:root&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;&amp;lt;/nested:present&amp;gt;&lt;/SPAN&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;BR style=&quot;FONT-FAMILY: courier&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: courier&quot;&gt;&amp;lt;/nested:root&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt; &lt;BR&gt;&lt;BR&gt;Because chances are that the tag logic won&apos;t determine that altContact is present correctly.&lt;BR&gt;</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/19.html#a640</guid>
			<pubDate>Mon, 19 Jan 2004 22:37:26 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=640&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F19.html%23a640</comments>
			</item>
		<item>
			<title>Get the user id from servlet container</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/19.html#a639</link>
			<description>&lt;P&gt;Because I don&apos;t get to do it often enough, I always forget how to get the user id from the servlet container.&amp;nbsp; This is handy if you are letting the container handle the authentication for your application.&amp;nbsp; All you have to do is call &lt;FONT face=&quot;Courier, Monospace&quot; size=2&gt;request.getUserPrincipal().getName()&lt;/FONT&gt;.&amp;nbsp; This returns the id as a String.&amp;nbsp; Beautiful.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/19.html#a639</guid>
			<pubDate>Mon, 19 Jan 2004 21:07:57 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=639&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F19.html%23a639</comments>
			</item>
		<item>
			<title>Common Struts Errors and Solutions</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/15.html#a636</link>
			<description>&lt;a href=&quot;http://www.geocities.com/Colosseum/Field/7217/SW/struts/errors.html&quot;&gt;Here&apos;s&lt;/a&gt; a great page that lists some of the common Struts configuration errors and their solutions.&lt;br&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/15.html#a636</guid>
			<pubDate>Thu, 15 Jan 2004 16:25:41 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=636&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F15.html%23a636</comments>
			</item>
		<item>
			<title>Show CSS computed styles for HTML page elements</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/15.html#a635</link>
			<description>I just found an awesome bookmarklet for Firebird (may work with IE, but it didn&apos;t for me).&amp;nbsp; Get it &lt;a href=&quot;http://www.kryogenix.org/days/bookmarklet&quot;&gt;here&lt;/a&gt;.&amp;nbsp; Some of its sweetness includes:&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
  &lt;li&gt;style information is shown in a separate window and elements are selected just by mousing over them.&lt;/li&gt;
  &lt;li&gt;showing you the hierarchy of styles that are being applied to the element&lt;/li&gt;
  &lt;li&gt;gives you a complete breakdown of the style that&apos;s in effect for the element&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
I&apos;ve been having some trouble debugging some CSS issues with one of my pages.&amp;nbsp; This is a tremendous help.&lt;br&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/15.html#a635</guid>
			<pubDate>Thu, 15 Jan 2004 15:51:04 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=635&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F15.html%23a635</comments>
			</item>
		<item>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/12.html#a632</link>
			<description>Here&apos;s a follow-up to &quot;Fighting with Java logging&quot;.&amp;nbsp; I&apos;ve found
that alot of the Jakarta libraries and other open source libraries are
using Commons Logging to abstract the logging for their library.&amp;nbsp;
This makes alot of sense - they don&apos;t have to worry about whether you
are using JDK 1.4 logging of whether you are using Log4j.&amp;nbsp; &lt;br&gt;
&lt;br&gt;
However, if you are using Lumberjack, you are screwed.&amp;nbsp; Let me
rephrase that: if you are using Lumberjack, and you don&apos;t have time to
fiddle with the source for Lumberjack to add the missing method from
JDK1.4 or add support for Lumberjack to Commons Logging, then you are
screwed.&amp;nbsp; In my case, I&apos;m screwed.&lt;br&gt;
&lt;br&gt;
So far, I can&apos;t use Commons BeanUtils or &lt;a href=&quot;http://strutstestcase.sourceforge.net/&quot;&gt;StrutsTestCase&lt;/a&gt;.&amp;nbsp; Not happy.&amp;nbsp; I guess I should post a question to a Lumberjack list or something.&lt;br&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/12.html#a632</guid>
			<pubDate>Mon, 12 Jan 2004 19:06:19 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=632&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F12.html%23a632</comments>
			</item>
		<item>
			<title>Idea for providing &quot;uncached&quot; objects after retrieving with Toplink</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/09.html#a631</link>
			<description>When you retrieve an object with Toplink, no matter if it&apos;s through the
ClientSession or a UnitOfWork, Toplink returns an object that it is
tracking in its cache.  If you change the object in one place, ask
for it again in the other, you will get the changed object.  In
some cases this is great because you can quickly and easily reflect the
latest information with incredible performance.  However I find
myself being confused by this behavior for most of my applications.&lt;br&gt;
&lt;br&gt;
My idea is that each of the classes you store with Toplink implements Cloneable.  Then, in your DAO layer (you &lt;span style=&quot;font-weight: bold;&quot;&gt;are &lt;/span&gt;using
a DAO layer, right?) , before you return an object to the caller you
call its clone() method.  This will ensure that you have a shallow
copy of the object that is not associated with Toplink&apos;s cache. Then,
you can count on 2 retrievals of the same object only reflecting any
updates that &lt;span style=&quot;font-weight: bold;&quot;&gt;have actually been committed&lt;/span&gt; to the cache/database.&lt;br&gt;
&lt;br&gt;
If you have a complex object graph that you are persisting with Toplink
and you want the same functionality, you can implement a method to do a
deep clone.  This would make sure that the entire graph reflects
the data at that point in time rather than any changes that are
happening in other places.&lt;br&gt;
&lt;br&gt;</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/09.html#a631</guid>
			<pubDate>Fri, 09 Jan 2004 21:47:30 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=631&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F09.html%23a631</comments>
			</item>
		<item>
			<title>Emacs, DBVisualizer, and Java</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/09.html#a629</link>
			<description>Within the last six months, I&apos;ve started using DBVisualizer
(&lt;a href=&quot;http://www.minq.se/products/dbvis/&quot;&gt;http://www.minq.se/products/dbvis/&lt;/a&gt;) for accessing databases while I&apos;m
coding.&amp;nbsp; It&apos;s a great front end for any relational database that
has a JDBC driver.&amp;nbsp; I highly recommend it.&lt;br&gt;
&lt;br&gt;
One of the many cool features is that result sets in the product are
displayed in a grid (JTable).&amp;nbsp; You can select values in the grid
and copy them to the clipboard to paste in other applications.&amp;nbsp; I
frequently paste the data into Emacs for use in Java unit tests.&lt;br&gt;
&lt;br&gt;
The problem is that the columns of text are not in an array
format.&amp;nbsp; So, I wrote the following Emacs functions to &quot;fix the
data up&quot;.&amp;nbsp; After you paste the data into Emacs you can immediately
run one of the interactive fix-up functions.&amp;nbsp; (One of the
thousands of beautiful things about Emacs is that it automatically sets
the region around the pasted text.)&amp;nbsp; This will remove the column
header and produce a comma delimited list of terms suitable for use in
an array.&lt;br&gt;
&lt;br&gt;
&lt;code&gt;(defun fixup-dbviz-array (start end replace-string)&lt;br&gt;
&quot;Formats the region for use as an array and replaces the regexp match&lt;br&gt;
with the specified replacement string.&quot;&lt;br&gt;
&lt;br&gt;
&amp;nbsp; (unwind-protect&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (progn&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (narrow-to-region start end)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (goto-char (point-min))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (kill-line &apos;t)&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (while (re-search-forward &quot;\\(.*?\\)\n&quot; nil t)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (replace-match
replace-string))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (if (re-search-backward &quot;,&quot; nil t)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (delete-char 1)))&lt;br&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;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (widen)))&lt;br&gt;
&lt;br&gt;
(defun fixup-dbviz-string-array (start end)&lt;br&gt;
&quot;Formats a column of values that are copy and pasted from DB&lt;br&gt;
Visualizer and formats them for use as a String array&quot;&lt;br&gt;
&amp;nbsp; (interactive &quot;r&quot;)&lt;br&gt;
&amp;nbsp; &lt;br&gt;
&amp;nbsp; (fixup-dbviz-array start end &quot;\&quot;\1&quot;, &quot;))&lt;br&gt;
&lt;br&gt;
(defun fixup-dbviz-int-array (start end)&lt;br&gt;
&quot;Formats a column of values that are copy and pasted from DB&lt;br&gt;
Visualizer and formats them for use as a int array&quot;&lt;br&gt;
&amp;nbsp; (interactive &quot;r&quot;)&lt;br&gt;
&lt;br&gt;
&amp;nbsp; (fixup-dbviz-array start end &quot;\\1, &quot;))&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/09.html#a629</guid>
			<pubDate>Fri, 09 Jan 2004 18:38:09 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=629&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F09.html%23a629</comments>
			</item>
		<item>
			<title>Toplink Session Console classpath</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/09.html#a627</link>
			<description>Here&apos;s a little something that you may or may not find in the
documentation about the Toplink Session Console.&amp;nbsp; If you want to
use the console to play with your mappings and run queries with them,
you have to add your project&apos;s build directory to the classpath.&amp;nbsp;
If it can&apos;t find the objects the mappings point to, you get and
ConversionException when you try to load your project into the console.&lt;br&gt;
&lt;br&gt;
The way I worked around this was to create a copy of the batch file
that loads the Session Console and add my project&apos;s build directory to
the classpath.&amp;nbsp; Bingo!&amp;nbsp; Everything works.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/09.html#a627</guid>
			<pubDate>Fri, 09 Jan 2004 14:30:13 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=627&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F09.html%23a627</comments>
			</item>
		<item>
			<title>Toplink Session Profiler</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/06.html#a626</link>
			<description>Have you discovered the PerformanceProfiler yet?&amp;nbsp; This is a
Toplink class that allows you to add profiling to your log, and it&apos;s
simply awesome.&amp;nbsp; Here&apos;s a sample of the output:&lt;br&gt;
&lt;font size=&quot;1&quot;&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;Profile(ReportQuery,&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class=com.fritolay.bsg.pog.db.valueobjects.Customer,&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; number of objects=17,&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; total time=80,&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local time=80,&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; query prepare=20,&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sql execute=50,&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sql generation=10,&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; time/object=4,&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; objects/second=212,&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;)&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;} End Profile&lt;/span&gt;&lt;br style=&quot;font-family: courier;&quot;&gt;
&lt;/font&gt;&lt;br&gt;
You enable the profiler with code via your Session.&amp;nbsp; You&apos;ll
probably want to do it on your ServerSession so that you can catch
everything, however I can envision a scenario where you might only want
to profile one of your ClientSessions.&amp;nbsp; Whatever.&amp;nbsp; The call
is setProfiler on session and it takes a SessionProfiler, the parent of
PerformanceProfiler.&lt;br&gt;
&lt;br&gt;
Have fun!&lt;br&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/06.html#a626</guid>
			<pubDate>Tue, 06 Jan 2004 21:13:32 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=626&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F06.html%23a626</comments>
			</item>
		<item>
			<title>Toplink Session Logging</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2004/01/06.html#a625</link>
			<description>Here&apos;s a tasty little Toplink morsel to kick of the new year.&amp;nbsp; If you are setting up session logging in Toplink, and you are doing it by hand, you should set the logging options on the ServerSession not the ClientSession.&amp;nbsp; If you set it on the ClientSession, you won&apos;t get the SQL statements dumped to your log!&amp;nbsp; How do you like that?&amp;nbsp; Tasty, I know.</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2004/01/06.html#a625</guid>
			<pubDate>Tue, 06 Jan 2004 20:17:39 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=625&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2004%2F01%2F06.html%23a625</comments>
			</item>
		<item>
			<title>Fighting with Java logging</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2003/12/15.html#a624</link>
			<description>&lt;p&gt;I&apos;ve been fighting with Java logging alot today.  I&apos;ve found
out some interesting, if not disturbing things.  I&apos;m also very
disappointed.&lt;/p&gt;&lt;p&gt;I&apos;m currently working on a project that must comply
with certain customer standards.  The customer has standardized on
Java 1.3 for their VM.  They have also standardized on the Java
logging API for logging, but since they are using 1.3, they have
decided to implement the logging API using &lt;a href=&quot;http://sourceforge.net/projects/lumberjack/&quot;&gt;Lumberjack&lt;/a&gt;.  This gives them the logging API while still using Java 1.3.&lt;/p&gt;&lt;p&gt;I thought this was a bit unusual, so I thought I would use the &lt;a href=&quot;http://jakarta.apache.org/commons/logging.html&quot;&gt;Jakarta Commons Logging&lt;/a&gt;
API to abstract the logging interface.  This would allow either
the Java logging API or log4j to be used as the logging implementation
without changing code.  A very good thing.&lt;/p&gt;&lt;p&gt;This is where the
fun began.  It turns out that although the Commons Logging API
will front either JDK 1.4 logging API or log4j, it will not front
Lumberjack.  Why?  Well, it&apos;s simple.  Commons Logging
makes a call to getStackTrace on the Exception class if you are using
JDK 1.4 style logging.  This method is not available prior to JDK
1.4!  Since Lumberjack can only be used with JDK 1.2 and 1.3,
Commons Logging cannot front Lumberjack!  ACK!&lt;/p&gt;&lt;p&gt;So, I
punted.  I decided I would just use the Java logging API without
an abstraction on top of it.  Fine.  I created a base class
for several of my classes that contained methods for handling
exceptions.  These methods made the appropriate call to log the
exception and then threw an application specific exception.  This
provides an easy and centralized method of logging and wrapping
exceptions.&lt;/p&gt;&lt;p&gt;Enter my disappointment.  Upon testing I found
that the Java logging API was reporting the class logging the messages
as my abstract base class!  I thought this might be something
peculiar with Lumberjack, so I switched to JDK 1.4 and re-ran my
tests.  Nope.  It still does it.&lt;/p&gt;&lt;p&gt;I figured there had to
be a way out of this nightmare.  I went to the API Javadoc. 
I found that there is a logp method that takes the class name and the
method name of the class logging the message.  Perfect!  I
could just pass in the class name and method name, and I could probably
get those dynamically...&lt;/p&gt;&lt;p&gt;WRONG!  As it turns out it&apos;s easy
enough to get the class name - we&apos;ve all done it.  Do something
like this.getClass().getName().  Simple.  However, in JDK 1.3
there doesn&apos;t appear to be a way to dynamically (and generically)
derrive the current method name.  Surely not!  I went to
Google.  I found &lt;a href=&quot;http://www.rgagnon.com/javadetails/java-0420.html&quot;&gt;this page&lt;/a&gt;
which shows a way to get the current method name.  But wait! 
What&apos;s that call?  Is that a call to getStackTrace on
Exception?  Oh nuts.&lt;/p&gt;&lt;p&gt;SO, here&apos;s where I am.  In the
interest of time (on this project there is not alot) I decided to bite
the bullet and take the inaccuracy of having the log reflect the
abstract base class when logging.  It was a trade off between log
accuracy and ease of code maintenance.  Maintenance won.  I&apos;m
going to consider putting the class name as part of the logging message
so that the reader will get closer to the problem faster.&lt;/p&gt;&lt;p&gt;I&apos;m beat.&lt;/p&gt;</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2003/12/15.html#a624</guid>
			<pubDate>Mon, 15 Dec 2003 23:56:28 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=624&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2003%2F12%2F15.html%23a624</comments>
			</item>
		<item>
			<title>Sun&apos;s Java Desktop System</title>
			<link>http://wwws.sun.com/software/javadesktopsystem/</link>
			<description>&lt;P&gt;In case you haven&apos;t seen it or heard about it, Sun is promoting a Linux distribution they call the Java Desktop System.&amp;nbsp; I&apos;m not sure how Java fits in there other than the distro has the runtime.&amp;nbsp; But, more power to them because they are promoting two of my favorite things.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2003/12/04.html#a622</guid>
			<pubDate>Fri, 05 Dec 2003 05:03:39 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=622&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2003%2F12%2F04.html%23a622</comments>
			</item>
		<item>
			<title>Struts and Container Managed Persistence</title>
			<link>http://www.mail-archive.com/struts-user@jakarta.apache.org/msg22257.html</link>
			<description>This is a cool idea of how to use Struts with container managed persistence.&amp;nbsp; I haven&apos;t had a chance to play with it yet, but it sounds feasible.&amp;nbsp; I&apos;m thinking that you could use this for implementing a poor man&apos;s single sign-on.&amp;nbsp; You could programmatically login to the other applications your user would be accessing and finally log in to the container.&amp;nbsp; If authentication failed at any point in the chain, your app would send the user to the login error page.</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2003/12/04.html#a621</guid>
			<pubDate>Fri, 05 Dec 2003 04:27:23 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=621&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2003%2F12%2F04.html%23a621</comments>
			</item>
		<item>
			<title>Running Ant Exec Tasks Asynchronously</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2003/09/04.html#a587</link>
			<description>
&lt;p&gt;Apparently, Ant doesn&apos;t allow you to run exec tasks
asynchronously. For example, if you start up Tomcat from an Ant build
file, it will wait until Tomcat exits before it continues to work
through its build file. This is probably not what you want it to
do. You probably want it to spawn Tomcat in a new process and keep on
trucking (or wait until Tomcat is up and then keep on trucking).&lt;/p&gt;

&lt;p&gt;It seems to me this would be easy in Unix with a decent command
shell. However, I&apos;m in Windoze. So, no luck there. &lt;/p&gt;

&lt;p&gt;But, I found a &lt;a
href=&quot;http://www.mail-archive.com/ant-user@jakarta.apache.org/msg23684.html&quot;&gt;great
thread&lt;/a&gt; (ala Google) that gives you a couple of options. I went
with the &quot;antRunAsync&quot; option. Worked like a charm! Here&apos;s my Tomcat
start target:&lt;/p&gt;
&lt;br&gt;
&lt;code&gt;
&amp;nbsp;&amp;lt;target name=&amp;quot;start.tomcat&amp;quot; depends=&amp;quot;prepare&amp;quot; if=&amp;quot;tomcat-needs-to-start&amp;quot;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;exec executable=&amp;quot;cmd.exe&amp;quot; vmlauncher=&amp;quot;false&amp;quot; failonerror=&amp;quot;true&amp;quot;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;env key=&amp;quot;PATH&amp;quot; path=&amp;quot;C:/WINNT/system32;C:/WINNT;C:/Program Files/SQLLIB/BIN;C:/Program Files/SQLLIB/FUNCTION;C:/Program Files/SQLLIB/SAMPLES/REPL;C:/Program Files/SQLLIB/HELP;C:/PROGRA~1/IBM/IMNNQ&amp;quot;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arg value=&amp;quot;/c ${ant.home}/bin/antRunAsync ${websrv.dir}/bin/startup.bat&amp;quot;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/exec&amp;gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;waitfor&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;http url=&amp;quot;${testurl}&amp;quot;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/waitfor&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;/target&amp;gt;&lt;br&gt;
&lt;/code&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2003/09/04.html#a587</guid>
			<pubDate>Thu, 04 Sep 2003 23:32:43 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=587&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2003%2F09%2F04.html%23a587</comments>
			</item>
		<item>
			<title>Dynamically Redeploying With Tomcat 4.1, Ant, and Struts</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2003/09/04.html#a586</link>
			<description>I&apos;ve been to battle.&amp;nbsp; My foe is my web application built around
Struts 1.1 that I&apos;m deploying on Tomcat 4.1.&amp;nbsp; I want Tomcat to be
able to remove the application completely so that I can redeploy it
without having to restart my server.&amp;nbsp; Tomcat patently rerfuses to
delete the application&apos;s directory under &quot;webapps&quot; because the
struts.jar in my WEB-INF/lib directory is being used.&amp;nbsp; Used by
what?&amp;nbsp; I don&apos;t know.&lt;br&gt;
&lt;br&gt;
I have emerged victorious.&amp;nbsp; How?&amp;nbsp; Instead of trying to
actually remove or undeploy, I decided to just stop the web
application, unwar my war on top of the Tomcat deploy directory, and
start the web application again.&amp;nbsp; This seems to be a pretty decent
work around to the locked struts.jar problem.&lt;br&gt;
&lt;br&gt;
I&apos;m automating all this with Tomcat&apos;s Ant tasks.&amp;nbsp;&amp;nbsp; Booyah!&lt;br&gt;
 </description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2003/09/04.html#a586</guid>
			<pubDate>Thu, 04 Sep 2003 22:06:27 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=586&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2003%2F09%2F04.html%23a586</comments>
			</item>
		<item>
			<title>Using Ant to Deploy to Tomcat</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2003/09/04.html#a585</link>
			<description>Did you know that you can have Ant deploy your application to Tomcat
4.1 and automagically deploy/undeploy the application?&amp;nbsp; This
prevents you from having to restart Tomcat after a deploy if you&apos;ve
changed the web.xml or other non-reloaded properties.&amp;nbsp; Here&apos;s &lt;a href=&quot;http://jakarta.apache.org/tomcat/tomcat-4.1-doc/manager-howto.html#Executing%20Manager%20Commands%20With%20Ant&quot;&gt;the link&lt;/a&gt; to the documentation.&lt;br&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2003/09/04.html#a585</guid>
			<pubDate>Thu, 04 Sep 2003 19:32:28 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=585&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2003%2F09%2F04.html%23a585</comments>
			</item>
		<item>
			<title>Ant DTD</title>
			<link>http://radio.weblogs.com/0116883/categories/java/2003/09/04.html#a584</link>
			<description>Want to get your hands on an Ant DTD?&amp;nbsp; Why not have Ant generate it for you?&amp;nbsp; Check out &lt;a href=&quot;http://www.xml.com/pub/a/2003/01/29/ant.html&quot;&gt;this article.&lt;/a&gt;&lt;br&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2003/09/04.html#a584</guid>
			<pubDate>Thu, 04 Sep 2003 19:30:15 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=584&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2003%2F09%2F04.html%23a584</comments>
			</item>
		<item>
			<link>http://radio.weblogs.com/0116883/categories/java/2003/08/27.html#a583</link>
			<description>Here&apos;s a little Oracle nugget that a coworker learned today.&amp;nbsp;
Oracle version 8.1.6&amp;nbsp; and lower doesn&apos;t like to be involved in
wrapped connections.&amp;nbsp; That means that you will have problems using
connection pooling with this version of Oracle and prior.&amp;nbsp; Go
figure.&lt;br&gt;
</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2003/08/27.html#a583</guid>
			<pubDate>Wed, 27 Aug 2003 22:00:52 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=583&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2003%2F08%2F27.html%23a583</comments>
			</item>
		<item>
			<link>http://radio.weblogs.com/0116883/categories/java/2003/08/23.html#a578</link>
			<description>&lt;a href=&quot;http://capescience.blogspot.com/2003_08_01_capescience_archive.html#106155200597053353&quot;&gt;Introducing XACML&lt;/a&gt;. This Computerworld   article provides a very brief introduction to XACML, an access control list language implemented with XML.

To attain an understanding of the lingo check out this XACML glossary or if you prefer dive straight into the specification( [&lt;a href=&quot;http://capescience.blogspot.com&quot;&gt;CapeBlog&lt;/a&gt;]
&lt;p&gt;This is an introductory article.  Sounds interesting.  This technology provides a standard way to query for and distribute access policies.  The Sun site for this technology is &lt;a href=&quot;http://developer.java.sun.com/developer/technicalArticles/Security/xacml/xacml.html&quot;&gt;here&lt;/a&gt;&lt;/p&gt;</description>
			<guid>http://radio.weblogs.com/0116883/categories/java/2003/08/23.html#a578</guid>
			<pubDate>Sat, 23 Aug 2003 23:50:37 GMT</pubDate>
			<source url="http://capescience.blogspot.com/rss/capescience.xml">CapeBlog</source>
			<comments>http://radiocomments.userland.com/comments?u=116883&amp;amp;p=578&amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0116883%2F2003%2F08%2F23.html%23a578</comments>
			</item>
		</channel>
	</rss>
