<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkUBSHg8eSp7ImA9WxBSGEo.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659</id><updated>2009-12-26T23:44:19.671-02:00</updated><title type="text">Java 2 Go!</title><subtitle type="html">Sharing some tech knowledge on Java and Oracle...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://java2go.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><thespringbox:skin xmlns:thespringbox="http://www.thespringbox.com/dtds/thespringbox-1.0.dtd">http://feeds.feedburner.com/java2go?format=skin</thespringbox:skin><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" /><logo>http://sites.google.com/site/errodrigues/Home/FeedHeader.gif?attredirects=0</logo><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/posts/default" /><feedburner:emailServiceId>java2go</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Fjava2go.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://java2go.blogspot.com/feeds/posts/default" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fjava2go.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Fjava2go.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Fjava2go.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Fjava2go.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://www.addtoany.com/?linkname=Java%202%20Go%21&amp;linkurl=http%3A%2F%2Fjava2go.blogspot.com%2Ffeeds%2Fposts%2Fdefault&amp;type=feed" src="http://www.addtoany.com/addfr-b.gif">Add to Any Feed Reader</feedburner:feedFlare><feedburner:browserFriendly>My name is Eduardo Rodrigues. I'm a Senior Consultant at Oracle in Brazil. I've being working for Oracle since Dec. 1997 as a contractor and became an employee in Sep. 2006. I have great experience developing web applications specially with Java technologies with which I've being working since 1999 obtaining certifications as a Programmer for both Java 2 Platform 1.4 and J2SE 5.0 from Sun Microsystems. This experience is what I intend to share a bit with you.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;DE4DR3cyfSp7ImA9WxVaFE0.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-1820908525083110732</id><published>2009-04-09T22:24:00.007-03:00</published><updated>2009-04-10T20:42:56.995-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-10T20:42:56.995-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="reviews" /><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><category scheme="http://www.blogger.com/atom/ns#" term="xml" /><category scheme="http://www.blogger.com/atom/ns#" term="jdeveloper" /><title>Our first official book review in on its way...</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Eduardo Rodrigues&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;Great news!&lt;br /&gt;&lt;br /&gt;We have been contacted (surprisingly) by &lt;a target="packt" href="http://www.packtpub.com"&gt;&lt;span style="font-weight:bold;"&gt;Packt Publishing&lt;/span&gt;&lt;/a&gt; a few days ago and asked if we would be interested in read one of their new books and then publish an independent review here in the blog. We were very honored and flattered with the offer, so we obviously accepted it.&lt;br /&gt;&lt;br /&gt;The book is &lt;a target="packt" href="http://www.packtpub.com/processing-xml-documents-with-oracle-jdeveloper-11g/book/mid/060409wpdui4"&gt;"Processing XML documents with Oracle JDeveloper 11g"&lt;/a&gt; by &lt;a target="packt" href="http://www.packtpub.com/author_view_profile/id/201"&gt;Deepak Vohra&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One good thing that immediately caught my attention as soon as the book arrived today was seeing the name "&lt;a target="frank" href="http://frank.thepeninsulasedge.com/"&gt;Frank Nimphius&lt;/a&gt;" in the list of reviewers. This is certainly a good sign :)&lt;br /&gt;&lt;br /&gt;Anyway, Fabio and I already have the book and we'll both read it and then compile our comments in a 4-hand post to come. We hope it wont take too long (and also hope this will be just the first of many other book reviews to come).&lt;br /&gt;&lt;br /&gt;Cheers and keep reading!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-1820908525083110732?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=LrcSoO9baUU:hu_bkWrM8U4:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=LrcSoO9baUU:hu_bkWrM8U4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=LrcSoO9baUU:hu_bkWrM8U4:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=LrcSoO9baUU:hu_bkWrM8U4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=LrcSoO9baUU:hu_bkWrM8U4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=LrcSoO9baUU:hu_bkWrM8U4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=LrcSoO9baUU:hu_bkWrM8U4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=LrcSoO9baUU:hu_bkWrM8U4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=LrcSoO9baUU:hu_bkWrM8U4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=LrcSoO9baUU:hu_bkWrM8U4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=LrcSoO9baUU:hu_bkWrM8U4:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/LrcSoO9baUU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/1820908525083110732/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=1820908525083110732" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/1820908525083110732?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/1820908525083110732?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/LrcSoO9baUU/our-first-official-book-review-in-on.html" title="Our first official book review in on its way..." /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://java2go.blogspot.com/2009/04/our-first-official-book-review-in-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIASXw-cSp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-6286419755537455804</id><published>2009-03-24T15:07:00.012-03:00</published><updated>2009-04-02T15:55:48.259-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:55:48.259-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="timezone" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><title>Java and the Timezones</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Fábio Souza&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;Timezone, when using Java, can be something tricky. You can get surprised when you change your OS timezone (something common to countries with DST) and it doesn't take any effect on your Java programs. What does Sun have to say about that? It can be found at their FAQ:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;Do my operating system's timezone patches fix the Java platform's timezone data?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;No. The Java SE platform's timezone data is not read from the local or host operating system. The Java SE platform maintains a private repository of timezone data in locally installed files (.../jre/lib/zi) as part of the Java Runtime Environment (JRE) software. Applying whatever operating system timezone patches (for example Solaris OS, Linux, Windows) will have no effect on the accuracy of the Java SE platform's timezone data.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/div&gt;Sun recommends you to maintain all JVM up to date to avoid Timezone problems. To specific cases where a Timezone update is needed, they provide a tool called TZUpdater. TZUpdater is a JAR that contains timezone informations provided by &lt;a target="wikipedia" href="http://en.wikipedia.org/wiki/Zoneinfo"&gt;Olson Timezone Database&lt;/a&gt;. To update the JVM's timezone you need to execute TZUpdater's most recent version like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-weight: bold;"&gt;java -jar tzupdater.jar -u&lt;/span&gt; (don't forget to check if you have read/write access to Java's directory structure)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;We are ok about Sun's JVM... But the solution is the same to all JVMs? Not really =), but it is very similar to IBM JVM and Oracle JRockit. In all cases we either have to download a program and execute it to update the installed JVM or wait for the next JVM update release.&lt;br /&gt;&lt;br /&gt;Here are some useful links:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sun:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/timezones/"&gt;About Java and Timezone&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/timezones/tzdata_versions.html"&gt;Timezone Data Versions in the JRE Software&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;Sun's tzupdater download&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/tzupdater_README.html"&gt;Sun's tzupdater guide&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/timezones/DST_faq.html"&gt;Sun's FAQ&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;IBM (thanks to my friend and co-worker Frederico Hakamine):&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www-01.ibm.com/support/docview.wss?rs=3068&amp;amp;context=SSNVBF&amp;amp;uid=swg27008911"&gt;Olson x JTZU Releases&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/java/jdk/dst/index.html"&gt;Download JTZU&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://download.boulder.ibm.com/ibmdl/pub/software/dw/jdk/dst/readme.htm"&gt;JTZU Guide&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Oracle:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.oracle.com/technology/software/products/jrockit/index.html"&gt;Oracle JRockit's tzupdater download&lt;/a&gt; (this is the JRockit's download page. You can find the tzupdater there)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://edocs.bea.com/jrockit/geninfo/diagnos/tzupdate.html"&gt;Oracle JRockit's tzupdater guide&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-6286419755537455804?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=moZLfpFLGAY:unDn65xbQlo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=moZLfpFLGAY:unDn65xbQlo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=moZLfpFLGAY:unDn65xbQlo:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=moZLfpFLGAY:unDn65xbQlo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=moZLfpFLGAY:unDn65xbQlo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=moZLfpFLGAY:unDn65xbQlo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=moZLfpFLGAY:unDn65xbQlo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=moZLfpFLGAY:unDn65xbQlo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=moZLfpFLGAY:unDn65xbQlo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=moZLfpFLGAY:unDn65xbQlo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=moZLfpFLGAY:unDn65xbQlo:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/moZLfpFLGAY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/6286419755537455804/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=6286419755537455804" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/6286419755537455804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/6286419755537455804?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/moZLfpFLGAY/java-and-timezones.html" title="Java and the Timezones" /><author><name>Fábio Saraiva de Souza</name><uri>http://www.blogger.com/profile/16902881356214004208</uri><email>fabio.saraiva@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11158110032887976596" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://java2go.blogspot.com/2009/03/java-and-timezones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIMRH86cCp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-5886129985465333360</id><published>2009-02-10T17:38:00.006-02:00</published><updated>2009-04-02T15:39:45.118-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:39:45.118-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="certification" /><title>Web Component Developer Exam (SCWCD) for JEE 5</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Wellington Carvalho&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;I hope my feedback can help those who want to prepare for The Web Component Developer exam (SCWCD) for JEE 5. I will use the same structure of an older post that Fabio Souza wrote to pass his own experience with SCJP 5 exams. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Main reading resource&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0596516681?ie=UTF8&amp;tag=ja2go-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596516681" target="amazon"&gt;Head First Servlets and JSP: Passing the Sun Certified Web Component Developer Exam&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=ja2go-20&amp;l=as2&amp;o=1&amp;a=0596516681" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;The first edition of the book deals with J2EE 1.4 spec, but the changes in JEE 5 were &lt;br /&gt;most related to EJB 3, so I think you won’t have troubles with the exam! But if you want, the second edition of the Head First Servlets and JSP is prepared for JEE 5 and you can find it here: &lt;a href="http://oreilly.com/catalog/9780596516680/?CMP=AFC-ak_book&amp;ATT=Head+First+Servlets+and+JSP" target="oreilly"&gt;http://oreilly.com/catalog/9780596516680/?CMP=AFC-ak_book&amp;ATT=Head+First+Servlets+and+JSP&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Main resources for exercises&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I used an application similar to Whizlabz named Enthuware. Enthuware is an exercise tool with many tests that covers all the objectives mentioned by Sun. The exercises of Enthuware are very similar to the exam, and you have good explanations, no matter the answer is right or wrong.&lt;br /&gt;&lt;br /&gt;In order to get a better performance in your study you should take the standard tests of Enthuware sequentially and exclusively when you have read the entire SCWCD book.&lt;br /&gt;To evaluate your chapter’s knowledgement you should take the objective-wise tests only after reading the chapter. To get the full version of Enthuware you will spend around US$29,00 which is cheaper than the other: Whizlabz (US$74,95). If you fail the SCWCD exam the company guarantee your money back (must get at least 70% in the tests).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My study schedule&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It took me 35 days to read all the 14 chapters and to do all the tests&lt;br /&gt;and exercises of Enthuware. I spent 2 hours and a half per day to read the chapter and 1 hour to do the exercises. In the week before the exam I just took the standard tests and reviewed the material. &lt;br /&gt;&lt;br /&gt;I think this schedule is reasonable to people that is working with JEE, however if you aren’t using JEE in your daily work you should reserve a longer study time.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The exam&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In my opinion the exam is relatively easy to people that have work experience in JEE development, however you need to pay attention to every detail because the exam has good tricks hidden in the code. But don’t get scared. Most of them are covered by Enthuware.&lt;br /&gt;&lt;br /&gt;To take this exam you must know about all the objectives listed by Sun, but with a special care on these below:&lt;br /&gt;&lt;br /&gt;Servlet Technology Model &lt;br /&gt;Expression Language (EL) &lt;br /&gt;Custom Tag Library - Classic Model&lt;br /&gt;JSP Standard Actions&lt;br /&gt;&lt;br /&gt;It is important to remember that you need at least 70% to pass, but trust me (and Enthuware), if you start scoring more than 70% in the standard tests, you will pass easily.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-5886129985465333360?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3kjMmGT1ZaI:jyrXuLD028Q:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3kjMmGT1ZaI:jyrXuLD028Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3kjMmGT1ZaI:jyrXuLD028Q:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3kjMmGT1ZaI:jyrXuLD028Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=3kjMmGT1ZaI:jyrXuLD028Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3kjMmGT1ZaI:jyrXuLD028Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=3kjMmGT1ZaI:jyrXuLD028Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3kjMmGT1ZaI:jyrXuLD028Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=3kjMmGT1ZaI:jyrXuLD028Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3kjMmGT1ZaI:jyrXuLD028Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3kjMmGT1ZaI:jyrXuLD028Q:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/3kjMmGT1ZaI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/5886129985465333360/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=5886129985465333360" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/5886129985465333360?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/5886129985465333360?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/3kjMmGT1ZaI/web-component-developer-exam-scwcd-for.html" title="Web Component Developer Exam (SCWCD) for JEE 5" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://java2go.blogspot.com/2009/02/web-component-developer-exam-scwcd-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIMRH86cCp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-2988391141226163608</id><published>2008-11-24T17:14:00.018-02:00</published><updated>2009-04-02T15:39:45.118-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:39:45.118-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="certification" /><title>SCJP 6 Upgrade Exam (310-056)</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Fábio Souza&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;Guys and girls,&lt;br /&gt;&lt;br /&gt;I guess the best way to start this post is with my appologies. I really wanted to post it earlier, but you all know how things are =P.&lt;br /&gt;&lt;br /&gt;It has been almost three months from when I took the SCJP 6 upgrade exam (310-056). The exam follows the same SCJP 5's (310-055) difficulty level where it's needed to pay attention to every detail. There is time enough  to do everything calmly but the tricks are there like they were in SCJP 5. The "secret" is still the same: MAKE LOTS OF EXERCISES. In my case, my knowledge on 310-055 was pretty sharp and I just had to work out the new features of Java 6. Lets talk about the exam and how to go for it.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;PS: To get your knowledge on 310-055 "pretty sharp", I recommend my previous post: &lt;a href="http://java2go.blogspot.com/2008/08/scjp-5-and-6.html"&gt;SCJP5 and 6&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Technical information:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Number of Questions: 48&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Score needed: 66% (32 of 48 questions)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Time limit: 150 minutes&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Resource material:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For those who don't have (or want to have) specific SCJP 6 material (the same of the previous post):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JDK 6 Documentation&lt;br /&gt;&lt;/li&gt;&lt;li&gt;What's New in Java SE 6&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Java SE 6 Key Features&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Java SE 6 Top Ten&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Notable changes in the Java SE 6 Core Libraries&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0072253606?ie=UTF8&amp;tag=ja2go-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0072253606"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055)&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=ja2go-20&amp;l=as2&amp;o=1&amp;a=0072253606" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;, by Katherine Sierra (Author), Bert Bates (Author)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;For those who want to buy new material:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0071591060?ie=UTF8&amp;tag=ja2go-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0071591060"&gt;SCJP Sun Certified Programmer for Java 6 Exam 310-065&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=ja2go-20&amp;l=as2&amp;o=1&amp;a=0071591060" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;, by Katherine Sierra (Author), Bert Bates (Author)&lt;sup&gt;*&lt;/sup&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;font-size:small;" &gt;* I've never read this book but if the quality is the same of the previous version, there is no doubt it should work.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I made an abstract to help me with the SCJP 6 content by comparing the requisites for both exams (310-055 and 310-065), and studying the Java 6 new features.  Here it is:&lt;br /&gt;&lt;br /&gt;- Ordered and Sorted comparison:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__F-yMT-jd-g/SSvk-tqGejI/AAAAAAAAABQ/qdhq-WscuHg/s1600-h/table1.PNG"&gt;&lt;img style="cursor: pointer; width: 246px; height: 320px;" src="http://2.bp.blogspot.com/__F-yMT-jd-g/SSvk-tqGejI/AAAAAAAAABQ/qdhq-WscuHg/s320/table1.PNG" alt="Click me" id="BLOGGER_PHOTO_ID_5272559554826500658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- NavigableSet and NavigableMap methods comparison:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__F-yMT-jd-g/SSvnYRpgV_I/AAAAAAAAABo/EFE103dlsKY/s1600-h/table2.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 366px;" src="http://3.bp.blogspot.com/__F-yMT-jd-g/SSvnYRpgV_I/AAAAAAAAABo/EFE103dlsKY/s400/table2.PNG" alt="Click me" id="BLOGGER_PHOTO_ID_5272562193007663090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- Other things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Deque: in this interface's &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Deque.html"&gt;javadoc&lt;/a&gt; there is a full explanation about the different methods that can be used to add/remover an object of this queue. Be sure that you know the ones that returns an special value (generally &lt;span style="font-style: italic;"&gt;null&lt;/span&gt;) or that throws an exception instead, when something goes wrong.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ArrayDeque: the best (fastest) way to make FIFO and LIFO queues. This is also the recommended implementation when we need a Stack.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;LinkedList: choose this implementation when objects should be added/removed between the first and the last element.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;java.util.Collections: there are two new methods in this class, &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Collections.html#newSetFromMap%28java.util.Map%29"&gt;newSetFromMap&lt;/a&gt; and &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Collections.html#asLifoQueue%28java.util.Deque%29"&gt;asLifoQueue&lt;/a&gt;, learn them.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;java.util.Arrays: avoid &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/System.html#arraycopy%28java.lang.Object,%20int,%20java.lang.Object,%20int,%20int%29"&gt;System.arraycopy&lt;/a&gt;, use the new methods &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html#copyOf%28T%5B%5D,%20int%29"&gt;Arrays.copyOf&lt;/a&gt; or &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html#copyOfRange%28T%5B%5D,%20int,%20int%29"&gt;Arrays.copyOfRange&lt;/a&gt; instead.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;java.io.File: &lt;a href="http://java.sun.com/javase/6/docs/api/java/io/File.html#getFreeSpace%28%29"&gt;getFreeSpace&lt;/a&gt;, &lt;a href="http://java.sun.com/javase/6/docs/api/java/io/File.html#getTotalSpace%28%29"&gt;getTotalSpace&lt;/a&gt;, &lt;a href="http://java.sun.com/javase/6/docs/api/java/io/File.html#setExecutable%28boolean%29"&gt;setExecutable&lt;/a&gt;, &lt;a href="http://java.sun.com/javase/6/docs/api/java/io/File.html#setWritable%28boolean%29"&gt;setWritable&lt;/a&gt;, &lt;a href="http://java.sun.com/javase/6/docs/api/java/io/File.html#setReadable%28boolean%29"&gt;setReadable&lt;/a&gt;. These are new methods to learn.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;java.io.IOException: there are new constructors that enable exception chaining &lt;a href="http://java.sun.com/javase/6/docs/api/java/io/IOException.html#IOException%28java.lang.String,%20java.lang.Throwable%29"&gt;IOException(String,&lt;br /&gt;Throwable)&lt;/a&gt; and &lt;a href="http://java.sun.com/javase/6/docs/api/java/io/IOException.html#IOException%28java.lang.Throwable%29"&gt;IOException(Throwable)&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;java.io.Console: this is a new class and its instance should be got using &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/System.html#console%28%29"&gt;System.console&lt;/a&gt;. I think all of its methods are importants, take a look at the &lt;a href="http://java.sun.com/javase/6/docs/api/java/io/Console.html"&gt;javadoc&lt;/a&gt;. Pay attention to the &lt;a href="http://java.sun.com/javase/6/docs/api/java/io/Console.html#readPassword%28%29"&gt;Console.readPassword&lt;/a&gt;, it will fill an array with the provided password, it is a good think to know how to clean this array. This is a good way: java.util.Arrays.fill(src, '\0') and this is a valid and bizarre way: java.util.Arrays.fill(src, 0, src.length, (char)0).&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;SCJP 6 - To do or not to do&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Because the difference between Java 5 and Java 6 is very little, in my opinion, people who already have the SCJP 5 don't need to worry about SCJP 6. For those who don't have SCJP 5 or any SCJP certificate at all: &lt;span style="font-weight: bold;"&gt;DON'T DO the Java 5 exam; GO STRAIGHT to Java 6&lt;/span&gt;.&lt;br /&gt;In my exam (just to freeze: 310-056), the Java 6 content was kind of ridiculous. Only THREE specific questions. It means (this is not an advice) I could take the SCJP 6 exam without any knowledge about its specific content. I'll tell you how it was like:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;java.io.Console: A question about its usage. It was necessary to know how to get the Console instance and how to get typed lines.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;java.util.NavigableSet and the implementation java.util.TreeSet: The question was about how to use them focusing the method &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html#subSet%28E,%20boolean,%20E,%20boolean%29"&gt;subset&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Chosing the best Collection implementation: I don't remember exactly what was asked, but keep this in mind:&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Stack or queue needed: use ArrayDeque.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Removing/Adding elements that might not be at the top or at the bottom: LinkedList.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sorted Collection (unique elements): TreeSet.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;That is all folks! Please send your comments, corrections and share your own experiences.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-2988391141226163608?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Te--TOyzrt8:OnobIc6SVh8:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Te--TOyzrt8:OnobIc6SVh8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Te--TOyzrt8:OnobIc6SVh8:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Te--TOyzrt8:OnobIc6SVh8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=Te--TOyzrt8:OnobIc6SVh8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Te--TOyzrt8:OnobIc6SVh8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=Te--TOyzrt8:OnobIc6SVh8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Te--TOyzrt8:OnobIc6SVh8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=Te--TOyzrt8:OnobIc6SVh8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Te--TOyzrt8:OnobIc6SVh8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Te--TOyzrt8:OnobIc6SVh8:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/Te--TOyzrt8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/2988391141226163608/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=2988391141226163608" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/2988391141226163608?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/2988391141226163608?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/Te--TOyzrt8/scjp-6-upgrade-exam-310-056.html" title="SCJP 6 Upgrade Exam (310-056)" /><author><name>Fábio Saraiva de Souza</name><uri>http://www.blogger.com/profile/16902881356214004208</uri><email>fabio.saraiva@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11158110032887976596" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/__F-yMT-jd-g/SSvk-tqGejI/AAAAAAAAABQ/qdhq-WscuHg/s72-c/table1.PNG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/11/scjp-6-upgrade-exam-310-056.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIMRH86cCp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-611946735951049524</id><published>2008-08-08T08:41:00.007-03:00</published><updated>2009-04-02T15:39:45.118-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:39:45.118-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="certification" /><title>SCJP 5 and 6</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Fábio Souza&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;OK, I know that is a little late to talk about SCJP 5 but I will give my feedback about the exam. This will help people that feels unprepared to take SCJP 6 (that was my case) and the ones that are going to take this new version, what I know is that both exams (5 and 6) are very similar.&lt;br /&gt;&lt;br /&gt;Resources:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Main resource material: &lt;a href="http://www.amazon.com/gp/product/0072253606?ie=UTF8&amp;tag=ja2go-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0072253606"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055)&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=ja2go-20&amp;l=as2&amp;o=1&amp;a=0072253606" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;, by Katherine Sierra (Author), Bert Bates (Author). This book is just great! The authors are very careful with the explanations and they also made very good illustrations. Each chapter ends with the "Two-minute Drill" section and the exercises. The "Two-minute Drill" has an abstract about the chapter that makes very easy to review forgotten items. The exercises are very well written, and every answer is explained (both wrong and right).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Main resource material for exercises: MasterExam. My SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055) book came with a CD containing the MasterExam software. This software gives two ways to do its questions, like the real exam or "ad-hoc". The MasterExam's questions are like the book. A "permission" to get a bonus exam also come with the CD, you just need to register on their site and then download the program.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Other resources for exercises that I found:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/www.whizlabs.com"&gt;Whizlabs&lt;/a&gt;: There is a software like MasterExam made by Whizlabs. It seems to be a very good software. Its interface is great and you have the possibility to do "adaptive" tests. I downloaded a trial version from their website and I liked it pretty much.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://epractizelabs.com/"&gt;EPractize&lt;/a&gt;: Their software is like the MasterExam too but it doesn't have any strength point. I didn't like the software's interface. I also downloaded a trial version from their website.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;"TestKiller": This one is an exercise's book and seems to be made by &lt;a href="http://www.blogger.com/www.troytec.com"&gt;Troytec&lt;/a&gt;. It's a very weird book, with a lot of writing mistakes on it. The strength point is that it promises to cover only questions from the real exam. When I took the exam I had the feeling of recognizing one or two questions (I took a look on 60 from 224 questions of this book).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;My study schedule: That was the way I worked out to pass the exam.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;8 months to read the SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055) and to do all exercises. It took me something like one hour per day (only workdays). It's a good way to start because you can understand how Java works without pushing yourself.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;1 month to read again all "Two-minute Drill" sections and the most complicated chapters (chapters 7, 9, 8, 6, in descending difficulty order, in my opinion).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;4 days (eight hours per day) to do A LOT of exercises. This is the main point. The exercises are full of tricks and the only way to become familiar with those tricks is doing a lot of exercises.&lt;/li&gt;&lt;/ul&gt;The exam: In my opinion, the exam is difficult. You have to be really confident before taking it. A good thing that I noticed was that the time is enough to do everything with attention and patience. In my opinion to take this exam you must know about everything, but with a special care with these points below:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Threads.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Generics.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Methods Override/Overload (and covariant return).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Box/Unbox.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Method calling with widening and autoboxing.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Access Control.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;java and javac commands.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Differences between collections (Ordered, Sorted, Hash).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How equals and hashCode works with collections.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Inner Classes.&lt;/li&gt;&lt;/ul&gt;Differences between SCJP 310-055 and 310-065 (you can find it &lt;a href="http://www.sun.com/training/certification/faq/index.html"&gt;here&lt;/a&gt;):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Questions concerning System.gc() have been removed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Coverage of the java.io.Console class has been added.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Coverage of navigable collections has been added.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Several of the previous objectives have been strengthened (so you can expect more questions and more detailed questions on them). These strengthened objectives include: exception handling, collection classes and collection interfaces, assertions, threads, and flow control.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Number of questions: 310-055 = 72; 310-065 = 72&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pass score: 310-055 = 59%; 310-065 = 65%&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Time limit: 310-055 = 175 minutes; 310-065 = 210 minutes&lt;/li&gt;&lt;/ul&gt;Advice: If you aren't feeling confident to take the SCJP 6 exam just because you don't know what is new in this version, don't take the SCJP 5. I did it and I am a little regretful. There is no "SCJP 5 to 6" exam, there is only one "upgrade" exam to version 6 called "Exam 310-056". In this exam you have to prove your Java 5 knowledge again. Well, soon I will take the 310-056 and then I will post about it.&lt;br /&gt;&lt;br /&gt;Please comment and share your experiences with SCJP (any version is welcome :)).&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/6/docs/index.html"&gt;JDK 6 Documentation&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/beta2.html"&gt;What's New in Java SE 6&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/6/features.jsp"&gt;Java SE 6 Key Features&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.sun.com/dannycoward/entry/java_se_6_top_ten"&gt;Java SE 6 Top Ten&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.sun.com/DaveB/entry/new_improved_in_java_se1"&gt;Notable changes in the Java SE 6 Core Libraries&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-611946735951049524?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=J4RTLjdX0i0:Nblx0LD30fM:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=J4RTLjdX0i0:Nblx0LD30fM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=J4RTLjdX0i0:Nblx0LD30fM:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=J4RTLjdX0i0:Nblx0LD30fM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=J4RTLjdX0i0:Nblx0LD30fM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=J4RTLjdX0i0:Nblx0LD30fM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=J4RTLjdX0i0:Nblx0LD30fM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=J4RTLjdX0i0:Nblx0LD30fM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=J4RTLjdX0i0:Nblx0LD30fM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=J4RTLjdX0i0:Nblx0LD30fM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=J4RTLjdX0i0:Nblx0LD30fM:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/J4RTLjdX0i0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/611946735951049524/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=611946735951049524" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/611946735951049524?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/611946735951049524?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/J4RTLjdX0i0/scjp-5-and-6.html" title="SCJP 5 and 6" /><author><name>Fábio Saraiva de Souza</name><uri>http://www.blogger.com/profile/16902881356214004208</uri><email>fabio.saraiva@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11158110032887976596" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">14</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/08/scjp-5-and-6.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g6fip7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-2620382803738206710</id><published>2008-07-08T15:25:00.003-03:00</published><updated>2009-04-02T15:37:56.616-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.616-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="curiosities" /><category scheme="http://www.blogger.com/atom/ns#" term="jdeveloper" /><title>There's a cook in JDev's development team indeed</title><content type="html">Sometime ago I was surprised with a peculiar "tip of the day" which simply mentioned a traditional &lt;a href="http://java2go.blogspot.com/2008/04/is-there-cook-in-jdevs-team.html"&gt;angel cake recipe&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Well, today I got the confirmation. There's certainly a cook amongst JDev's developers!&lt;br /&gt;&lt;br /&gt;Look at the "tip" showed to me today:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_F7mwJPejsqM/SHO1yR4ZK1I/AAAAAAAAF-w/0-kyHtytgzM/s1600-h/tip.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_F7mwJPejsqM/SHO1yR4ZK1I/AAAAAAAAF-w/0-kyHtytgzM/s400/tip.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5220716268450556754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hmmmm... interesting... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-2620382803738206710?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ZZPp__jkPMM:_tS9NKdPbpQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ZZPp__jkPMM:_tS9NKdPbpQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ZZPp__jkPMM:_tS9NKdPbpQ:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ZZPp__jkPMM:_tS9NKdPbpQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=ZZPp__jkPMM:_tS9NKdPbpQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ZZPp__jkPMM:_tS9NKdPbpQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=ZZPp__jkPMM:_tS9NKdPbpQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ZZPp__jkPMM:_tS9NKdPbpQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=ZZPp__jkPMM:_tS9NKdPbpQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ZZPp__jkPMM:_tS9NKdPbpQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ZZPp__jkPMM:_tS9NKdPbpQ:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/ZZPp__jkPMM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/2620382803738206710/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=2620382803738206710" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/2620382803738206710?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/2620382803738206710?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/ZZPp__jkPMM/theres-cook-in-jdevs-development-team.html" title="There's a cook in JDev's development team indeed" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp3.blogger.com/_F7mwJPejsqM/SHO1yR4ZK1I/AAAAAAAAF-w/0-kyHtytgzM/s72-c/tip.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/07/theres-cook-in-jdevs-development-team.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g6fyp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-3294639425788572418</id><published>2008-05-07T21:35:00.004-03:00</published><updated>2009-04-02T15:37:56.617-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.617-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jdeveloper" /><title>Windows XP SP3 crashing JDeveloper 10.1.3.3</title><content type="html">&lt;p align="right"&gt;&lt;em&gt;by Eduardo Rodrigues&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3 style="margin-top: 0; margin-bottom: 0; color: red"&gt;Attention!!!&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Today, my Windows XP automatically upgraded to SP3 and, after rebooting, my JDev 10.1.3.3 began to crash during its initialization, generating a JVM core dump in directory &amp;lt;JDEV_HOME&amp;gt;\jdev\bin.&lt;br /&gt;&lt;br /&gt;After a quick look into the dump file, I noticed some problem with VFS, so I decided to disable VFS commenting the following line in file &amp;lt;JDEV_HOME&amp;gt;\jdev\bin\jdev.conf:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#AddVMOption -DVFS_ENABLE=true&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then, thank God, JDev came back to life again. So, don't panic.&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-3294639425788572418?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=S_v4dExmP1M:Gxas7uUBc2U:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=S_v4dExmP1M:Gxas7uUBc2U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=S_v4dExmP1M:Gxas7uUBc2U:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=S_v4dExmP1M:Gxas7uUBc2U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=S_v4dExmP1M:Gxas7uUBc2U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=S_v4dExmP1M:Gxas7uUBc2U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=S_v4dExmP1M:Gxas7uUBc2U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=S_v4dExmP1M:Gxas7uUBc2U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=S_v4dExmP1M:Gxas7uUBc2U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=S_v4dExmP1M:Gxas7uUBc2U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=S_v4dExmP1M:Gxas7uUBc2U:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/S_v4dExmP1M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/3294639425788572418/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=3294639425788572418" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/3294639425788572418?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/3294639425788572418?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/S_v4dExmP1M/windows-xp-sp3-crashing-jdeveloper.html" title="Windows XP SP3 crashing JDeveloper 10.1.3.3" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/05/windows-xp-sp3-crashing-jdeveloper.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIBSHk_fyp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-8233575562207977875</id><published>2008-04-25T11:28:00.021-03:00</published><updated>2009-04-02T15:39:19.747-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:39:19.747-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ias" /><category scheme="http://www.blogger.com/atom/ns#" term="cache" /><category scheme="http://www.blogger.com/atom/ns#" term="oracleas" /><title>OracleAS Java Object  Cache</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Fábio Souza&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;Before I start, I would like to say that many texts and observations were took from the &lt;a href="http://download.oracle.com/docs/cd/B32110_01/web.1013/b28958/joc.htm#CHDHAAHJ"&gt;Oracle® Containers for J2EE Services Guide 10g (10.1.3.1.0), Chapter 7&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;What is it?&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;The Java Object Cache (JOC) is a OC4J service that makes cache (in memory or disk) of any kind of Java object.&lt;/blockquote&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Use it:&lt;/span&gt; &lt;ul&gt;&lt;li&gt;To store frequently used objects.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;To store objects that are costly to create/retrieve.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;To share objects between applications.&lt;/li&gt;&lt;/ul&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Characteristics:&lt;/span&gt; &lt;ul&gt;&lt;li&gt;By default, cached objects are stored in memory but disk persistence can be configured.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;By default, cached objects are local. The DISTRIBUTE mode can be configured.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;By default, the "write lock" is disabled.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cached objects doesn't have a "read lock".&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cached objects are represented by name spaces.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cached objects are invalidated based on time or an explicit request.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cached objects can be invalidated by group or individually.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Each cached Java object has a set of associated attributes that control how the object is loaded into the cache, where the object is stored, and how the object is invalidated.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When an object is invalidated or updated, the invalid version of the object remains in the cache as long as there are references to that particular version of the object.&lt;/li&gt;&lt;/ul&gt;&lt;span style="FONT-WEIGHT: bold"&gt;The Java Object Cache organization:&lt;/span&gt; &lt;ul&gt;&lt;li&gt;Cache Environment. The cache environment includes cache regions, subregions, groups, and attributes. Cache regions, subregions, and groups associate objects and collections of objects. Attributes are associated with cache regions, subregions, groups, and individual objects. Attributes affect how the Java Object Cache manages objects.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cache Object Types. The cache object types include memory objects, disk objects, pooled objects, and StreamAccess objects.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic"&gt;This &lt;/span&gt;&lt;a style="FONT-STYLE: italic" href="http://download.oracle.com/docs/cd/B32110_01/web.1013/b28958/joc.htm#g1087954"&gt;table&lt;/a&gt;&lt;span style="FONT-STYLE: italic"&gt; gives a little description about the cache environment and the object types.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="FONT-WEIGHT: bold"&gt;JOC API:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;Only "cache.jar" must be added to application's classpath to start with JOC API. This archive is located in &lt;span style="FONT-STYLE: italic"&gt;$ORACLE_HOME\javacache\lib\cache.jar&lt;/span&gt;. A project in JDeveloper just needs to import the built-in "Java Cache" library.&lt;/blockquote&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Distributed Cache Characteristics:&lt;/span&gt; &lt;ul&gt;&lt;li&gt;The cache management is not centralized. Cache updates and invalidation are propagated to all application server nodes.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The OAS' JOC configuration of each OAS node is not propagated to other nodes.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The distributed objects must be in the same namespace in each node.&lt;/li&gt;&lt;/ul&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Distributed Cache Configurations:&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;There are two ways to configure JOC: programmatically (using the oracle.ias.cache.Cache class) and through the &lt;span style="FONT-STYLE: italic"&gt;javacache.xml&lt;/span&gt; file. This post only covers &lt;span style="FONT-STYLE: italic"&gt;javacache.xml.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Configuring the &lt;span style="FONT-STYLE: italic"&gt;javacache.xml file:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;em&gt;javacache.xml&lt;/em&gt; localization is specified in the &lt;em&gt;server.xml&lt;/em&gt; OC4J configuration file (tag: "&lt;code&gt;&amp;lt;javacache-config&amp;gt;&lt;/code&gt;"). To work with &lt;em&gt;javacache.xml&lt;/em&gt; it is necessary to start the container with the -Doracle.ias.jcache=true property.&lt;br /&gt;To run JOC in "distributed mode", &amp;lt;communication&amp;gt; tag must be configured in the javacache.xml file like the example below:&lt;br /&gt;&lt;br /&gt;&lt;code style="FONT-SIZE: 8pt"&gt;&amp;lt;communication&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- "isdistributed" must be "true" to JOC work with DISTRIBUTE marked objects --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;isdistributed&amp;gt;true&amp;lt;/isdistributed&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Each JOC node must have a "discoverer" element to itself. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;discoverer ip="192.168.0.2" port="7000"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;discoverer ip="192.168.0.3" port="7000"&amp;gt;&lt;br /&gt;&amp;lt;/communication&amp;gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Configuring the distributed cached objects:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;There are three important attributes that we can use when configuring objects: &lt;ul&gt;&lt;li&gt;DISTRIBUTE: used to mark objects that will be shared between applications.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SYNCHRONIZE: used to allow "write locking" on cached objects.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SYNCHRONIZE_DEFAULT: the same use as the SYNCHRONIZE attribute, but it can mark only a region or a group. When they are marked, all objects will be allowed to use the write lock.&lt;/li&gt;&lt;/ul&gt;The example below shows a distributed cache utilization:&lt;br /&gt;&lt;br /&gt;&lt;code style="FONT-SIZE: 8pt"&gt;public&amp;nbsp;void&amp;nbsp;defineRegions()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Creating&amp;nbsp;attributes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Attributes&amp;nbsp;remoteRegionAttr&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Attributes();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Extracted&amp;nbsp;from&amp;nbsp;Attributes.setFlags()&amp;nbsp;javadoc:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;specifies&amp;nbsp;which&amp;nbsp;of&amp;nbsp;the&amp;nbsp;listed&amp;nbsp;attributes&amp;nbsp;should&amp;nbsp;be&amp;nbsp;set&amp;nbsp;in&amp;nbsp;the&amp;nbsp;Attributes&amp;nbsp;object.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;The&amp;nbsp;flags&amp;nbsp;may&amp;nbsp;be&amp;nbsp;OR'ed&amp;nbsp;together,&amp;nbsp;i.e.,&amp;nbsp;Attributes.DISTRIBUTE&amp;nbsp;|&amp;nbsp;Attributes.SPOOL.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Any&amp;nbsp;previous&amp;nbsp;settings&amp;nbsp;will&amp;nbsp;be&amp;nbsp;disregard.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remoteRegionAttr.setFlags(Attributes.SYNCHRONIZE_DEFAULT&amp;nbsp;|&amp;nbsp;Attributes.DISTRIBUTE);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Creates&amp;nbsp;the&amp;nbsp;&amp;quot;RemoteRegion&amp;quot;&amp;nbsp;with&amp;nbsp;the&amp;nbsp;specified&amp;nbsp;attributes.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheAccess.defineRegion(&amp;quot;RemoteRegion&amp;quot;,&amp;nbsp;remoteRegionAttr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public&amp;nbsp;void&amp;nbsp;createCachedObject(Object&amp;nbsp;object)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheAccess&amp;nbsp;access&amp;nbsp;=&amp;nbsp;null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Accessing&amp;nbsp;the&amp;nbsp;created&amp;nbsp;region.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access&amp;nbsp;=&amp;nbsp;CacheAccess.getAccess(&amp;quot;RemoteRegion&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Owning&amp;nbsp;cache&amp;nbsp;object's&amp;nbsp;write&amp;nbsp;lock&amp;nbsp;(5&amp;nbsp;seconds&amp;nbsp;to&amp;nbsp;timeout)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access.getOwnership(&amp;quot;CachedObject&amp;quot;,&amp;nbsp;5000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Caching&amp;nbsp;the&amp;nbsp;object&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access.put(&amp;quot;CachedObject&amp;quot;,&amp;nbsp;object);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Releasing&amp;nbsp;cache&amp;nbsp;object's&amp;nbsp;write&amp;nbsp;lock&amp;nbsp;(5&amp;nbsp;seconds&amp;nbsp;to&amp;nbsp;timeout)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access.releaseOwnership(&amp;quot;CachedObject&amp;quot;,&amp;nbsp;5000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(Exception&amp;nbsp;ex)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ex.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;finally&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(access&amp;nbsp;!=&amp;nbsp;null)&amp;nbsp;{&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Extracted&amp;nbsp;from&amp;nbsp;CacheAccess.close()&amp;nbsp;javadoc:&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;releases&amp;nbsp;the&amp;nbsp;resource&amp;nbsp;used&amp;nbsp;by&amp;nbsp;current&amp;nbsp;CacheAccess&amp;nbsp;object.&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;Application&amp;nbsp;is&amp;nbsp;required&amp;nbsp;to&amp;nbsp;make&amp;nbsp;this&amp;nbsp;call&amp;nbsp;when&amp;nbsp;it&amp;nbsp;no&amp;nbsp;longer&amp;nbsp;need&amp;nbsp;this&amp;nbsp;CacheAccess&amp;nbsp;instance.&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public&amp;nbsp;Object&amp;nbsp;retrieveCachedObject()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object&amp;nbsp;object&amp;nbsp;=&amp;nbsp;null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheAccess&amp;nbsp;access&amp;nbsp;=&amp;nbsp;null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access&amp;nbsp;=&amp;nbsp;CacheAccess.getAccess(&amp;quot;RemoteRegion&amp;quot;);&amp;nbsp;//&amp;nbsp;Accessing&amp;nbsp;the&amp;nbsp;created&amp;nbsp;region.&lt;br /&gt;&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;*&amp;nbsp;Extracted&amp;nbsp;from&amp;nbsp;CacheAccess.get()&amp;nbsp;javadoc:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;returns&amp;nbsp;a&amp;nbsp;reference&amp;nbsp;to&amp;nbsp;the&amp;nbsp;object&amp;nbsp;associated&amp;nbsp;with&amp;nbsp;name.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;If&amp;nbsp;the&amp;nbsp;object&amp;nbsp;is&amp;nbsp;not&amp;nbsp;currently&amp;nbsp;in&amp;nbsp;the&amp;nbsp;cache&amp;nbsp;and&amp;nbsp;a&amp;nbsp;loader&amp;nbsp;object&amp;nbsp;has&amp;nbsp;been&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;registered&amp;nbsp;to&amp;nbsp;the&amp;nbsp;name&amp;nbsp;of&amp;nbsp;the&amp;nbsp;object,&amp;nbsp;then&amp;nbsp;the&amp;nbsp;object&amp;nbsp;will&amp;nbsp;be&amp;nbsp;loaded&amp;nbsp;into&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;the&amp;nbsp;cache.&amp;nbsp;If&amp;nbsp;a&amp;nbsp;loader&amp;nbsp;object&amp;nbsp;has&amp;nbsp;not&amp;nbsp;been&amp;nbsp;defined&amp;nbsp;for&amp;nbsp;this&amp;nbsp;name,&amp;nbsp;then,&amp;nbsp;for&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;DISTRIBUTE&amp;nbsp;object,&amp;nbsp;the&amp;nbsp;default&amp;nbsp;load&amp;nbsp;method&amp;nbsp;will&amp;nbsp;do&amp;nbsp;a&amp;nbsp;netSearch&amp;nbsp;for&amp;nbsp;the&amp;nbsp;object&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;to&amp;nbsp;see&amp;nbsp;if&amp;nbsp;the&amp;nbsp;object&amp;nbsp;exist&amp;nbsp;in&amp;nbsp;any&amp;nbsp;other&amp;nbsp;cache&amp;nbsp;in&amp;nbsp;the&amp;nbsp;system;&amp;nbsp;for&amp;nbsp;a&amp;nbsp;non&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;DISTRIBUTE&amp;nbsp;object,&amp;nbsp;an&amp;nbsp;ObjectNotFoundException&amp;nbsp;will&amp;nbsp;be&amp;nbsp;thrown.&amp;nbsp;The&amp;nbsp;object&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;returned&amp;nbsp;by&amp;nbsp;get&amp;nbsp;is&amp;nbsp;always&amp;nbsp;a&amp;nbsp;reference&amp;nbsp;to&amp;nbsp;a&amp;nbsp;shared&amp;nbsp;object.&amp;nbsp;Get&amp;nbsp;will&amp;nbsp;always&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;return&amp;nbsp;the&amp;nbsp;latest&amp;nbsp;version&amp;nbsp;of&amp;nbsp;the&amp;nbsp;object.&amp;nbsp;A&amp;nbsp;CacheAccess&amp;nbsp;object&amp;nbsp;will&amp;nbsp;only&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;maintain&amp;nbsp;a&amp;nbsp;reference&amp;nbsp;to&amp;nbsp;one&amp;nbsp;cached&amp;nbsp;object&amp;nbsp;at&amp;nbsp;any&amp;nbsp;given&amp;nbsp;time.&amp;nbsp;If&amp;nbsp;get&amp;nbsp;is&amp;nbsp;called&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;multiple&amp;nbsp;times,&amp;nbsp;the&amp;nbsp;object&amp;nbsp;accessed&amp;nbsp;previously&amp;nbsp;will&amp;nbsp;be&amp;nbsp;released.&lt;br /&gt;&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;object&amp;nbsp;=&amp;nbsp;access.get(&amp;quot;CachedObject&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;It's&amp;nbsp;not&amp;nbsp;necessary&amp;nbsp;to&amp;nbsp;own&amp;nbsp;the&amp;nbsp;writing&amp;nbsp;lock&amp;nbsp;to&amp;nbsp;read&amp;nbsp;cached&amp;nbsp;objects.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(Exception&amp;nbsp;ex)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ex.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;finally&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(access&amp;nbsp;!=&amp;nbsp;null)&amp;nbsp;{&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Extracted&amp;nbsp;from&amp;nbsp;CacheAccess.close()&amp;nbsp;javadoc:&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;releases&amp;nbsp;the&amp;nbsp;resource&amp;nbsp;used&amp;nbsp;by&amp;nbsp;current&amp;nbsp;CacheAccess&amp;nbsp;object.&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;Application&amp;nbsp;is&amp;nbsp;required&amp;nbsp;to&amp;nbsp;make&amp;nbsp;this&amp;nbsp;call&amp;nbsp;when&amp;nbsp;it&amp;nbsp;no&amp;nbsp;longer&amp;nbsp;need&amp;nbsp;this&amp;nbsp;CacheAccess&amp;nbsp;instance.&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;object;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Concurrent access sensible applications may need read and write synchronism. Because JOC only offers write lock, I had to "force" read lock. This is the solution I found:&lt;br /&gt;&lt;br /&gt;&lt;code style="FONT-SIZE: 8pt"&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;This&amp;nbsp;method&amp;nbsp;reads&amp;nbsp;and&amp;nbsp;updates&amp;nbsp;a&amp;nbsp;cached&amp;nbsp;object&amp;nbsp;forcing&amp;nbsp;synchronizing&amp;nbsp;both&amp;nbsp;to&lt;br /&gt;&amp;nbsp;*&amp;nbsp;reading&amp;nbsp;and&amp;nbsp;writing.&lt;br /&gt;&amp;nbsp;*&amp;nbsp;If&amp;nbsp;it&amp;nbsp;is&amp;nbsp;being&amp;nbsp;executed&amp;nbsp;in&amp;nbsp;multiple&amp;nbsp;threads,&amp;nbsp;each&amp;nbsp;thread&amp;nbsp;will&amp;nbsp;only&amp;nbsp;be&amp;nbsp;able&amp;nbsp;to&lt;br /&gt;&amp;nbsp;*&amp;nbsp;read&amp;nbsp;the&amp;nbsp;object&amp;nbsp;when&amp;nbsp;another&amp;nbsp;thread&amp;nbsp;release&amp;nbsp;it's&amp;nbsp;writing&amp;nbsp;lock.&amp;nbsp;The&amp;nbsp;writing&amp;nbsp;lock&amp;nbsp;will&lt;br /&gt;&amp;nbsp;*&amp;nbsp;be&amp;nbsp;released&amp;nbsp;after&amp;nbsp;a&amp;nbsp;thread&amp;nbsp;finishes&amp;nbsp;it's&amp;nbsp;reading&amp;nbsp;and&amp;nbsp;writing.&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public&amp;nbsp;void&amp;nbsp;synchronizedReadUpdateCachedObject()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheAccess&amp;nbsp;access&amp;nbsp;=&amp;nbsp;null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access&amp;nbsp;=&amp;nbsp;CacheAccess.getAccess(&amp;quot;RemoteRegion&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access.getOwnership(&amp;quot;CachedObject&amp;quot;,&amp;nbsp;5000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object&amp;nbsp;object&amp;nbsp;=&amp;nbsp;access.get(&amp;quot;CachedObject&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(object.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object&amp;nbsp;newCachedObject&amp;nbsp;=&amp;nbsp;&amp;quot;New&amp;nbsp;Cached&amp;nbsp;Object&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;This&amp;nbsp;is&amp;nbsp;the&amp;nbsp;method&amp;nbsp;used&amp;nbsp;to&amp;nbsp;update&amp;nbsp;cached&amp;nbsp;objects.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access.replace(&amp;quot;CachedObject&amp;quot;,&amp;nbsp;newCachedObject);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access.releaseOwnership(&amp;quot;CachedObject&amp;quot;,&amp;nbsp;5000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(Exception&amp;nbsp;ex)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ex.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;finally&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(access&amp;nbsp;!=&amp;nbsp;null)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Declarative Cache:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;The JOC offers a way to configure its regions, subregions, groups and objects using XMLs. To use this feature the "preload-file" tag must be added to the javacache.xml. This tag will point to the XML with the environment definitions. More information at: &lt;a href="http://http//download.oracle.com/docs/cd/B32110_01/web.1013/b28958/joc.htm#i1085809"&gt;http://http//download.oracle.com/docs/cd/B32110_01/web.1013/b28958/joc.htm#i1085809&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;CacheWatchUtil:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;By default, the Cache Service provides the CacheWatchUtil cache monitoring utility that can display current caches in the system, display a list of cached objects, display caches' attributes, reset cache logger severity, dump cache contents to the log, and so on. It depends on the "dms"library. To execute:&lt;br /&gt;&lt;br /&gt;&lt;code style="FONT-SIZE: 8pt"&gt;java -classpath $ORACLE_HOME\lib\dms.jar;$ORACLE_HOME\javacache\lib\cache.jar oracle.ias.cache.CacheWatchUtil -config=&amp;lt;path_to_javacache.xml&amp;gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;span style="FONT-WEIGHT: bold"&gt;More Oracle Application Server 10g caches (entirely took from OC4J documentation):&lt;/span&gt; &lt;ul&gt;&lt;li&gt;Oracle Application Server Web Cache. The Web Cache sits in front of the application servers (Web servers), caching their content and providing that content to Web browsers that request it. When browsers access the Web site, they send HTTP requests to the Web Cache. The Web Cache, in turn, acts as a virtual server to the application servers. If the requested content has changed, the Web Cache retrieves the new content from the application servers.&lt;br /&gt;&lt;br /&gt;The Web Cache is an HTTP-level cache, maintained outside the application, providing fast cache operations. It is a pure, content-based cache, capable of caching static data (such as HTML, GIF, or JPEG files) or dynamic data (such as servlet or JSP results). Given that it exists as a flat content-based cache outside the application, it cannot cache objects (such as Java objects or XML DOM—Document Object Model—objects) in a structured format. In addition, it offers relatively limited postprocessing abilities on cached data.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Web Object Cache. The Web Object Cache is a Web-application-level caching facility. It is an application-level cache, embedded and maintained within a Java Web application. The Web Object Cache is a hybrid cache, both Web-based and object-based. Using the Web Object Cache, applications can cache programmatically, using application programming interface (API) calls (for servlets) or custom tag libraries (for JSPs). The Web Object Cache is generally used as a complement to the Web cache. By default, the Web Object Cache uses the Java Object Cache as its repository.&lt;br /&gt;&lt;br /&gt;A custom tag library or API enables you to define page fragment boundaries and to capture, store, reuse, process, and manage the intermediate and partial execution results of JSP pages and servlets as cached objects. Each block can produce its own resulting cache object. The cached objects can be HTML or XML text fragments, XML DOM objects, or Java serializable objects. These objects can be cached conveniently in association with HTTP semantics. Alternatively, they can be reused outside HTTP, such as in outputting cached XML objects through Simple Mail Transfer Protocol (SMTP), Java Message Service (JMS), Advanced Queueing (AQ), or Simple Object Access Protocol (SOAP).&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span style="FONT-WEIGHT: bold"&gt;References:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://download.oracle.com/docs/cd/B32110_01/web.1013/b28958/joc.htm#CHDHAAHJ"&gt;Oracle Application Server Containers for J2EE Services Guide 10g Release 3 (10.1.3)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/ias/joc/10.1.2/tutorial/index.html"&gt;Oracle Application Server 10g (10.1.2) JOC Tutorial&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/ias/joc/10.1.2/javadoc/allclasses-noframe.html"&gt;Oracle Application Server 10g (10.1.2) JOC javadoc&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-8233575562207977875?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Q9OLi58MFrc:YQqezy9C1RI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Q9OLi58MFrc:YQqezy9C1RI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Q9OLi58MFrc:YQqezy9C1RI:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Q9OLi58MFrc:YQqezy9C1RI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=Q9OLi58MFrc:YQqezy9C1RI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Q9OLi58MFrc:YQqezy9C1RI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=Q9OLi58MFrc:YQqezy9C1RI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Q9OLi58MFrc:YQqezy9C1RI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=Q9OLi58MFrc:YQqezy9C1RI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Q9OLi58MFrc:YQqezy9C1RI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=Q9OLi58MFrc:YQqezy9C1RI:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/Q9OLi58MFrc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/8233575562207977875/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=8233575562207977875" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/8233575562207977875?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/8233575562207977875?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/Q9OLi58MFrc/oracleas-java-object-cache.html" title="OracleAS Java Object  Cache" /><author><name>Fábio Saraiva de Souza</name><uri>http://www.blogger.com/profile/16902881356214004208</uri><email>fabio.saraiva@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11158110032887976596" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/04/oracleas-java-object-cache.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIBSHk_fyp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-4540631752073430833</id><published>2008-04-23T11:04:00.005-03:00</published><updated>2009-04-02T15:39:19.747-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:39:19.747-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ias" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="oracleas" /><title>Diagnostics beyond OracleAS Control Console</title><content type="html">&lt;p align="right"&gt;&lt;em&gt;by Eduardo Rodrigues&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;One of the many companies recently acquired by Oracle is a small one called "&lt;span style="font-weight:bold;"&gt;Auptyma&lt;/span&gt;", whose founder and former CEO, Mr. Virag Saksena, was previously Director of the CRM Performance Group at Oracle. It's main contribution for Oracle's fast growing product line was its "Java Application Monitor" which is now part of the "Oracle Fusion Middleware Management Packs" (that's where &lt;a target="oracle" href="http://www.auptyma.com"&gt;http://www.auptyma.com&lt;/a&gt; now takes us to) and was renamed to "Oracle Application Diagnostics for Java" or simply Oracle &lt;span style="font-weight:bold;"&gt;AD4J&lt;/span&gt; (although it's also referred as JADE as in Java Application Diagnostics Expert). Holy alphabet soup!&lt;br /&gt;&lt;br /&gt;The "new" component integrates the &lt;a target="oracle" href="http://www.oracle.com/technology/products/oem/index.html"&gt;Oracle Enterprise Manager 10g Grid Control&lt;/a&gt; suite but it also lives as a separate product, which is great, specially for us developers. It can be downloaded from &lt;a target="oracle" href="http://www.oracle.com/technology/software/products/oem/htdocs/jade.html"&gt;http://www.oracle.com/technology/software/products/oem/htdocs/jade.html&lt;/a&gt;. The installer is very small and also very easy and intuitive.&lt;br /&gt;&lt;br /&gt;AD4J may seem awkward at first, when you notice the fact that it also installs and uses the old Apache JServ and a PostgreSQL database. But it's worth it!&lt;br /&gt;&lt;br /&gt;I've tried AD4J with my OC4J 10.1.3.3 standalone and I can say it works pretty well and is certainly a much more interesting and useful diagnostics tool than OracleAS 10g Control Console with JVM metrics enabled. My only extra work was to reinstall JDK 1.5.0_14 and reconfigure OC4J to use it (I was already update 15) because it's the most recent JDK 1.5.0 update currently supported by AD4J.&lt;br /&gt;&lt;br /&gt;Its main features includes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Production diagnostics with &lt;u&gt;no application instrumentation&lt;/u&gt;, saving time in reproducing problems.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Visibility into Java activity including in-flight transactions, allowing administrators to proactively identify issues rather than diagnosing after-the-fact (application hangs, crashes, memory leaks, locks).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tracing of transactions from Java to Database and vice-versa, enabling faster resolution of problems that span different tiers.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Differential heap analysis in production applications.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Possibility to setup alerts based on configured thresholds and forward them using SNMP (which means potential integration with other enterprise monitoring products like OpenView, for instance)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;As you can see, it's a pretty interesting, yet small and simple, diagnostic and monitoring tool for Java applications. You can also check these resources for further info:&lt;ul&gt;&lt;li&gt;&lt;a target="oracle" href="http://www.oracle.com/technology/products/oem/mgmt_solutions/apm.html"&gt;Oracle Enterprise Manager 10g Grid Control - Application Performance Management Focus&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a target="oracle" href="http://www.ukoug.org/assets/uploads/otherpages/MarkMcGillJava15.25.pdf"&gt;an Oracle AD4J presentation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cheers and... keep reading!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-4540631752073430833?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ASGQxS7Bo0U:w6f5egyuPDA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ASGQxS7Bo0U:w6f5egyuPDA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ASGQxS7Bo0U:w6f5egyuPDA:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ASGQxS7Bo0U:w6f5egyuPDA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=ASGQxS7Bo0U:w6f5egyuPDA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ASGQxS7Bo0U:w6f5egyuPDA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=ASGQxS7Bo0U:w6f5egyuPDA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ASGQxS7Bo0U:w6f5egyuPDA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=ASGQxS7Bo0U:w6f5egyuPDA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ASGQxS7Bo0U:w6f5egyuPDA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=ASGQxS7Bo0U:w6f5egyuPDA:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/ASGQxS7Bo0U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/4540631752073430833/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=4540631752073430833" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/4540631752073430833?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/4540631752073430833?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/ASGQxS7Bo0U/diagnostics-beyond-oracleas-control.html" title="Diagnostics beyond OracleAS Control Console" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/04/diagnostics-beyond-oracleas-control.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g6cCp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-7879516099453967611</id><published>2008-04-20T14:14:00.031-03:00</published><updated>2009-04-02T15:37:56.618-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.618-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="xml" /><category scheme="http://www.blogger.com/atom/ns#" term="benchmark" /><title>A comprehensive XML processing benchmark</title><content type="html">&lt;p align="right"&gt;&lt;span style="font-style:italic;"&gt;by Eduardo Rodrigues&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;style&gt;h4 { margin-bottom: 0; font-style: italic; font-size: 110%; text-decoration: none; }&lt;/style&gt;&lt;h4&gt;Introduction&lt;/h4&gt;&lt;br /&gt;I think I've already mentioned it here but, anyway, I'm currently leading a very interesting and challenging project for a big telecom company here in Brazil. This project is basically a complete reconstruction of the current data loading system used to process, validate and load all cellphone statements, which are stored as XML files, into an Oracle CMSDK 9.0.4.2.2 repository. For those who aren't familiar, Oracle CMSDK is an old content management product, which has succeeded the older Oracle iFS (Internet File System). Because it's not an open repository, we are obligated to use its Java API if we want to programmatically load or retrieve data into or from the repository. That, obviously, prevents us from taking advantage of some of the newest tools available like &lt;a target="otn" href="http://www.oracle.com/technology/tech/xml/xmldb/index.html"&gt;Oracle's XML DB&lt;/a&gt; or even the recent &lt;a target="otn" href="http://www.oracle.com/technologies/integration/odi-suite.html"&gt;Oracle Data Integrator&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Motivation&lt;/h4&gt;&lt;br /&gt;One of our biggest concerns in this project is with the performance the new system must deliver. The SLA is really aggressive. So, we decided to make some research to find out the newest XML processing technologies available, try and compare them in order to make sure which ones would really help us in the most efficient way. The only constraints are: we must not consider any non-industry-standard solution nor any non-production (or non-stable) releases.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Test Sceneries&lt;/h4&gt;&lt;br /&gt;That said, based on research and also on previous experience, these were the technologies I've chosen to test and compare:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JAXP SAX 2 compliant parsers:&lt;br /&gt;&lt;a target="otn" href="http://www.oracle.com/technology/tech/xml/xdkhome.html"&gt;Oracle XDK parsers shipped with JDeveloper 10.1.3.3&lt;/a&gt;&lt;br /&gt;&lt;a target="apache" href="http://xerces.apache.org/xerces2-j/"&gt;Apache Xerces 2.9.1&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;StAX 1 compliant pull parsers (Streaming API for XML):&lt;br /&gt;&lt;a target="sun" href="http://stax-utils.dev.java.net/source/browse/*checkout*/stax-utils/lib/jars/jsr173_1.0_api.jar" &gt;StAX 1.0 (JSR-173) API&lt;/a&gt;&lt;br /&gt;&lt;a target="codehaus" href="http://woodstox.codehaus.org/"&gt;Codehaus Woodstox 3.2.4&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;XML binding:&lt;br /&gt;&lt;a target="sun" href="https://jaxb.dev.java.net/"&gt;Sun's JAXB 2.1.6 Reference Implementation&lt;/a&gt;&lt;br /&gt;&lt;a target="apache" href="http://commons.apache.org/digester/"&gt;Apache Commons Digester 1.8&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I've initially discarded DOM parsers based on the large average size of the XML files we'll be dealing with. We most certainly can't afford the excessive memory consumption involved. I've also discarded &lt;a target="otn" href="http://www.oracle.com/technology/tech/xml/xdk/staxpreview.html"&gt;Oracle StAX Pull Parser&lt;/a&gt;, because it was still a preview release, and J2SE 5.0 built-in XML parsers, since I know they're a proprietary implementation of Apache Xerces based on a version certainly older than 2.9.1.&lt;br /&gt;&lt;br /&gt;The test scenery designed was very simple and was intended only to measure and compare performance and memory consumption. The test job would be just to parse a real-world XML file containing 1 phone statement, retrieving and counting a predefined set of elements and attributes. In summary, rules were (for privacy's sake, real XML structure won't be revealed):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Parse all occurrences of "/root/child1/StatementPage" element&lt;/li&gt;&lt;li&gt;For each &amp;lt;StatementPage&amp;gt; do:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Store and print out value of attribute "/root/child1/StatementPage/PageInfo/@pageNumber"&lt;/li&gt;&lt;li&gt;Store and print out value of attribute "/root/child1/StatementPage/PageInfo/@customerCode"&lt;/li&gt;&lt;li&gt;Store any occurrence of element &amp;lt;ValueRecord&amp;gt;, along with all its attributes, within page's subtree&lt;/li&gt;&lt;li&gt;Print out the number of &amp;lt;ValueRecord&amp;gt; elements stored&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Print out the total number of &amp;lt;StatementPage&amp;gt; elements parsed&lt;/li&gt;&lt;li&gt;Print out the total number of &amp;lt;ValueRecord&amp;gt; elements parsed&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Also, every test should be performed for 2 different XML files: a small file (6.5MB), containing a total of 420 statement pages and 19,133 value records and a large one (143MB) with 7,104 pages and 464,357 value records.&lt;br /&gt;&lt;br /&gt;Based on the rules above, I then tested and compared the following technology sets:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Apache Digester using Apache Xerces2 SAX2 parser&lt;/li&gt;&lt;li&gt;Apache Digester using Oracle SAX2 parser&lt;/li&gt;&lt;li&gt;Sun JAXB2 using Xerces2 SAX2 parser&lt;/li&gt;&lt;li&gt;Sun JAXB2 using Oracle SAX2 parser&lt;/li&gt;&lt;li&gt;Sun JAXB2 using Woodstox StAX1 parser&lt;/li&gt;&lt;li&gt;Pure Xerces2 SAX2 parser&lt;/li&gt;&lt;li&gt;Pure Oracle SAX2 parser&lt;/li&gt;&lt;li&gt;Pure Woodstox StAX1 parser&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Based on this tutorial fragment from Sun: &lt;a target="sun" href="http://java.sun.com/webservices/docs/1.6/tutorial/doc/SJSXP3.html"&gt;http://java.sun.com/webservices/docs/1.6/tutorial/doc/SJSXP3.html&lt;/a&gt; and considering that performance is our primary goal, I've chosen StAX's cursor API (XMLStreamReader) over iterator. Still aiming for performance, all tested parsers have been configured as &lt;span style="font-weight:bold;"&gt;non-validating&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;In time; all tests were executed on a Dell Latitude D620 notebook, with an Intel Centrino DUO T2400 CPU @ 1.83GHz running on Windows XP Professional SP2 and Sun's Java VM 1.5.0_15 in &lt;u&gt;client&lt;/u&gt; mode.&lt;br /&gt;&lt;h4&gt;Results&lt;/h4&gt;&lt;br /&gt;These were the performance results obtained after parsing the small XML file (for obvious reasons, I decided to measure heap usage only when the large file was parsed):&lt;br /&gt;&lt;br /&gt;&lt;a target="chart" title="Performance results for small XML file" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F7mwJPejsqM/SA1kHIZ62DI/AAAAAAAAFuM/-7lD1rjLrZE/s1600-h/image001.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center; cursor:pointer;" src="http://2.bp.blogspot.com/_F7mwJPejsqM/SA1kHIZ62DI/AAAAAAAAFuM/-7lD1rjLrZE/s400/image001.gif" border="0" alt="Performance results for small XML file" id="BLOGGER_PHOTO_ID_5191905758429239282"/&gt;&lt;/a&gt;&lt;br /&gt;As you can see, Apache Digester's performance was extremely and surprisingly poor despite all my efforts to improve it. So, I had no other choice than to discard it for next tests with the large XML file, from which the results are presented bellow:&lt;br /&gt;&lt;br /&gt;&lt;a target="chart" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F7mwJPejsqM/SA1kHIZ62EI/AAAAAAAAFuU/Bksh-sou3tM/s1600-h/image002.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_F7mwJPejsqM/SA1kHIZ62EI/AAAAAAAAFuU/Bksh-sou3tM/s400/image002.gif" border="0" alt="Performance results for large XML file" id="BLOGGER_PHOTO_ID_5191906767746553858" /&gt;&lt;/a&gt;&lt;br /&gt;Notice that the tendency toward a better performance when &amp;lt;!DOCTYPE&amp;gt; tag is removed from the XML document has been clearly confirmed here.&lt;br /&gt;&lt;br /&gt;As for memory allocation comparison, I've once again narrowed the tests only to the worst case from performance tests above: large XML file including &amp;lt;!DOCTYPE&amp;gt; tag. The results obtained from JDev's memory profiler were:&lt;br /&gt;&lt;br /&gt;&lt;a target="chart" title="Memory allocation for large XML file" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F7mwJPejsqM/SA1bs4Z62BI/AAAAAAAAFt8/HOtWPY17zYw/s1600-h/image003.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_F7mwJPejsqM/SA1bs4Z62BI/AAAAAAAAFt8/HOtWPY17zYw/s400/image003.gif" border="0" alt="Memory allocation for large XML file" id="BLOGGER_PHOTO_ID_5191906772041521170" /&gt;&lt;/a&gt;&lt;br /&gt;Another interesting information we can extract from these tests is how much XML binding represents in terms of overhead when compared to a straight parser:&lt;br /&gt;&lt;br /&gt;&lt;a title="Overhead charts" target="chart" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F7mwJPejsqM/SA306YZ62II/AAAAAAAAFvs/Es7kSYq4VtA/s1600-h/image004.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_F7mwJPejsqM/SA306YZ62II/AAAAAAAAFvs/Es7kSYq4VtA/s400/image004.gif" border="0" alt="Overhead charts" id="BLOGGER_PHOTO_ID_5192075229248804994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Conclusion&lt;/h4&gt;&lt;br /&gt;After a careful and thorough revision and confirmation of all results obtained from the tests described here, I tend to recommend a mixed solution. Considering its near 12MB/s throughput verified here, I'd certainly choose pure Woodstox StAX parser every time I'll have to deal with medium to large XML sources but, for convenience,  I'd also choose JAXB 2 whenever there's a XML schema available to compile its classes from and the size of the source XML is not a concern.&lt;br /&gt;&lt;br /&gt;As for complexity, I really can't say that any one of the tested technologies was found considerably more complex to implement than the others. In fact, I don't think this would be an issue for anybody with an average experience with XML processing.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Important Note&lt;/h4&gt;&lt;br /&gt;Just for curiosity, I've also tested &lt;a target="codehaus" href="http://staxmate.codehaus.org/"&gt;Codehaus StaxMate 1.1&lt;/a&gt; along with Woodstox StAX parser. It's a helper library built on top of StAX in order to create an easier to use abstraction layer for StAX cursor API. I can confirm the implementor's affirmation that StaxMate shouldn't represent any significant overhead for performance. In fact, performance results were identical when compared to pure Woodstox StAX parsing the large XML file. I can also say that it really made my job pretty easier. The only reason I won't consider StaxMate is that it depends on a StAX 1.0 API non-standard extension which is being called &lt;span style="font-weight:bold;"&gt;"&lt;a target="codehaus" href="http://woodstox.codehaus.org/Stax2"&gt;StAX2&lt;/a&gt;"&lt;/span&gt; by guys at Codehaus.&lt;br /&gt;&lt;br /&gt;That's all for now.&lt;br /&gt;&lt;br /&gt;Enjoy and... keep reading!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-7879516099453967611?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=e1c-BvHYPrY:0G3vanRAwSc:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=e1c-BvHYPrY:0G3vanRAwSc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=e1c-BvHYPrY:0G3vanRAwSc:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=e1c-BvHYPrY:0G3vanRAwSc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=e1c-BvHYPrY:0G3vanRAwSc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=e1c-BvHYPrY:0G3vanRAwSc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=e1c-BvHYPrY:0G3vanRAwSc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=e1c-BvHYPrY:0G3vanRAwSc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=e1c-BvHYPrY:0G3vanRAwSc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=e1c-BvHYPrY:0G3vanRAwSc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=e1c-BvHYPrY:0G3vanRAwSc:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/e1c-BvHYPrY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/7879516099453967611/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=7879516099453967611" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/7879516099453967611?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/7879516099453967611?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/e1c-BvHYPrY/comprehensive-xml-processing-benchmark.html" title="A comprehensive XML processing benchmark" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_F7mwJPejsqM/SA1kHIZ62DI/AAAAAAAAFuM/-7lD1rjLrZE/s72-c/image001.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/04/comprehensive-xml-processing-benchmark.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g6cCp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-6381237264286205744</id><published>2008-04-19T17:53:00.003-03:00</published><updated>2009-04-02T15:37:56.618-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.618-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><title>Fixed blog's appearance on IE6</title><content type="html">Great news folks!&lt;br /&gt;&lt;br /&gt;We've just fixed our blog's template so it'll be displayed 100% correctly on Internet Explorer 6 browser. Now, we expect this blog to render identically on both Internet Explorer and Firefox (hopefully on all other browsers too).&lt;br /&gt;&lt;br /&gt;Please, let us know if there's still any visualization issues.&lt;br /&gt;&lt;br /&gt;Cheers and... keep reading!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-6381237264286205744?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=m9hXeEfmi-c:xREXtB8Brdw:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=m9hXeEfmi-c:xREXtB8Brdw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=m9hXeEfmi-c:xREXtB8Brdw:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=m9hXeEfmi-c:xREXtB8Brdw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=m9hXeEfmi-c:xREXtB8Brdw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=m9hXeEfmi-c:xREXtB8Brdw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=m9hXeEfmi-c:xREXtB8Brdw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=m9hXeEfmi-c:xREXtB8Brdw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=m9hXeEfmi-c:xREXtB8Brdw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=m9hXeEfmi-c:xREXtB8Brdw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=m9hXeEfmi-c:xREXtB8Brdw:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/m9hXeEfmi-c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/6381237264286205744/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=6381237264286205744" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/6381237264286205744?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/6381237264286205744?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/m9hXeEfmi-c/fixed-blogs-appearance-on-ie6.html" title="Fixed blog's appearance on IE6" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/04/fixed-blogs-appearance-on-ie6.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g6cCp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-4394539543259918859</id><published>2008-04-16T09:58:00.004-03:00</published><updated>2009-04-02T15:37:56.618-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.618-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="curiosities" /><category scheme="http://www.blogger.com/atom/ns#" term="jdeveloper" /><title>Is there a cook in JDev's team?</title><content type="html">This week I found something at least very curious when I launched my JDeveloper 10.1.3.3 as I do almost every morning. This was the "Tip of the Day" it showed me:&lt;br /&gt;&lt;br /&gt;&lt;img align="absmiddle" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_F7mwJPejsqM/SAX51U-gu_I/AAAAAAAAFsk/TMRShLCX8R4/s400/jdev+tip.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5189828840173648882"/&gt;&lt;br /&gt;&lt;br /&gt;Well, I don't know what this means but, anyway, here is a full recipe, just in case: &lt;a  target="recipe" href="http://www.foodnetwork.com/food/recipes/recipe/0,1977,FOOD_9936_15602,00.html"&gt;http://www.foodnetwork.com/food/recipes/recipe/0,1977,FOOD_9936_15602,00.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-4394539543259918859?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NnoBIEM8umU:JkLA3MdNXNo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NnoBIEM8umU:JkLA3MdNXNo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NnoBIEM8umU:JkLA3MdNXNo:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NnoBIEM8umU:JkLA3MdNXNo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=NnoBIEM8umU:JkLA3MdNXNo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NnoBIEM8umU:JkLA3MdNXNo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=NnoBIEM8umU:JkLA3MdNXNo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NnoBIEM8umU:JkLA3MdNXNo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=NnoBIEM8umU:JkLA3MdNXNo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NnoBIEM8umU:JkLA3MdNXNo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NnoBIEM8umU:JkLA3MdNXNo:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/NnoBIEM8umU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/4394539543259918859/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=4394539543259918859" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/4394539543259918859?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/4394539543259918859?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/NnoBIEM8umU/is-there-cook-in-jdevs-team.html" title="Is there a cook in JDev's team?" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_F7mwJPejsqM/SAX51U-gu_I/AAAAAAAAFsk/TMRShLCX8R4/s72-c/jdev+tip.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/04/is-there-cook-in-jdevs-team.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g6cCp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-1942898758588604104</id><published>2008-03-31T17:33:00.021-03:00</published><updated>2009-04-02T15:37:56.618-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.618-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="jdeveloper" /><title>Using FindBugs in JDeveloper 10g</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Fábio Souza&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://findbugs.sourceforge.net/" target="findbugs" title="FindBugs Logo"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://findbugs.sourceforge.net/buggy-sm.png" alt="FindBugs Logo" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;These days I've been looking for a good way to incorporate &lt;a href="http://findbugs.sourceforge.net/" target="findbugs"&gt;FindBugs&lt;sup&gt;&lt;small&gt;TM&lt;/small&gt;&lt;/sup&gt;&lt;/a&gt; within my JDeveloper 10g and I couldn't find anything about it on the net. I talked with Eduardo and we both thought it would be a good idea to configure FindBugs as a JDeveloper External Tool (and it is indeed).&lt;br /&gt;&lt;br /&gt;Ok, before I start listing the steps to do it, I must say I'm pretty much aware of the fact that you will probably notice that I'm using Eduardo's JAXB 2.0 configuration steps listed on his previous post "&lt;a href="http://java2go.blogspot.com/2008/01/jaxb-10-vs-20-in-jdeveloper-10g.html"&gt;JAXB 1.0 vs. 2.0 in JDeveloper 10g&lt;/a&gt;". Well... what can I say? I am a CTRL+C/CTRL+V addicted and I just can't help it! :D&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Click the menu item "Tools -&gt; External Tools..."&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Press the "New..." button to start the "Create External Tool" wizard&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Select "External Program" as the "Tool Type" and press "Next"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fill the 3 displayed fields as follows:&lt;/li&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Program Executable:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;full path to the "&lt;span style="font-weight: bold;"&gt;java.exe&lt;/span&gt;" from your preferred JAVA_HOME (must be Java 5.0 or greater)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Arguments:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;-Dfindbugs.home=. -Xmx256m -jar lib\findbugs.jar -sourcepath "${project.first.sourcepath}" -auxclasspath "${project.classpath}" -html -output "${project.dir}\${file.name.no.ext}.findbugs.html" "${project.outputdirectory}" "${project.outputdirectory}"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The arguments above will be passed to "java.exe". Notice that we're bypassing "&lt;span style="font-weight: bold;"&gt;findbugs.bat&lt;/span&gt;" and executing the FindBugs JAR file directly. We must do this way because the batch file requires the classpath passed after "&lt;span style="font-weight: bold;"&gt;-auxclasspath&lt;/span&gt;" to be enclosed in double quotes (&lt;span style="font-weight: bold;"&gt;"&lt;/span&gt;) and the macro "&lt;span style="font-weight: bold;"&gt;${project.classpath}&lt;/span&gt;" will match that requirement only when there's at least one path including one ore more blank spaces in its directories names.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Run Directory:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;full path where FindBugs is installed.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;li&gt;Press "Next" to advance to "Display" step and fill the 3 fields as you like. I suggest the following:&lt;/li&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Caption for Menu Items:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;FindBugs&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;ToolTip Text:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Run FindBugs on your project.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Icon location:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download and configure this one -&gt; &lt;img style="border: thin dotted ; cursor: pointer;" src="http://3.bp.blogspot.com/_F7mwJPejsqM/R_GZFrj98aI/AAAAAAAAFmA/vam3nDCWsgM/s200/buggy-sm-icon.png" alt="FingBugs icon" title="FingBugs icon" id="BLOGGER_PHOTO_ID_5184092968952132002" align="absmiddle" /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Press "Next" to advance to "Integration" step where I recommend selecting "Tools Menu" and "Navigator Context Menu"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Press "Next" to advance to the final step "Availability". Here, you have to choose the option "When Specific File Types are Selected" and then move only the item "Java Project" from list "Available Types" to list "Selected Types"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Press "Finish" and done!&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/ol&gt;Attention! I got an error while trying to use FindBugs in my JDeveloper 10.1.3.3. When "&lt;span style="font-weight: bold;"&gt;${project.classpath}&lt;/span&gt;" is expanded after "&lt;span style="font-weight: bold;"&gt;-auxclasspath&lt;/span&gt;", it includes the Java library paths as well. But, I don't know why, the default JDeveloper's Java SE library has &lt;span style="font-weight: bold;"&gt;i18n.jar&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;sunrasign.jar&lt;/span&gt; and the "&lt;span style="font-weight: bold;"&gt;classes&lt;/span&gt;" folder included in its classpath but these three items actually don't exist, so FindBugs will abort when it tries to locate them. I had to remove these items from my JDeveloper Java SE Library classpath to solve this problem.&lt;br /&gt;&lt;br /&gt;Now it's all set to use FindBugs! Just right-click on a project in the Application Navigator and select "&lt;span style="font-weight: bold;"&gt;FindBugs&lt;/span&gt;". An HTML report will be generated in project's folder and standard output and error will be sent to JDev's Message View.&lt;br /&gt;&lt;br /&gt;Enjoy your new tool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-1942898758588604104?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=yWK0PB82chc:ckCCuhtjrgg:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=yWK0PB82chc:ckCCuhtjrgg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=yWK0PB82chc:ckCCuhtjrgg:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=yWK0PB82chc:ckCCuhtjrgg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=yWK0PB82chc:ckCCuhtjrgg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=yWK0PB82chc:ckCCuhtjrgg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=yWK0PB82chc:ckCCuhtjrgg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=yWK0PB82chc:ckCCuhtjrgg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=yWK0PB82chc:ckCCuhtjrgg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=yWK0PB82chc:ckCCuhtjrgg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=yWK0PB82chc:ckCCuhtjrgg:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/yWK0PB82chc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/1942898758588604104/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=1942898758588604104" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/1942898758588604104?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/1942898758588604104?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/yWK0PB82chc/using-findbugs-in-jdeveloper-10g.html" title="Using FindBugs in JDeveloper 10g" /><author><name>Fábio Saraiva de Souza</name><uri>http://www.blogger.com/profile/16902881356214004208</uri><email>fabio.saraiva@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="11158110032887976596" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_F7mwJPejsqM/R_GZFrj98aI/AAAAAAAAFmA/vam3nDCWsgM/s72-c/buggy-sm-icon.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/03/using-findbugs-in-jdeveloper-10g.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g6cSp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-2120569934585957046</id><published>2008-03-13T18:35:00.011-03:00</published><updated>2009-04-02T15:37:56.619-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.619-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ias" /><category scheme="http://www.blogger.com/atom/ns#" term="oracleas" /><title>Important Tip for Clustered OracleAS 10.1.3.3.0</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Eduardo Rodrigues&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;Hi everybody!&lt;br /&gt;&lt;br /&gt;Recently we've upgraded OracleAS environments in one of our biggest clients here in Brazil from version 10.1.3.0.0 to version 10.1.3.3.0. To do that, we've applied patchset #&lt;span style="font-weight:bold;"&gt;6148874&lt;/span&gt; (which can be downloaded from Oracle Metalink) carefully following all the instructions found in its installation guide. As expected, the patchset application went perfectly fine and all of our configured containers and applications were still there, up and running, and everybody was happy... until we noticed that one of our oldest and most annoying problems was still there: using ASControl to manage our clustered production environment sometimes was just impossible due to its unacceptable performance when trying to access anything in cluster topology context.&lt;br /&gt;&lt;br /&gt;Unfortunately, the only workaround we knew was to restart ASControl application in the cluster's "master node" (the node elected to run the ascontrol application). Fortunately, today I found the problem and also the solution for this situation.&lt;br /&gt;&lt;br /&gt;There's a documented bug on Metalink (bug #&lt;span style="font-weight:bold;"&gt;6601697&lt;/span&gt;) explaining that this problem is caused by the underlying RMI communication between the ASControl 10.1.3.3.0 and the other components of the cluster. ASControl uses RMI protocol to connect to other nodes, makes some request and then waits for a response. The problem is that there's no timeout for this response waiting. If one or more components are in a heavy load situation, for example, ASControl will keep waiting for their responses, which can take too long, causing the impression that ASControl stopped working.&lt;br /&gt;&lt;br /&gt;In fact, this problem is known since version 10.1.3.1.0 but it seems that patchset 10.1.3.3.0 does not include the correction as it should. So, for now, the solution is to apply the one-off patch #&lt;span style="font-weight:bold;"&gt;6124143&lt;/span&gt;, also found on Metalink. This patch is originally targeted to OracleAS 10.1.3.1.0 but, as written in bug #6601697, it's ok to apply it on version 10.1.3.3.0 though. We just have to follow these simple instructions, found in the bug, before actually applying it:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Edit the patch file etc/config/actions and replace 10.1.3.1.0 by 10.1.3.3.0&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Edit etc/config/inventory and replace 10.1.3.1.0 by 10.1.3.3.0&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Once it's successfully applied, we must use ASControl to navigate to the OC4J instance where ascontrol application is running (typically the "home" instance). Click on Administration -&gt; Server Properties -&gt; Command Line Options -&gt; Start-parameters: Java Options and add "-Drmi.client.connection.timeout=&lt;span style="font-weight:bold;"&gt;X&lt;/span&gt;", where "&lt;span style="font-weight:bold;"&gt;X&lt;/span&gt;" should be the number of &lt;span style="font-weight:bold;"&gt;seconds&lt;/span&gt; to wait for a RMI response before timeout. The bug suggests &lt;span style="font-weight:bold;"&gt;5 seconds&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;We've successfully applied this one-off patch in our OracleAS 10.1.3.3.0 environment and, until now, it seems to have solved the problem.&lt;br /&gt;&lt;br /&gt;I feel this might be a problem faced by many other OracleAS 10.1.3 users so I hope this post can help them.&lt;br /&gt;&lt;br /&gt;Cheers and... keep reading!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-2120569934585957046?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=N9iUNJ_mCHw:n0-MgU3k0lc:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=N9iUNJ_mCHw:n0-MgU3k0lc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=N9iUNJ_mCHw:n0-MgU3k0lc:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=N9iUNJ_mCHw:n0-MgU3k0lc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=N9iUNJ_mCHw:n0-MgU3k0lc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=N9iUNJ_mCHw:n0-MgU3k0lc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=N9iUNJ_mCHw:n0-MgU3k0lc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=N9iUNJ_mCHw:n0-MgU3k0lc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=N9iUNJ_mCHw:n0-MgU3k0lc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=N9iUNJ_mCHw:n0-MgU3k0lc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=N9iUNJ_mCHw:n0-MgU3k0lc:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/N9iUNJ_mCHw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/2120569934585957046/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=2120569934585957046" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/2120569934585957046?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/2120569934585957046?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/N9iUNJ_mCHw/important-tip-for-clustered-oracleas.html" title="Important Tip for Clustered OracleAS 10.1.3.3.0" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/03/important-tip-for-clustered-oracleas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g6cSp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-1061926517382251348</id><published>2008-02-01T17:00:00.000-02:00</published><updated>2009-04-02T15:37:56.619-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.619-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><title>SCJP Group on LinkedIn</title><content type="html">This one is for all Sun Certified Java Programmers out there.&lt;br /&gt;&lt;br /&gt;You’re all invited to join the SCJP Group on &lt;a target="linkedin" href="http://www.linkedin.com"&gt;LinkedIn&lt;/a&gt;. Joining will allow you to find and contact other certified members on LinkedIn. The goal of this group is to help members:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Reach other certified programmers&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Accelerate careers/business through referrals from group members&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Know more than a name – view rich professional profiles from fellow SCJP Group members&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a target="linkedin" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.linkedin.com/e/gis/53572/4C904973B936"&gt;&lt;img align="absmiddle" style="cursor:pointer; cursor:hand;" src="http://media.linkedin.com/media/p/2/000/004/262/0bb9e94.png" border="0" alt="SCJP Group Logo"/&gt;Click here to join now!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hope to see you in the group soon.&lt;br /&gt;&lt;br /&gt;Cheers and keep reading...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-1061926517382251348?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=QiTBLIFltjc:EG6nxco5yJE:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=QiTBLIFltjc:EG6nxco5yJE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=QiTBLIFltjc:EG6nxco5yJE:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=QiTBLIFltjc:EG6nxco5yJE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=QiTBLIFltjc:EG6nxco5yJE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=QiTBLIFltjc:EG6nxco5yJE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=QiTBLIFltjc:EG6nxco5yJE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=QiTBLIFltjc:EG6nxco5yJE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=QiTBLIFltjc:EG6nxco5yJE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=QiTBLIFltjc:EG6nxco5yJE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=QiTBLIFltjc:EG6nxco5yJE:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/QiTBLIFltjc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/1061926517382251348/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=1061926517382251348" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/1061926517382251348?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/1061926517382251348?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/QiTBLIFltjc/scjp-group-on-linkedin.html" title="SCJP Group on LinkedIn" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/02/scjp-group-on-linkedin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g6cSp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-6065492121209957664</id><published>2008-01-25T14:34:00.001-02:00</published><updated>2009-04-02T15:37:56.619-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.619-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="regular expressions" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title>Regular Expressions in Oracle Database 10g</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Fábio Souza&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;Hello everybody!&lt;br /&gt;&lt;br /&gt;This is my debut post to Java 2 Go! (ironically it's not about Java) and I'm really happy for having been invited to write by Eduardo. I hope you will enjoy as much as I am!&lt;br /&gt;&lt;br /&gt;As the title says, this is a short how-to about the use of regular expressions in Oracle Database. This feature was introduced in Oracle 10g and is really helpful, useful and, better off, not too complicated. Let's take a look.&lt;br /&gt;&lt;br /&gt;There are three built-in SQL functions and one operator for working with regular expressions in Oracle 10g:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;OPERATOR:&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;REGEXP_LIKE&lt;/span&gt;&lt;br /&gt;It's used in the WHERE clause with column filtering purpose. The filter is the informed pattern.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;FUNCTIONS:&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;REGEXP_INSTR&lt;/span&gt;&lt;br /&gt;Returns the initial position where the informed pattern was found.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;REGEXP_SUBSTR&lt;/span&gt;&lt;br /&gt;Returns the result of the informed pattern application.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;REGEXP_REPLACE&lt;/span&gt;&lt;br /&gt;Replaces the informed pattern with another given string.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;NOTE:&lt;/span&gt; &lt;u&gt;pattern&lt;/u&gt; is the regular expression which is used to match specific regions of a string.&lt;br /&gt;&lt;br /&gt;This example will show only the REGEXP_REPLACE function and the intention is to return only the value of field &lt;span style="font-weight:bold;"&gt;"Login"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size:8pt"&gt;-- Description:&lt;br /&gt;-- First argument: string which the pattern will be applied to (it's possible to use a column instead).&lt;br /&gt;-- Second argument: the pattern.&lt;br /&gt;-- Third argument: new string that will replace the portion of the original string matching the given pattern.&lt;br /&gt;&lt;br /&gt;select REGEXP_REPLACE(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'ID = 13737009 - Login = T123456 - Status nonAdmin - WorkingPlace = HeadQuarter - Sector = B',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'(.+)(Login = )([^ ]+)(.+)',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'\3')&lt;br /&gt;from dual;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The pattern used above defines four groups between parenthesis:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;"(.+)" matches 1 or more characters&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"(Login = )" matches the exact substring "Login = "&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"([^ ]+)" matches 1 or more character different from " " (&lt;span style="font-style:italic;"&gt;space&lt;/span&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"(.+)" again, matches 1 or more characters&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;In our example, the result for each group above is:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;"ID = 13737009 - "&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Login = "&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"T123456"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;" - Status nonAdmin - WorkingPlace = HeadQuarter - Sector = B"&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;For the simple query above, the result of function "REGEXP_REPLACE" will be the replacement of the substring matching the given pattern with "\3". The presence of character "\" tells the function to replace "\3" with the substring matching the third group defined in the given pattern, which is "([^ ]+)". As you may notice, in this case, the given pattern matches the entire string so, at the end, the entire string will be replaced with &lt;span style="font-weight:bold;"&gt;"T123456"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Despite the beauty of this, there's one thing we should always keep in mind: &lt;span style="font-weight:bold;"&gt;performance&lt;/span&gt;. As we already know, applying functions to table columns in WHERE clauses typically makes Oracle's choice optimizer to ignore any index on that particular column which may result in a table full scan. If we're dealing with big volumes, this might be a huge concern. Thank God Oracle gives us some options like &lt;span style="font-weight:bold;font-style:italic"&gt;Partitioning&lt;/span&gt; and &lt;span style="font-weight:bold;font-style:italic"&gt;Parallel Queries&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;That's all for now. If you'd like to get further information on the subject I recommend reading this article from OTN:&lt;br /&gt;&lt;br /&gt;&lt;a target="otn" href="http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html"&gt;http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cheers! (and keep reading...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-6065492121209957664?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NFq76z1XHqo:TzgYIWAK4E0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NFq76z1XHqo:TzgYIWAK4E0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NFq76z1XHqo:TzgYIWAK4E0:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NFq76z1XHqo:TzgYIWAK4E0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=NFq76z1XHqo:TzgYIWAK4E0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NFq76z1XHqo:TzgYIWAK4E0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=NFq76z1XHqo:TzgYIWAK4E0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NFq76z1XHqo:TzgYIWAK4E0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=NFq76z1XHqo:TzgYIWAK4E0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NFq76z1XHqo:TzgYIWAK4E0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=NFq76z1XHqo:TzgYIWAK4E0:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/NFq76z1XHqo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/6065492121209957664/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=6065492121209957664" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/6065492121209957664?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/6065492121209957664?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/NFq76z1XHqo/regular-expressions-in-oracle-database.html" title="Regular Expressions in Oracle Database 10g" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/01/regular-expressions-in-oracle-database.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g6cSp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-1887616644023242070</id><published>2008-01-25T12:44:00.001-02:00</published><updated>2009-04-02T15:37:56.619-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.619-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><title>New "acquisition"</title><content type="html">Hi folks!&lt;br /&gt;&lt;br /&gt;It's with the greatest satisfaction that I welcome the blog's most recent "acquisition": the Oracle consultant &lt;span style="font-weight:bold;"&gt;Fábio Saraiva de Souza&lt;/span&gt;. &lt;a href="http://www.blogger.com/profile/16902881356214004208"&gt;You may check his profile here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Fábio is a good friend with whom I've had the opportunity to work for almost a whole year in my last project. As you will certainly notice, Fábio is one of that curious guys that are never satisfied until they really understand things to their deepest details.&lt;br /&gt;&lt;br /&gt;Welcome Fábio! We'll be willing to read from you soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-1887616644023242070?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=mw72AxoPZ58:QdcxgDwHHu8:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=mw72AxoPZ58:QdcxgDwHHu8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=mw72AxoPZ58:QdcxgDwHHu8:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=mw72AxoPZ58:QdcxgDwHHu8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=mw72AxoPZ58:QdcxgDwHHu8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=mw72AxoPZ58:QdcxgDwHHu8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=mw72AxoPZ58:QdcxgDwHHu8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=mw72AxoPZ58:QdcxgDwHHu8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=mw72AxoPZ58:QdcxgDwHHu8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=mw72AxoPZ58:QdcxgDwHHu8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=mw72AxoPZ58:QdcxgDwHHu8:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/mw72AxoPZ58" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/1887616644023242070/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=1887616644023242070" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/1887616644023242070?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/1887616644023242070?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/mw72AxoPZ58/new-acquisition.html" title="New &amp;quot;acquisition&amp;quot;" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/01/new-acquisition.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g5eCp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-4360459644121413137</id><published>2008-01-22T14:40:00.000-02:00</published><updated>2009-04-02T15:37:56.620-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.620-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jdeveloper" /><title>My favorite JDeveloper extensions</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Eduardo Rodrigues&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;Hi everybody!&lt;br /&gt;&lt;br /&gt;You must have noticed that JDeveloper may be boosted by a great number of extensions provided either by Oracle itself or by an open source and partners community. If you did not noticed that yet, then you certainly should do so. Even if it's just for curiosity, you may check a complete list of all extensions available selecting the menu item &lt;span style="font-weight:bold;"&gt;"Help -&gt; Check for Updates..."&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It's important to say that for this feature to work properly, your JDev's web proxy configuration must be correct. So it's worth to take a look at this first by selecting menu item &lt;span style="font-weight:bold;"&gt;"Tools -&gt; Preferences..."&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" title="Click to enlarge" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F7mwJPejsqM/R5YiL4xh-kI/AAAAAAAAFAA/r8woMLoxFyI/s1600-h/pic02.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_F7mwJPejsqM/R5YiL4xh-kI/AAAAAAAAFAA/r8woMLoxFyI/s400/pic02.gif" border="0" alt="Web proxy configuration" id="BLOGGER_PHOTO_ID_5158348010813520450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now that we're all set, let's go back to the "Help -&gt; Check for Updates..." thing.&lt;br /&gt;&lt;br /&gt;On the wizard's first step you should make the following selection:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" title="Click to enlarge" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F7mwJPejsqM/R5Ye6Yxh-jI/AAAAAAAAE_4/qyMhGTDjdU0/s1600-h/pic01.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_F7mwJPejsqM/R5Ye6Yxh-jI/AAAAAAAAE_4/qyMhGTDjdU0/s400/pic01.gif" border="0" alt="JDeveloper Update Centers selection" id="BLOGGER_PHOTO_ID_5158344411630926386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After pressing "Next" you'll be presented to a list of available extensions from the update centers selected before. Browse the list and see how many interesting and useful stuff you can add to your JDeveloper environment. All you have to do is to select the extensions you like and proceed with the wizard. After restarting JDeveloper will automatically install all downloaded extensions. I recommend that you always restart JDeveloper immediately when prompted to.&lt;br /&gt;&lt;br /&gt;An alternative way to browse and download these extensions outside JDeveloper is to visit the following URLs:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a target="otn" href="http://www.oracle.com/technology/products/jdev/101/update/center.xml"&gt;http://www.oracle.com/technology/products/jdev/101/update/center.xml&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a  target="otn" href="http://www.oracle.com/technology/products/jdev/101/update/exchange.xml"&gt;http://www.oracle.com/technology/products/jdev/101/update/exchange.xml&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;In this case, to install them, use the feature &lt;span style="font-weight:bold;"&gt;"Install From Local File"&lt;/span&gt; in "Help -&gt; Check for Updates..." wizard:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" title="Click to enlarge" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F7mwJPejsqM/R5Y9VIxh-lI/AAAAAAAAFAI/Cp2Jv8H301s/s1600-h/pic03.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_F7mwJPejsqM/R5Y9VIxh-lI/AAAAAAAAFAI/Cp2Jv8H301s/s400/pic03.gif" border="0" alt="Installing an update from local file" id="BLOGGER_PHOTO_ID_5158377856541260370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a suggestion, here is a list of my favorite extensions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;MUST HAVE&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Oracle ADF SRDemo Applications&lt;br /&gt;Great way to learn ADF by example. Comes in 2 flavors: EJB 3.0 + Toplink Essentials JPA or ADF BC&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Oracle ADF Developer's Guides Update&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JDeveloper Spring 2.5 Support&lt;br /&gt;Adds support for creating and editing Spring 2.5 bean defintions. This addin will create the Spring 2.5 library and register the relevant XSDs and DTDs with the IDE to provide a productive editing experience for Spring definitions&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Struts Documentation 10.1.3&lt;br /&gt;Complete Javadoc for Struts&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Variable Highlighter Extension&lt;br /&gt;Dynamically highlights variables as you click on them&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Subversion VCS Extension&lt;br /&gt;Much better version controller than plain CVS&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;USEFUL&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;JUnit Integration Extensions&lt;br /&gt;Various extensions providing integrated support for JUnit&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Oracle JHeadstart Evaluation Version&lt;br /&gt;Oracle JHeadstart is a productivity toolkit that works on top of Oracle ADF. Using ADF Faces as View, JSF as Controller and ADF Business Components as Business Service, JHeadstart generates sophisticated ADF web applications using simple metadata. Generated features include wizards, shuttles, trees, list of values, multi-row insert/update/delete, advanced and quick search capabilities, file upload/download, deeplinking, conditionally dependent items, dynamic breadcrumbs and more.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Copy As HTML&lt;br /&gt;Great extension that makes the task of copying bits of source code to blogs much easier&lt;/li&gt;&lt;br /&gt;&lt;li&gt;XPath Search Extension&lt;br /&gt;Best way to search inside XML documents&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Make Read-only Files Writable&lt;/li&gt;&lt;br /&gt;&lt;li&gt;GWT Developer&lt;br /&gt;Provides visual editing environment to help with developing with the Google Web Toolkit (GWT)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;PMD JDeveloper Extension&lt;br /&gt;Provides integrated support for &lt;a target="sourceforge" href="http://sourceforge.net/projects/pmd/"&gt;PMD 4.1&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove Workspaces and Projects&lt;br /&gt;Adds a context menu option that allows the deletion of projects and workspaces and of their sub-contents, quick and easy.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Additional Skins for ADF Faces&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Zipper&lt;br /&gt;This extension provides a simple ZIP feature for applications and projects&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;On the other hand, the extension &lt;span style="font-weight:bold;"&gt;"JDeveloper Keep Resident (for Windows only)"&lt;/span&gt; is definitely one that you should &lt;u&gt;&lt;span style="font-weight:bold;"&gt;NOT&lt;/span&gt;&lt;/u&gt; use.   That's an experimental extension, works only on Windows and the very same effect may be achieved in a much better way which has already been explained in a &lt;a href="http://java2go.blogspot.com/2007/06/jdeveloper-tips-2-fine-tuning.html"&gt;previous post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Finally, if you want to contribute with your own great JDeveloper extension, you may install &lt;span style="font-weight:bold;"&gt;"JDeveloper Extensions SDK"&lt;/span&gt; which is an extension itself and includes documentation and sample extensions.&lt;br /&gt;&lt;br /&gt;That's all for now.&lt;br /&gt;&lt;br /&gt;Cheers and... keep reading!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-4360459644121413137?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=4xhHJgOTxNk:iZL4Ybu0UsQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=4xhHJgOTxNk:iZL4Ybu0UsQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=4xhHJgOTxNk:iZL4Ybu0UsQ:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=4xhHJgOTxNk:iZL4Ybu0UsQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=4xhHJgOTxNk:iZL4Ybu0UsQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=4xhHJgOTxNk:iZL4Ybu0UsQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=4xhHJgOTxNk:iZL4Ybu0UsQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=4xhHJgOTxNk:iZL4Ybu0UsQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=4xhHJgOTxNk:iZL4Ybu0UsQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=4xhHJgOTxNk:iZL4Ybu0UsQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=4xhHJgOTxNk:iZL4Ybu0UsQ:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/4xhHJgOTxNk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/4360459644121413137/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=4360459644121413137" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/4360459644121413137?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/4360459644121413137?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/4xhHJgOTxNk/my-favorite-jdeveloper-extensions.html" title="My favorite JDeveloper extensions" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_F7mwJPejsqM/R5YiL4xh-kI/AAAAAAAAFAA/r8woMLoxFyI/s72-c/pic02.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/01/my-favorite-jdeveloper-extensions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g5eCp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-7359081180571309215</id><published>2008-01-10T14:19:00.000-02:00</published><updated>2009-04-02T15:37:56.620-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.620-03:00</app:edited><title>I've got tagged too!</title><content type="html">I got tagged in the &lt;a target="blogs" href="http://oracleappslab.com/2008/01/07/orablog-tag/"&gt;Oracle Blogsphere tag game&lt;/a&gt; by &lt;a target="blogs" href="http://oracleradio.blogspot.com/2008/01/mis-8-cosasel-juego-de-la-blogosfera-de.html"&gt;Juan Camilo Ruiz&lt;/a&gt; so now it's my turn. 8 things you didn't know about me:&lt;br /&gt;&lt;ol style="list-style-type: decimal; background: none"&gt;&lt;li&gt;I got married for the 2nd time on Sep. 7th, 2007 with the most beautiful and amazing woman I've ever met in my entire life and her name is Heloisa. I hope this one is forever.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;My first computer ever was a TK-85 based on Sinclair architecture with a Z80 CPU and 16KB of RAM. I was 12 years-old and my first Basic program was:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;10 PRINT "Eduardo ";&lt;br /&gt;20 GOTO 10;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Cooooool!!!  =)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I totally hate traffic jams! That's why I could never live in São Paulo, Brazil. I would certainly die from a heart attack really soon.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If I could choose a place to live here in Brazil, I'd choose &lt;a target="maps" href="http://maps.google.com.br/maps?f=q&amp;hl=pt-BR&amp;geocode=&amp;q=Florian%C3%B3polis,+Brazil&amp;ie=UTF8&amp;z=10&amp;om=1"&gt;Florianópolis (&lt;span style="font-style:italic;"&gt;The Island of Magic&lt;/span&gt;)&lt;/a&gt;. And not only because my wife was born there.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When I was a child, I suffered a lot from bronchitis. Doctors recommended swimming as a long term treatment so my parents forced me to attend swimming classes, which I used to hate. Now I'm 100% cured and love to swim. Kids...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;My father is a presbyterian minister just like my grandfather was too. My grandfather, Rev. Zaqueu Ribeiro, founded a &lt;a target=_blank href="http://www.iptijuca.org.br/"&gt;presbyterian church in Rio de Janeiro, in a neighborhood called "Tijuca"&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;For almost a half of my life, I spent practically every holiday at my family's country house in a very small city called Eng. Paulo de Frontin near Rio de Janeiro. Unfortunately, after my grandfather's death, my family ended up selling the house. Too bad.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I've always wanted to ride a jet ski but never got the chance to do it :(&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Well, let me see who I'm going to tag next...&lt;br /&gt;&lt;br /&gt;&lt;a target="blogs" href="http://buttso.blogspot.com/"&gt;Steve Button&lt;/a&gt;, &lt;a target="blogs" href="http://stock-buster.blogspot.com"&gt;Carlos Rubinstein&lt;/a&gt;, &lt;a target="blogs" href="http://debupanda.blogspot.com/"&gt;Debu Panda&lt;/a&gt;, &lt;a target="blogs" href="http://mike-lehmann.blogspot.com/"&gt;Mike Lehmann&lt;/a&gt;, &lt;a target="blogs" href="http://frank.thepeninsulasedge.com/"&gt;Frank Nimphius&lt;/a&gt;, &lt;a target="blogs" href="http://blogs.oracle.com/olaf/"&gt;Olaf Heimburger&lt;/a&gt;, &lt;a target="blogs" href="http://radio.weblogs.com/0118231/"&gt;Steve Muench&lt;/a&gt; and &lt;a target="blogs" href="http://oracledmt.blogspot.com/"&gt;Marcos Campos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Come on guys! Let's play!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-7359081180571309215?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=7WL-JKW81BE:Ba5moWADHaE:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=7WL-JKW81BE:Ba5moWADHaE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=7WL-JKW81BE:Ba5moWADHaE:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=7WL-JKW81BE:Ba5moWADHaE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=7WL-JKW81BE:Ba5moWADHaE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=7WL-JKW81BE:Ba5moWADHaE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=7WL-JKW81BE:Ba5moWADHaE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=7WL-JKW81BE:Ba5moWADHaE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=7WL-JKW81BE:Ba5moWADHaE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=7WL-JKW81BE:Ba5moWADHaE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=7WL-JKW81BE:Ba5moWADHaE:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/7WL-JKW81BE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/7359081180571309215/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=7359081180571309215" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/7359081180571309215?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/7359081180571309215?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/7WL-JKW81BE/ive-got-tagged-too.html" title="I've got tagged too!" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/01/ive-got-tagged-too.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcCQnY5eCp7ImA9WxJVEU8.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-435307424825908429</id><published>2008-01-08T11:54:00.004-02:00</published><updated>2009-06-27T15:07:43.820-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-27T15:07:43.820-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="xml" /><category scheme="http://www.blogger.com/atom/ns#" term="jaxb" /><category scheme="http://www.blogger.com/atom/ns#" term="jdeveloper" /><title>JAXB 1.0 vs. 2.0 in JDeveloper 10g</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Eduardo Rodrigues&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-left: 10px; margin-top: 0px; margin-bottom: 10px; border: solid; border-width: 1pt; float: right; width: 300px; font-size: 8pt;"&gt;&lt;ul&gt;&lt;li&gt;if you already know JDeveloper's built-in JAXB compiler you can &lt;a href="#JAXB2"&gt;jump here&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Click on pictures to enlarge them&lt;/li&gt;&lt;li&gt;&lt;a href="http://sites.google.com/site/errodrigues/Home/JAXB_Test_JDeveloper_10.1.3.3.zip?attredirects=0"&gt;Download this complete test case here&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;Ok, I know JDeveloper 10g already comes with an embedded JAXB compiler which can be found in menu "Tools -&gt; JAXB Compilation...". The only problem with this compiler is that it's a JAXB 1.0 implementation and, believe me, the differences are simply HUGE when compared to it's successor, JAXB 2.0. And all for the very best. To prove my point, let's go through a simple example comparing both JAXB versions.&lt;br /&gt;&lt;br /&gt;First of all, let's create a new application in JDeveloper with one empty project called "JAXB 1.0" adding only "XML" to its technology scope:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F7mwJPejsqM/R4PYc4xh-XI/AAAAAAAAE94/dQddm50txDY/s1600-h/JAXB_pic01.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" title="Click to enlarge" src="http://2.bp.blogspot.com/_F7mwJPejsqM/R4PYc4xh-XI/AAAAAAAAE94/dQddm50txDY/s400/JAXB_pic01.gif" border="0" alt="Click to enlarge" id="BLOGGER_PHOTO_ID_5153200389430049138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We must have a valid DTD or XML Schema so the JAXB compiler can work. Let's consider this small and simple XML Schema borrowed from a &lt;a target="w3c" href="http://www.w3schools.com/schema/schema_example.asp"&gt;W3C tutorial&lt;/a&gt;:&lt;br /&gt;&lt;code style="font-size:8pt;"&gt;&lt;br /&gt;&amp;lt;?xml&amp;nbsp;version=&amp;quot;1.0&amp;quot;&amp;nbsp;encoding=&amp;quot;ISO-8859-1&amp;quot;&amp;nbsp;?&amp;gt;&lt;br /&gt;&amp;lt;xs:schema&amp;nbsp;xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--&amp;nbsp;definition&amp;nbsp;of&amp;nbsp;simple&amp;nbsp;elements&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;orderperson&amp;quot;&amp;nbsp;type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;name&amp;quot;&amp;nbsp;type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;address&amp;quot;&amp;nbsp;type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;city&amp;quot;&amp;nbsp;type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;country&amp;quot;&amp;nbsp;type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;title&amp;quot;&amp;nbsp;type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;note&amp;quot;&amp;nbsp;type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;quantity&amp;quot;&amp;nbsp;type=&amp;quot;xs:positiveInteger&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;price&amp;quot;&amp;nbsp;type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--&amp;nbsp;definition&amp;nbsp;of&amp;nbsp;attributes&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;lt;xs:attribute&amp;nbsp;name=&amp;quot;orderid&amp;quot;&amp;nbsp;type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--&amp;nbsp;definition&amp;nbsp;of&amp;nbsp;complex&amp;nbsp;elements&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;shipto&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;xs:complexType&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;xs:sequence&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;address&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;city&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;country&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;&amp;lt;/xs:element&amp;gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;xs:complexType&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;xs:sequence&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;note&amp;quot;&amp;nbsp;minOccurs=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;quantity&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;price&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;&amp;lt;/xs:element&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xs:element&amp;nbsp;name=&amp;quot;shiporder&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;xs:complexType&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;xs:sequence&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;orderperson&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;shipto&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;ref=&amp;quot;item&amp;quot;&amp;nbsp;maxOccurs=&amp;quot;unbounded&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;xs:attribute&amp;nbsp;ref=&amp;quot;orderid&amp;quot;&amp;nbsp;use=&amp;quot;required&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;&amp;lt;/xs:element&amp;gt;&lt;br /&gt;&amp;lt;/xs:schema&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Just copy the code above to a file named &lt;span style="font-weight:bold;"&gt;"shiporder.xsd"&lt;/span&gt; in the project's root directory so it will automatically show in project's "Resources" folder:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F7mwJPejsqM/R4PfxYxh-ZI/AAAAAAAAE-I/BH6nDCGDdto/s1600-h/JAXB_pic02.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_F7mwJPejsqM/R4PfxYxh-ZI/AAAAAAAAE-I/BH6nDCGDdto/s400/JAXB_pic02.gif" border="0" title="Click to enlarge" alt="Click to enlarge" id="BLOGGER_PHOTO_ID_5153208438198761874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now select file "shiporder.xsd" in the application navigator, click the menu item "Tools -&gt; JAXB Compilation..." and fill up the pop-up shown as the screenshot bellow:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F7mwJPejsqM/R4Phu4xh-aI/AAAAAAAAE-Q/Zy1Apqun1nk/s1600-h/JAXB_pic03.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_F7mwJPejsqM/R4Phu4xh-aI/AAAAAAAAE-Q/Zy1Apqun1nk/s400/JAXB_pic03.gif" border="0" title="Click to enlarge" alt="Click to enlarge" id="BLOGGER_PHOTO_ID_5153210594272344482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After pressing the "OK" button, you should see the following scenario:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F7mwJPejsqM/R4PjAoxh-bI/AAAAAAAAE-Y/G9aAoJWo-3Y/s1600-h/JAXB_pic04.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_F7mwJPejsqM/R4PjAoxh-bI/AAAAAAAAE-Y/G9aAoJWo-3Y/s400/JAXB_pic04.gif" border="0" title="Click to enlarge" alt="Click to enlarge" id="BLOGGER_PHOTO_ID_5153211998726650290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the JAXB compiler generates a bunch of classes and interfaces reflecting the structure defined by the compiled XML Schema. If you look closer, you'll notice that some of the classes extend &lt;span style="font-weight:bold;"&gt;"oracle.xml.jaxb.JaxbNode"&lt;/span&gt; (like class &lt;span style="font-weight:bold;"&gt;ShiporderTypeImpl&lt;/span&gt;, for instance). That's because the built-in JAXB compilation feature we just showed relies on a JAXB 1.0 proprietary implementation provided by Oracle in its XML Developer Kit which comes with JDeveloper. You may get more details on this at &lt;a target="otn" href="http://www.oracle.com/technology/tech/xml/xdkhome.html"&gt;Oracle XDK Home site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Continuing with our test case, let's create a sample "testorder.xml" based on our shiporder.xsd schema:&lt;br /&gt;&lt;code style="font-size: 8pt"&gt;&lt;br /&gt;&amp;lt;?xml&amp;nbsp;version=&amp;quot;1.0&amp;quot;&amp;nbsp;encoding=&amp;quot;ISO-8859-1&amp;quot;&amp;nbsp;?&amp;gt;&lt;br /&gt;&amp;lt;shiporder&amp;nbsp;orderid=&amp;quot;0001&amp;quot;&amp;nbsp;xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&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;xsi:noNamespaceSchemaLocation=&amp;quot;shiporder.xsd&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;orderperson&amp;gt;Eduardo&amp;nbsp;Rodrigues&amp;lt;/orderperson&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;shipto&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;John&amp;nbsp;Doe&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;address&amp;gt;#100,&amp;nbsp;Oracle&amp;nbsp;Parkway&amp;lt;/address&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;city&amp;gt;Redwood&amp;nbsp;City&amp;lt;/city&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;country&amp;gt;USA&amp;lt;/country&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/shipto&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;DVD+RW&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;quantity&amp;gt;50&amp;lt;/quantity&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;price&amp;gt;.50&amp;lt;/price&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;17&amp;amp;quot;&amp;nbsp;LCD&amp;nbsp;Monitor&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;quantity&amp;gt;5&amp;lt;/quantity&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;price&amp;gt;150.00&amp;lt;/price&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;Bluetooth&amp;nbsp;Mouse&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;quantity&amp;gt;10&amp;lt;/quantity&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;price&amp;gt;40.00&amp;lt;/price&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/shiporder&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To read in and process this sample XML using the package generated by Oracle's JAXB compiler, we must use the JAXB feature called &lt;span style="font-weight:bold;"&gt;"Unmarshal"&lt;/span&gt;. To do that, I'll modify class &lt;span style="font-weight:bold;"&gt;test.jaxb1.TestJAXB1&lt;/span&gt; like this:&lt;br /&gt;&lt;code style="font-size: 8pt"&gt;&lt;br /&gt;package&amp;nbsp;test.jaxb1;&lt;br /&gt;&lt;br /&gt;import&amp;nbsp;java.io.File;&lt;br /&gt;import&amp;nbsp;java.util.List;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.JAXBContext;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.JAXBException;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.Marshaller;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.Unmarshaller;&lt;br /&gt;import&amp;nbsp;test.jaxb1.shiporder.*;&lt;br /&gt;&lt;br /&gt;public&amp;nbsp;class&amp;nbsp;TestJAXB1&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;static&amp;nbsp;JAXBContext&amp;nbsp;context&amp;nbsp;=&amp;nbsp;null;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context&amp;nbsp;=&amp;nbsp;JAXBContext.newInstance(&amp;quot;test.jaxb1.shiporder&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Unmarshaller&amp;nbsp;unmarshaller&amp;nbsp;=&amp;nbsp;context.createUnmarshaller();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Shiporder&amp;nbsp;order&amp;nbsp;=&amp;nbsp;(Shiporder)unmarshaller.unmarshal(new&amp;nbsp;File(&amp;quot;testorder.xml&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&amp;quot;Items&amp;nbsp;included&amp;nbsp;in&amp;nbsp;order&amp;nbsp;#&amp;quot;+order.getOrderid()+&amp;quot;&amp;nbsp;are:&amp;quot;);&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(ItemTypeImpl&amp;nbsp;item&amp;nbsp;:&amp;nbsp;(List&amp;lt;ItemTypeImpl&amp;gt;)order.getItem())&amp;nbsp;{&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;System.out.println(&amp;quot;\t:.&amp;nbsp;&amp;quot;+item.getTitle()+&amp;quot;&amp;nbsp;-&amp;nbsp;&amp;quot;+&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;item.getQuantity()+&amp;quot;&amp;nbsp;item(s)&amp;nbsp;at&amp;nbsp;$&amp;quot;+item.getPrice()+&amp;quot;&amp;nbsp;each&amp;quot;);&lt;br /&gt;&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;catch&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Making a long story short, the "magic" performed by the &lt;span style="font-weight:bold;"&gt;Unmarshaller&lt;/span&gt; is basically to parse the XML using the classes generated by the JAXB compiler to map its entire content into memory. It's just like using a DOM parser to load the XML's DOM tree into memory. The advantage here is that the names, attributes and methods in JAXB generated objects strictly reflect the XML's structure defined by its schema making it much easier and more intuitive to work with them instead of a pure DOM tree. Running the test above, the outcome should be:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F7mwJPejsqM/R4P0iIxh-cI/AAAAAAAAE-g/rEAjQjASFu8/s1600-h/JAXB_pic05.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_F7mwJPejsqM/R4P0iIxh-cI/AAAAAAAAE-g/rEAjQjASFu8/s400/JAXB_pic05.gif" border="0" title="Click to enlarge" alt="Click to enlarge" id="BLOGGER_PHOTO_ID_5153231265949940162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Quite easy. You'd probably think: Well... I'm ok with that. It's easy enough already. The question is: is that so??? &lt;span style="font-weight:bold;"&gt;NOT!!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="JAXB2"&gt;&lt;/a&gt;Now I will repeat the same test case described above only upgrading from JAXB 1.0 to &lt;span style="font-weight:bold;"&gt;JAXB 2.0&lt;/span&gt;. First, we'll need to get a working implementation of JAXB 2.0. I recommend Sun's reference implementation which can be downloaded &lt;a target="sun" href="https://jaxb.dev.java.net/2.1.6/"&gt;here&lt;/a&gt; (at the time I was writing this post, version 2.1.6 was the latest one). Just follow the instructions in that page to install it correctly and notice the &lt;span style="font-weight:bold;"&gt;bin&lt;/span&gt; subdirectory containing some scripts, including &lt;span style="font-weight:bold;"&gt;"xjc.bat"&lt;/span&gt; (for Windows; "xjc.sh" for Unix). This is the script supplied to execute JAXB 2.0 compilation. The trick here is to embed it in JDeveloper as an &lt;span style="font-weight:bold;"&gt;"External Tool"&lt;/span&gt;. I'll show you how to do that step-by-step:&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Click the menu item "Tools -&gt; External Tools..."&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Press the "New..." button to start the "Create External Tool" wizard&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Select "External Program" as the "Tool Type" and press "Next"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fill the 3 displayed fields as follows:&lt;/li&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Program Executable:&lt;/span&gt;&lt;br /&gt;&lt;u&gt;full path&lt;/u&gt; to the script &lt;span style="font-weight:bold;"&gt;"xjc.bat"&lt;/span&gt; which sould be &lt;span style="font-weight:bold;"&gt;&amp;lt;Sun_JAXB_2.1.6_install_dir&amp;gt;/bin/xjc.bat&lt;/span&gt; (or "xjc.sh" on Unix)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Arguments:&lt;/span&gt;&lt;br /&gt;-d "${project.first.sourcepath}" -p ${promptl:label=Target Package Name} "${file.path}".&lt;br /&gt;&lt;br /&gt;Press button "Insert..." to see all macros available (i.e.: ${file.path}).&lt;br /&gt;&lt;br /&gt;The arguments above will be passed to the script "xjc.bat". Execute it with no arguments in a command prompt to see a help on all possible arguments. The default is to compile a XML Schema but you can use &lt;span style="font-weight:bold;"&gt;-dtd&lt;/span&gt; to compile a DTD instead, although it's an experimental feature.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Run Directory:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;lt;Sun_JAXB_2.1.6_install_dir&amp;gt;/bin&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Press "Next" to advance to "Display" step and fill the 3 fields as you like. I suggest the following:&lt;/li&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Caption for Menu Items:&lt;/span&gt;&lt;br /&gt;Compile XML Schema with JAXB 2.0&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;ToolTip Text:&lt;/span&gt;&lt;br /&gt;Compile a XML Schema with JAXB 2.0 Reference Implementation by Sun Microsystems&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;ToolTip Text:&lt;/span&gt;&lt;br /&gt;ide.fileicon:&amp;lt;SUN_JAXB_2.1.6_install_dir&amp;gt;/bin/xjc.bat&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Press "Next" to advance to "Integration" step where I recommend selecting &lt;span style="font-weight:bold;"&gt;"Tools Menu"&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;"Navigator Context Menu"&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Press "Next" to advance to the final step "Availability". Here, I recommend choosing the option &lt;span style="font-weight:bold;"&gt;"When Specific File Types are Selected"&lt;/span&gt; and then move only the item &lt;span style="font-weight:bold;"&gt;"XML Schema Type"&lt;/span&gt; from list "Available Types" to list "Selected Types"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Press "Finish" and done!&lt;/li&gt;&lt;/ol&gt;Now we have the same built-in "JAXB Compilation" functionality described before but now using Sun's JAXB 2.1.6. So, let's repeat the same test case using our new tool.&lt;br /&gt;&lt;br /&gt;First, create a new empty project called &lt;span style="font-weight:bold;"&gt;"JAXB 2.0"&lt;/span&gt; also adding only "XML" to its technology scope.&lt;br /&gt;&lt;br /&gt;We'll need to create a JAXB 2.0 library and add it to the project:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F7mwJPejsqM/R4TbK4xh-eI/AAAAAAAAE-0/yAUOx3xQFeI/s1600-h/JAXB_pic07.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_F7mwJPejsqM/R4TbK4xh-eI/AAAAAAAAE-0/yAUOx3xQFeI/s400/JAXB_pic07.gif" border="0" title="Click to enlarge" alt="Click to enlarge" id="BLOGGER_PHOTO_ID_5153484853703997922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The important here is to add the following archives, located in directory &amp;lt;Sun_JAXB_2.0_install_dir&amp;gt;/lib, to the library's class path: &lt;span style="font-weight:bold;"&gt;jaxb-api.jar&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;jaxb-impl.jar&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;jsr173_1.0_api.jar&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now just copy files &lt;span style="font-weight:bold;"&gt;"shiporder.xsd"&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;"testorder.xml"&lt;/span&gt; from project "JAXB 1.0" to this new project's root directory. &lt;u&gt;Also be sure that the sources directory configured for the project exists and, if it doesn't, create it manually&lt;/u&gt;. That's needed because Sun's JAXB 2.1.6 compiler won't create its output directory automatically and the process will fail if that directory doesn't exist. Finally, select file "shiporder.xsd" in the Applications Navigator and execute our newly created menu item &lt;span style="font-weight:bold;"&gt;"Tools -&gt; Compile XML Schema with JAXB 2.0"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F7mwJPejsqM/R4TU74xh-dI/AAAAAAAAE-s/VYRB6ksJpSg/s1600-h/JAXB_pic06.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_F7mwJPejsqM/R4TU74xh-dI/AAAAAAAAE-s/VYRB6ksJpSg/s400/JAXB_pic06.gif" border="0" title="Click to enlarge" alt="Click to enlarge" id="BLOGGER_PHOTO_ID_5153477998936193490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Define &lt;span style="font-weight:bold;"&gt;"test.jaxb2.shiporder"&lt;/span&gt; as the "Target Package Name" when prompted. After execution, you should see the following output:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F7mwJPejsqM/R4TdUYxh-fI/AAAAAAAAE-8/kPp_sfixkZg/s1600-h/JAXB_pic08.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_F7mwJPejsqM/R4TdUYxh-fI/AAAAAAAAE-8/kPp_sfixkZg/s400/JAXB_pic08.gif" border="0" title="Click to enlarge" alt="Click to enlarge" id="BLOGGER_PHOTO_ID_5153487215936010738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just click the &lt;span style="font-weight:bold;"&gt;"Refresh"&lt;/span&gt; button on the Applications Navigator and the new package "test.jaxb2.shiporder" will appear. At this point we can already make a simple comparison:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F7mwJPejsqM/R4ThUoxh-gI/AAAAAAAAE_E/3DxovnEYcZU/s1600-h/JAXB_pic09.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_F7mwJPejsqM/R4ThUoxh-gI/AAAAAAAAE_E/3DxovnEYcZU/s400/JAXB_pic09.gif" border="0" title="Click to enlarge" alt="Click to enlarge" id="BLOGGER_PHOTO_ID_5153491618277489154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, instead of generating 16 interfaces, 15 classes and 1 property file, JAXB 2.0 generated only 4 classes! And like it was not enough, if you look inside those 4 classes you'll notice that they are all very simple &lt;span style="font-weight:bold;"&gt;POJOs&lt;/span&gt;!!!&lt;br /&gt;&lt;br /&gt;Take class "Shiporder.java" for example:&lt;br /&gt;&lt;code style="font-size: 8pt"&gt;&lt;br /&gt;//&lt;br /&gt;//&amp;nbsp;This&amp;nbsp;file&amp;nbsp;was&amp;nbsp;generated&amp;nbsp;by&amp;nbsp;the&amp;nbsp;JavaTM&amp;nbsp;Architecture&amp;nbsp;for&amp;nbsp;XML&amp;nbsp;Binding(JAXB)&amp;nbsp;Reference&amp;nbsp;Implementation,&amp;nbsp;v2.1.5-b01-fcs&amp;nbsp;&lt;br /&gt;//&amp;nbsp;See&amp;nbsp;&amp;lt;a&amp;nbsp;href=&amp;quot;http://java.sun.com/xml/jaxb&amp;quot;&amp;gt;http://java.sun.com/xml/jaxb&amp;lt;/a&amp;gt;&amp;nbsp;&lt;br /&gt;//&amp;nbsp;Any&amp;nbsp;modifications&amp;nbsp;to&amp;nbsp;this&amp;nbsp;file&amp;nbsp;will&amp;nbsp;be&amp;nbsp;lost&amp;nbsp;upon&amp;nbsp;recompilation&amp;nbsp;of&amp;nbsp;the&amp;nbsp;source&amp;nbsp;schema.&amp;nbsp;&lt;br /&gt;//&amp;nbsp;Generated&amp;nbsp;on:&amp;nbsp;2008.01.09&amp;nbsp;at&amp;nbsp;12:41:26&amp;nbsp;PM&amp;nbsp;BRST&amp;nbsp;&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;package&amp;nbsp;test.jaxb2.shiporder;&lt;br /&gt;&lt;br /&gt;import&amp;nbsp;java.util.ArrayList;&lt;br /&gt;import&amp;nbsp;java.util.List;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.annotation.XmlAccessType;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.annotation.XmlAccessorType;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.annotation.XmlAttribute;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.annotation.XmlElement;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.annotation.XmlRootElement;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.annotation.XmlType;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;lt;p&amp;gt;Java&amp;nbsp;class&amp;nbsp;for&amp;nbsp;anonymous&amp;nbsp;complex&amp;nbsp;type.&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;lt;p&amp;gt;The&amp;nbsp;following&amp;nbsp;schema&amp;nbsp;fragment&amp;nbsp;specifies&amp;nbsp;the&amp;nbsp;expected&amp;nbsp;content&amp;nbsp;contained&amp;nbsp;within&amp;nbsp;this&amp;nbsp;class.&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;lt;pre&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;amp;lt;complexType&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;complexContent&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;restriction&amp;nbsp;base=&amp;quot;{http://www.w3.org/2001/XMLSchema}anyType&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;sequence&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;element&amp;nbsp;ref=&amp;quot;{}orderperson&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;element&amp;nbsp;ref=&amp;quot;{}shipto&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;element&amp;nbsp;ref=&amp;quot;{}item&amp;quot;&amp;nbsp;maxOccurs=&amp;quot;unbounded&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;/sequence&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;attribute&amp;nbsp;ref=&amp;quot;{}orderid&amp;nbsp;use=&amp;quot;required&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;/restriction&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;/complexContent&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;amp;lt;/complexType&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;lt;/pre&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;@XmlAccessorType(XmlAccessType.FIELD)&lt;br /&gt;@XmlType(name&amp;nbsp;=&amp;nbsp;&amp;quot;&amp;quot;,&amp;nbsp;propOrder&amp;nbsp;=&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;orderperson&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;shipto&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;item&amp;quot;&lt;br /&gt;})&lt;br /&gt;@XmlRootElement(name&amp;nbsp;=&amp;nbsp;&amp;quot;shiporder&amp;quot;)&lt;br /&gt;&lt;span style="color:red;font-weight:bold;"&gt;public&amp;nbsp;class&amp;nbsp;Shiporder&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@XmlElement(required&amp;nbsp;=&amp;nbsp;true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;String&amp;nbsp;orderperson;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@XmlElement(required&amp;nbsp;=&amp;nbsp;true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;Shipto&amp;nbsp;shipto;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@XmlElement(required&amp;nbsp;=&amp;nbsp;true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;List&amp;lt;Item&amp;gt;&amp;nbsp;item;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@XmlAttribute(required&amp;nbsp;=&amp;nbsp;true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;String&amp;nbsp;orderid;&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;*&amp;nbsp;Gets&amp;nbsp;the&amp;nbsp;value&amp;nbsp;of&amp;nbsp;the&amp;nbsp;orderperson&amp;nbsp;property.&lt;br /&gt;&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;@return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;possible&amp;nbsp;object&amp;nbsp;is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{@link&amp;nbsp;String&amp;nbsp;}&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;String&amp;nbsp;getOrderperson()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;orderperson;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;*&amp;nbsp;Sets&amp;nbsp;the&amp;nbsp;value&amp;nbsp;of&amp;nbsp;the&amp;nbsp;orderperson&amp;nbsp;property.&lt;br /&gt;&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;@param&amp;nbsp;value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;allowed&amp;nbsp;object&amp;nbsp;is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{@link&amp;nbsp;String&amp;nbsp;}&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;setOrderperson(String&amp;nbsp;value)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.orderperson&amp;nbsp;=&amp;nbsp;value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;*&amp;nbsp;Gets&amp;nbsp;the&amp;nbsp;value&amp;nbsp;of&amp;nbsp;the&amp;nbsp;shipto&amp;nbsp;property.&lt;br /&gt;&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;@return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;possible&amp;nbsp;object&amp;nbsp;is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{@link&amp;nbsp;Shipto&amp;nbsp;}&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;Shipto&amp;nbsp;getShipto()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;shipto;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;*&amp;nbsp;Sets&amp;nbsp;the&amp;nbsp;value&amp;nbsp;of&amp;nbsp;the&amp;nbsp;shipto&amp;nbsp;property.&lt;br /&gt;&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;@param&amp;nbsp;value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;allowed&amp;nbsp;object&amp;nbsp;is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{@link&amp;nbsp;Shipto&amp;nbsp;}&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;setShipto(Shipto&amp;nbsp;value)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.shipto&amp;nbsp;=&amp;nbsp;value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;*&amp;nbsp;Gets&amp;nbsp;the&amp;nbsp;value&amp;nbsp;of&amp;nbsp;the&amp;nbsp;item&amp;nbsp;property.&lt;br /&gt;&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;lt;p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;This&amp;nbsp;accessor&amp;nbsp;method&amp;nbsp;returns&amp;nbsp;a&amp;nbsp;reference&amp;nbsp;to&amp;nbsp;the&amp;nbsp;live&amp;nbsp;list,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;not&amp;nbsp;a&amp;nbsp;snapshot.&amp;nbsp;Therefore&amp;nbsp;any&amp;nbsp;modification&amp;nbsp;you&amp;nbsp;make&amp;nbsp;to&amp;nbsp;the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;returned&amp;nbsp;list&amp;nbsp;will&amp;nbsp;be&amp;nbsp;present&amp;nbsp;inside&amp;nbsp;the&amp;nbsp;JAXB&amp;nbsp;object.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;This&amp;nbsp;is&amp;nbsp;why&amp;nbsp;there&amp;nbsp;is&amp;nbsp;not&amp;nbsp;a&amp;nbsp;&amp;lt;CODE&amp;gt;set&amp;lt;/CODE&amp;gt;&amp;nbsp;method&amp;nbsp;for&amp;nbsp;the&amp;nbsp;item&amp;nbsp;property.&lt;br /&gt;&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;lt;p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;For&amp;nbsp;example,&amp;nbsp;to&amp;nbsp;add&amp;nbsp;a&amp;nbsp;new&amp;nbsp;item,&amp;nbsp;do&amp;nbsp;as&amp;nbsp;follows:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;lt;pre&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getItem().add(newItem);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;lt;/pre&amp;gt;&lt;br /&gt;&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;&lt;br /&gt;&amp;nbsp;&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;*&amp;nbsp;Objects&amp;nbsp;of&amp;nbsp;the&amp;nbsp;following&amp;nbsp;type(s)&amp;nbsp;are&amp;nbsp;allowed&amp;nbsp;in&amp;nbsp;the&amp;nbsp;list&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;{@link&amp;nbsp;Item&amp;nbsp;}&lt;br /&gt;&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;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;List&amp;lt;Item&amp;gt;&amp;nbsp;getItem()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(item&amp;nbsp;==&amp;nbsp;null)&amp;nbsp;{&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;item&amp;nbsp;=&amp;nbsp;new&amp;nbsp;ArrayList&amp;lt;Item&amp;gt;();&lt;br /&gt;&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;&amp;nbsp;return&amp;nbsp;this.item;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;*&amp;nbsp;Gets&amp;nbsp;the&amp;nbsp;value&amp;nbsp;of&amp;nbsp;the&amp;nbsp;orderid&amp;nbsp;property.&lt;br /&gt;&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;@return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;possible&amp;nbsp;object&amp;nbsp;is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{@link&amp;nbsp;String&amp;nbsp;}&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;String&amp;nbsp;getOrderid()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;orderid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;*&amp;nbsp;Sets&amp;nbsp;the&amp;nbsp;value&amp;nbsp;of&amp;nbsp;the&amp;nbsp;orderid&amp;nbsp;property.&lt;br /&gt;&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;@param&amp;nbsp;value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;allowed&amp;nbsp;object&amp;nbsp;is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{@link&amp;nbsp;String&amp;nbsp;}&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;setOrderid(String&amp;nbsp;value)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.orderid&amp;nbsp;=&amp;nbsp;value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;"public class Shiporder {". No interfaces being implemented, no classes being extended at all. Only a simple JavaBean with its attributes and their respective accessors. The "magic" here is done thanks to the annotations. They perform the actual mapping between the XML's structure defined by the compiled XML Schema and the classes derived from that compilation process.&lt;br /&gt;&lt;br /&gt;I think it's pretty obvious to see the huge advantages of JAXB 2.0 when compared to version 1.0. The compilation of a XML Schema produces much fewer classes and those classes are simply annotated POJOs. This certainly implies a much &lt;span style="font-weight:bold;"&gt;faster&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;lighter&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;easier&lt;/span&gt; to understand XML binding.&lt;br /&gt;&lt;br /&gt;Besides, there are some other details that makes JAXB 2.0 even more beneficial. Javadocs are automatically generated, it relies on cutting-edge XML parsing technology called &lt;span style="font-weight:bold;"&gt;"Streaming API for XML"&lt;/span&gt; which basically gives much more precise control over XML document processing. For further info on this, read "&lt;a target="otn" href="http://www.oracle.com/technology/tech/xml/xdk/staxpreview.html"&gt;Oracle StAX Pull Parser Preview&lt;/a&gt;" and "&lt;a target="sun" href="http://jcp.org/en/jsr/detail?id=173"&gt;JSR#173 homepage&lt;/a&gt;". Finally, as opposed to the &lt;a target="otn" href="http://download.oracle.com/docs/cd/B32110_01/web.1013/b28236/adx06jxb.htm#i1007907"&gt;known limitations of JDeveloper's built-in JAXB 1.0 compiler&lt;/a&gt;, Sun's JAXB 2.1.6 supports:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Javadoc generation&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The &lt;span style="font-weight:bold;"&gt;key&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;keyref&lt;/span&gt; features of XML Schema&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The &lt;span style="font-weight:bold;"&gt;List&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;Union&lt;/span&gt; features of XML Schema&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SimpleType mapping to TypeSafe Enum class and IsSet property modifier&lt;/li&gt;&lt;br /&gt;&lt;li&gt;XML Schema component "any" and substitution groups&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Customization of XML Schema to override the default binding of XML Schema components&lt;/li&gt;&lt;br /&gt;&lt;li&gt;On-demand validation of content based on a given Schema&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To run the same unmarshalling test, just create class "&lt;span style="font-weight:bold;"&gt;test.jaxb2.TestJAXB2&lt;/span&gt;" as follows:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 8pt"&gt;package&amp;nbsp;test.jaxb2;&lt;br /&gt;&lt;br /&gt;import&amp;nbsp;java.io.File;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.JAXBContext;&lt;br /&gt;import&amp;nbsp;javax.xml.bind.Unmarshaller;&lt;br /&gt;import&amp;nbsp;test.jaxb2.shiporder.Item;&lt;br /&gt;import&amp;nbsp;test.jaxb2.shiporder.Shiporder;&lt;br /&gt;&lt;br /&gt;public&amp;nbsp;class&amp;nbsp;TestJAXB2&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JAXBContext&amp;nbsp;context&amp;nbsp;=&amp;nbsp;JAXBContext.newInstance(&amp;quot;test.jaxb2.shiporder&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Unmarshaller&amp;nbsp;unmarshaller&amp;nbsp;=&amp;nbsp;context.createUnmarshaller();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Shiporder&amp;nbsp;order&amp;nbsp;=&amp;nbsp;(Shiporder)unmarshaller.unmarshal(new&amp;nbsp;File(&amp;quot;testorder.xml&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&amp;quot;Items&amp;nbsp;included&amp;nbsp;in&amp;nbsp;order&amp;nbsp;#&amp;quot;+order.getOrderid()+&amp;quot;&amp;nbsp;are:&amp;quot;);&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(Item&amp;nbsp;item&amp;nbsp;:&amp;nbsp;order.getItem())&amp;nbsp;{&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;System.out.println(&amp;quot;\t:.&amp;nbsp;&amp;quot;+item.getTitle()+&amp;quot;&amp;nbsp;-&amp;nbsp;&amp;quot;+&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;item.getQuantity()+&amp;quot;&amp;nbsp;item(s)&amp;nbsp;at&amp;nbsp;$&amp;quot;+item.getPrice()+&amp;quot;&amp;nbsp;each&amp;quot;);&lt;br /&gt;&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;catch&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is slightly different from class "&lt;span style="font-weight:bold;"&gt;test.jaxb1.TestJAXB1&lt;/span&gt;" but, after running it, you should see exactly the same outcome:&lt;br /&gt;&lt;br /&gt;&lt;a target="pics" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F7mwJPejsqM/R4TynIxh-hI/AAAAAAAAE_M/wKy5rDjEW2E/s1600-h/JAXB_pic10.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_F7mwJPejsqM/R4TynIxh-hI/AAAAAAAAE_M/wKy5rDjEW2E/s400/JAXB_pic10.gif" border="0" title="Click to enlarge" alt="Click to enlarge" id="BLOGGER_PHOTO_ID_5153510627802741266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Well, that's it. I think I've made my point. So good luck in your JAXB 2.0 adventures!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-435307424825908429?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=DPfTYHHk9II:84SZkSWIPfY:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=DPfTYHHk9II:84SZkSWIPfY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=DPfTYHHk9II:84SZkSWIPfY:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=DPfTYHHk9II:84SZkSWIPfY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=DPfTYHHk9II:84SZkSWIPfY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=DPfTYHHk9II:84SZkSWIPfY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=DPfTYHHk9II:84SZkSWIPfY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=DPfTYHHk9II:84SZkSWIPfY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=DPfTYHHk9II:84SZkSWIPfY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=DPfTYHHk9II:84SZkSWIPfY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=DPfTYHHk9II:84SZkSWIPfY:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/DPfTYHHk9II" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/435307424825908429/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=435307424825908429" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/435307424825908429?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/435307424825908429?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/DPfTYHHk9II/jaxb-10-vs-20-in-jdeveloper-10g.html" title="JAXB 1.0 vs. 2.0 in JDeveloper 10g" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_F7mwJPejsqM/R4PYc4xh-XI/AAAAAAAAE94/dQddm50txDY/s72-c/JAXB_pic01.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">9</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/01/jaxb-10-vs-20-in-jdeveloper-10g.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g5eSp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-9214278751267766199</id><published>2008-01-05T17:57:00.000-02:00</published><updated>2009-04-02T15:37:56.621-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.621-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="announcements" /><title>A new year with a new face</title><content type="html">Hello everybody!&lt;br /&gt;&lt;br /&gt;I can not think of anything better than a complete makeover to start the new year. And just because I can't do that to myself, it doesn't mean I can't do that to my blog. So I did it!&lt;br /&gt;&lt;br /&gt;That's right. As you may notice (at least if you're already a reader) the look and feel is quite different, hopefully for the best. The blog now fills almost the whole screen which gives much more space for posts. I also adopted a more clean style, with a white-predominant background.&lt;br /&gt;&lt;br /&gt;Some useful tools have been added at the upper right corner:&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 0pt 10px 10px 0pt;" src="http://1.bp.blogspot.com/_F7mwJPejsqM/R4EFxIxh-TI/AAAAAAAAE9Q/jk_QvkwRUFM/s400/chicklets.gif" alt="" id="BLOGGER_PHOTO_ID_5152405790415518002" border="0" /&gt;&lt;br /&gt;Now it is much easier to subscribe to all the amazing content posted here. It's even possible to receive all new posts directly into your e-mail. Ain't that just great?!&lt;br /&gt;&lt;br /&gt;At last, and certainly not least, another huge improvement or, should I say... the final touch: now all blog's feeds are being redirected to &lt;a target="feed" href="http://www.feedburner.com/"&gt;FeedBurner&lt;/a&gt;. This means widely compatible, comprehensive and automatically disseminated feeds. &lt;a target="feed" href="http://java2go.blogspot.com/feeds/posts/default"&gt;Click here&lt;/a&gt; and see for yourself.&lt;br /&gt;&lt;br /&gt;Well, I'm pretty happy with the blog's new look and improvements. I hope you all like it as much as I do.&lt;br /&gt;&lt;br /&gt;May we all have a fantastic 2008 and... keep reading!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-9214278751267766199?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=D5rhmOMhA_E:nh5u7sKeRYU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=D5rhmOMhA_E:nh5u7sKeRYU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=D5rhmOMhA_E:nh5u7sKeRYU:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=D5rhmOMhA_E:nh5u7sKeRYU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=D5rhmOMhA_E:nh5u7sKeRYU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=D5rhmOMhA_E:nh5u7sKeRYU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=D5rhmOMhA_E:nh5u7sKeRYU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=D5rhmOMhA_E:nh5u7sKeRYU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=D5rhmOMhA_E:nh5u7sKeRYU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=D5rhmOMhA_E:nh5u7sKeRYU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=D5rhmOMhA_E:nh5u7sKeRYU:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/D5rhmOMhA_E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/9214278751267766199/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=9214278751267766199" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/9214278751267766199?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/9214278751267766199?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/D5rhmOMhA_E/new-year-with-new-face.html" title="A new year with a new face" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_F7mwJPejsqM/R4EFxIxh-TI/AAAAAAAAE9Q/jk_QvkwRUFM/s72-c/chicklets.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://java2go.blogspot.com/2008/01/new-year-with-new-face.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g5eSp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-7454387076805636752</id><published>2007-12-23T12:30:00.000-02:00</published><updated>2009-04-02T15:37:56.621-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.621-03:00</app:edited><title>Happy Holidays!</title><content type="html">&lt;blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Christmas gift suggestions:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;To your enemy, forgiveness;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;To an opponent, tolerance;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;To a friend, your heart;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;To a customer, service;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;To all, charity;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;To every child, a good example;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;To yourself, respect."&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;(by Oren Arnolds)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;I whish you all a merry Christmas and a really wonderful, healthy, happy and successful 2008.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-7454387076805636752?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=klPqx2xyfAs:tz8lbMuOsl4:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=klPqx2xyfAs:tz8lbMuOsl4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=klPqx2xyfAs:tz8lbMuOsl4:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=klPqx2xyfAs:tz8lbMuOsl4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=klPqx2xyfAs:tz8lbMuOsl4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=klPqx2xyfAs:tz8lbMuOsl4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=klPqx2xyfAs:tz8lbMuOsl4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=klPqx2xyfAs:tz8lbMuOsl4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=klPqx2xyfAs:tz8lbMuOsl4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=klPqx2xyfAs:tz8lbMuOsl4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=klPqx2xyfAs:tz8lbMuOsl4:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/klPqx2xyfAs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/7454387076805636752/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=7454387076805636752" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/7454387076805636752?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/7454387076805636752?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/klPqx2xyfAs/happy-holidays.html" title="Happy Holidays!" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://java2go.blogspot.com/2007/12/happy-holidays.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIBSHk_cCp7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-1555041235531915347</id><published>2007-11-07T13:00:00.000-02:00</published><updated>2009-04-02T15:39:19.748-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:39:19.748-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><title>How to setup Java Logging in OC4J</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Eduardo Rodrigues&lt;br /&gt;&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;Sometime ago I had a great idea for a web application logger that would basically log events as a feed (RSS or ATOM). After a lot of thinking of the best way to implement my idea, I decided to follow the &lt;a target=_blank href="http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html"&gt;Java Logging Framework&lt;/a&gt;. So, basically, all I had to do was to create my own FeedHandler extending java.util.logging.Handler and also create a new java.util.logging.Formatter extension for each specific standard feed format. I started implementing RSS20Formatter based on &lt;a target=_blank href="http://www.rssboard.org/rss-specification"&gt;RSS 2.0 specification&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It took only 2 days for me to be completely satisfied with my own little Java Feed Logging library (which came to work really well, by the way) but then I had to make it work with my J2EE applications running in OC4J 10.1.3.x. And I wondered what would be the best way to do that.&lt;br /&gt;&lt;br /&gt;I had read &lt;a target=_blank href="http://download.oracle.com/docs/cd/B32110_01/web.1013/b28952/logging.htm#BABGCJFD"&gt;OC4J’s documentation on logging&lt;/a&gt; and saw that it is possible to define a log handler in OC4J’s logging configuration file j2ee-logging.xml declaring its class as a subclass of java.util.logging.Handler, but that’s all the information available on how to configure OC4J loggers using the Java Logging Framework because the focus seems to be on the Oracle Diagnostic Logging Framework instead.&lt;br /&gt;&lt;br /&gt;I already use (and recommend) the ODL Framework in my J2EE applications running in OC4J mainly for its integration with web-based &lt;a target=_blank href="http://download.oracle.com/docs/cd/B32110_01/web.1013/b28950/logadmin.htm#CHDFDACA"&gt;Oracle Enterprise Manager 10g Application Server Control Console&lt;/a&gt; which turns log viewing and analysis into a much more easy and comfortable experience. So, my first attempt was to add a new &amp;lt;log_handler&amp;gt; to &amp;lt;log_handlers&amp;gt; element in my j2ee-logging.xml file, basically copying my existing &amp;lt;log_handler&amp;gt; and changing its attributes and properties like that:&lt;br /&gt;&lt;br /&gt;Original j2ee-logging.xml file&lt;br /&gt;&lt;br /&gt;&lt;code style="font-family:Arial Narrow,Arial;font-size:8pt"&gt;&amp;lt;?xml&amp;nbsp;version&amp;nbsp;=&amp;nbsp;'1.0'&amp;nbsp;encoding&amp;nbsp;=&amp;nbsp;'iso-8859-1'?&amp;gt;&lt;br /&gt;&amp;lt;logging_configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;log_handlers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;log_handler&amp;nbsp;name="contaweb-handler"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="oracle.core.ojdl.logging.ODLHandlerFactory"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formatter="oracle.core.ojdl.logging.ODLTextFormatter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="path"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value="../application-deployments/log/ContaWeb"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="maxFileSize"&amp;nbsp;value="10485760"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="maxLogSize"&amp;nbsp;value="104857600"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="encoding"&amp;nbsp;value="ISO-8859-1"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="useSourceClassAndMethod"&amp;nbsp;value="true"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="supplementalAttributes"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value="J2EE_APP.name,J2EE_MODULE.name"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/log_handler&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/log_handlers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;loggers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;logger&amp;nbsp;name="tim.contaweb"&amp;nbsp;level="ALL"&amp;nbsp;useParentHandlers="false"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;handler&amp;nbsp;name="contaweb-handler"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/logger&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/loggers&amp;gt;&lt;br /&gt;&amp;lt;/logging_configuration&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;New j2ee-logging.xml file&lt;br /&gt;&lt;br /&gt;&lt;code style="font-family:Arial Narrow,Arial;font-size:8pt"&gt;&amp;lt;?xml&amp;nbsp;version&amp;nbsp;=&amp;nbsp;'1.0'&amp;nbsp;encoding&amp;nbsp;=&amp;nbsp;'iso-8859-1'?&amp;gt;&lt;br /&gt;&amp;lt;logging_configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;log_handlers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;log_handler&amp;nbsp;name="contaweb-handler"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="oracle.core.ojdl.logging.ODLHandlerFactory"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formatter="oracle.core.ojdl.logging.ODLTextFormatter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="path"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value="../application-deployments/log/ContaWeb"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="maxFileSize"&amp;nbsp;value="10485760"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="maxLogSize"&amp;nbsp;value="104857600"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="encoding"&amp;nbsp;value="ISO-8859-1"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="useSourceClassAndMethod"&amp;nbsp;value="true"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="supplementalAttributes"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value="J2EE_APP.name,J2EE_MODULE.name"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/log_handler&amp;gt;&lt;br /&gt;&lt;span style="color:red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;log_handler&amp;nbsp;name="contaweb-rss-handler"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="oracle.br.logging.feed.FeedHandler"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formatter="oracle.br.logging.feed.RSS20Formatter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="path"&amp;nbsp;value="../applications/ContaWeb/ContaWeb/rss"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="level"&amp;nbsp;value="INFO"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="title"&amp;nbsp;value="ContaWeb&amp;nbsp;Log&amp;nbsp;Events"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="link"&amp;nbsp;value="http://localhost:8888/em/"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="limit"&amp;nbsp;value="100"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/log_handler&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/log_handlers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;loggers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;logger&amp;nbsp;name="tim.contaweb"&amp;nbsp;level="ALL"&amp;nbsp;useParentHandlers="false"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;handler&amp;nbsp;name="contaweb-handler"/&amp;gt;&lt;br /&gt;&lt;span style="color:red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;handler&amp;nbsp;name="contaweb-rss-handler"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/logger&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/loggers&amp;gt;&lt;br /&gt;&amp;lt;/logging_configuration&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note that I just added my new log handler to my existing logger named “tim.contaweb” which was already used by my application. In other words, every single log event generated by this logger will be directed to both handlers in a transparent way. The problem was it didn’t work at all :((((&lt;br /&gt;&lt;br /&gt;Making the long story short, after googling a lot, I first found that the &amp;lt;property&amp;gt; elements and the “formatter” attribute in a &amp;lt;log_handler&amp;gt; are effective only if its class is oracle.core.ojdl.logging.ODLHandlerFactory. Then I also found that my answer was inside the ODL JAR file (ojdl.jar): the logging configuration DTD/Schema.&lt;br /&gt;&lt;br /&gt;If you look inside ojdl.jar (which is generally located at $ORACLE_HOME/diagnostics/lib) you’ll find files oracle.core.ojdl.logging.logging-config.dtd and oracle.core.ojdl.logging.logging-config.xsd and, after examining them, you’ll notice the non-documented element &amp;lt;logging_properties&amp;gt; which is the first optional element inside the root element &amp;lt;logging_configuration&amp;gt;. In fact, this &amp;lt;logging_properties&amp;gt; only takes &amp;lt;property name=”” value””/&amp;gt; elements and has the exact same behavior as those properties declared in file $JAVA_HOME/jre/lib/logging.properties, and those are the ones needed by Java Logging Framework. So, my working j2ee-logging.xml file is:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-family:Arial Narrow,Arial;font-size:8pt"&gt;&amp;lt;?xml&amp;nbsp;version&amp;nbsp;=&amp;nbsp;'1.0'&amp;nbsp;encoding&amp;nbsp;=&amp;nbsp;'iso-8859-1'?&amp;gt;&lt;br /&gt;&amp;lt;logging_configuration&amp;gt;&lt;br /&gt;&lt;span style="color:red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;logging_properties&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="oracle.br.logging.feed.FeedHandler.formatter"&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;&amp;nbsp;value="oracle.br.logging.feed.RSS20Formatter"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="oracle.br.logging.feed.FeedHandler.path"&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;&amp;nbsp;value="../applications/ContaWeb/ContaWeb/rss"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="oracle.br.logging.feed.FeedHandler.level"&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;&amp;nbsp;value="INFO"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="oracle.br.logging.feed.FeedHandler.title"&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;&amp;nbsp;value="ContaWeb&amp;nbsp;Log&amp;nbsp;Events"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="oracle.br.logging.feed.FeedHandler.link"&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;&amp;nbsp;value="http://localhost:8888/em/"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="oracle.br.logging.feed.FeedHandler.limit"&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;&amp;nbsp;value="100"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/logging_properties&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;log_handlers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;log_handler&amp;nbsp;name="contaweb-handler"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="oracle.core.ojdl.logging.ODLHandlerFactory"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formatter="oracle.core.ojdl.logging.ODLTextFormatter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="path"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value="../application-deployments/log/ContaWeb"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="maxFileSize"&amp;nbsp;value="10485760"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="maxLogSize"&amp;nbsp;value="104857600"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="encoding"&amp;nbsp;value="ISO-8859-1"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="useSourceClassAndMethod"&amp;nbsp;value="true"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;nbsp;name="supplementalAttributes"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value="J2EE_APP.name,J2EE_MODULE.name"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/log_handler&amp;gt;&lt;br /&gt;&lt;span style="color:red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;log_handler&amp;nbsp;name="contaweb-rss-handler"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="oracle.br.logging.feed.FeedHandler"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/log_handlers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;loggers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;logger&amp;nbsp;name="tim.contaweb"&amp;nbsp;level="ALL"&amp;nbsp;useParentHandlers="false"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;handler&amp;nbsp;name="contaweb-handler"/&amp;gt;&lt;br /&gt;&lt;span style="color:red"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;handler&amp;nbsp;name="contaweb-rss-handler"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/logger&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/loggers&amp;gt;&lt;br /&gt;&amp;lt;/logging_configuration&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It’s also very important to say that all log handlers declared in file j2ee-loggin.xml will be automatically instantiated during OC4J’s startup process. Because of this, all needed classes must be reachable from OC4J’s boot class loader. There were some options to achieve that but, in my case, the easiest was to deploy my new logging library to a JAR file and just put it in $ORACLE_HOME/j2ee/home/lib/ext directory.&lt;br /&gt;&lt;br /&gt;That’s all for now. I hope it’s useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-1555041235531915347?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3peQZjPX8HU:AcmjfiOnkMw:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3peQZjPX8HU:AcmjfiOnkMw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3peQZjPX8HU:AcmjfiOnkMw:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3peQZjPX8HU:AcmjfiOnkMw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=3peQZjPX8HU:AcmjfiOnkMw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3peQZjPX8HU:AcmjfiOnkMw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=3peQZjPX8HU:AcmjfiOnkMw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3peQZjPX8HU:AcmjfiOnkMw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=3peQZjPX8HU:AcmjfiOnkMw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3peQZjPX8HU:AcmjfiOnkMw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=3peQZjPX8HU:AcmjfiOnkMw:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/3peQZjPX8HU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/1555041235531915347/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=1555041235531915347" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/1555041235531915347?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/1555041235531915347?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/3peQZjPX8HU/how-to-setup-java-logging-in-oc4j.html" title="How to setup Java Logging in OC4J" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://java2go.blogspot.com/2007/11/how-to-setup-java-logging-in-oc4j.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g5eip7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-3596085636968834099</id><published>2007-09-23T10:37:00.000-03:00</published><updated>2009-04-02T15:37:56.622-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.622-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sqldeveloper" /><title>SQLDeveloper setup trick</title><content type="html">&lt;div align="right"&gt;&lt;em&gt;by Eduardo Rodrigues&lt;br /&gt;&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;Yes. The title of this post really is &lt;strong&gt;SQL&lt;/strong&gt;Developer. I did not write it wrong. But what it has to do with Java? Well, the answer is simple: Oracle SQLDeveloper is a very useful and interesting database tool for developers and is build in Java. It's like an IDE for Oracle DB and has somethings in common with JDeveloper. For those who are now curious, Oracle SQLDeveloper may be downloaded from &lt;a href="http://www.oracle.com/technology/products/database/sql_developer/index.html" target="OTN"&gt;Oracle Technology Network&lt;/a&gt;. I use it and certainly recommend it for developers (not for DBAs).&lt;br /&gt;&lt;br /&gt;With all that said, let's go directly to the point...&lt;br /&gt;&lt;br /&gt;One of the things SQLDeveloper has in common with JDeveloper is how its setup is done. However, in it's latest versions (1.2.1 was the latest version at the time this post was written), SQLDeveloper has a small setup trick.&lt;br /&gt;&lt;br /&gt;As you will notice, SQLDeveloper does not come with an installer program. All you have to do is uncompress the downloaded zip archive and run sqldeveloper.exe located in its root directory. You may choose to download it with a bundled JDK 1.5.0_06 or without it and then set it up to use a more recent JDK (version 6 is already certified). Looking inside the expanded directory tree, you'll find an "&amp;lt;SQLDeveloper_Install_Dir&gt;/SQLDeveloper/bin" subdirectory containing the files "sqldeveloper.conf" and "jdk.conf". The former is the setup starting point and the latter is empty when you download SQLDev without the bundled JDK.&lt;br /&gt;&lt;br /&gt;Edit this file and notice the "IncludeConfFile" directives. The first one points to an "ide.conf" file located in "&amp;lt;SQLDeveloper_Install_Dir&gt;/jdev/bin" subdirectory. This file works for SQLDev much like "jdev.conf" does for JDev. Some important things you may setup there is Java Heap maximum size and, specially for Windows users, the keepWorkingSetOnMinimize system property which avoids SQLDev's working memory to be paged out by Windows when you minimize it (believe me, you want this system property set). You may set those like this:&lt;br /&gt;&lt;code style="FONT-SIZE: 8pt"&gt;&lt;br /&gt;# setting maximum heap to 256 MB&lt;br /&gt;AddVMOption -Xmx256M&lt;br /&gt;&lt;br /&gt;#setting keepWorkingSetOnMinimize&lt;br /&gt;AddVMOption -Dsun.awt.keepWorkingSetOnMinimize=true&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;If you look at the same subdirectory, you'll find another "jdk.conf" file, this time with the following content:&lt;br /&gt;&lt;code style="FONT-SIZE: 8pt"&gt;&lt;br /&gt;###############################################################&lt;br /&gt;# Oracle IDE JDK Configuration File&lt;br /&gt;# Copyright 2000-2006 Oracle Corporation.&lt;br /&gt;# All Rights Reserved.&lt;br /&gt;###############################################################&lt;br /&gt;#&lt;br /&gt;# Directive SetJavaHome is not required by default,&lt;br /&gt;# except for the base install, since the launcher will&lt;br /&gt;# determine the JAVA_HOME. On Windows it looks&lt;br /&gt;# in ..\..\jdk, on UNIX it first looks in ../../jdk.&lt;br /&gt;# If no JDK is found there, it looks in the PATH.&lt;br /&gt;#&lt;br /&gt;# SetJavaHome C:\Java\jdk1.5.0_04&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Because SetJavaHome directive is commented out, this file has pretty much the same effect as the empty one located in "&amp;lt;SQLDeveloper_Install_Dir&gt;/SQLDeveloper/bin" subdirectory. In this case, the application will look for the bundled Java Runtime Engine which should be located in "&amp;lt;SQLDeveloper_Install_Dir&gt;/jdk" subdirectory. And this is the trick. Which of the "jdk.conf" files is the correct one? The answer is: the empty "jdk.conf" in "&amp;lt;SQLDeveloper_Install_Dir&gt;/SQLDeveloper/bin" subdirectory. So, if want or need to specify what JDK should be used to run SQLDeveloper, you must edit this file and add the following:&lt;br /&gt;&lt;code style="FONT-SIZE: 8pt"&gt;&lt;br /&gt;# tipical setting for Windows&lt;br /&gt;# (you don't need to enclose the path with double quotes)&lt;br /&gt;SetJavaHome C:\Program Files\Java\jdk1.5.0_12&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;In order to confirm your settings, just open the "About" window and select the "Version" tab:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://3.bp.blogspot.com/_F7mwJPejsqM/RvZ8ZWCd-MI/AAAAAAAAEJs/iSNtOBbegLk/s1600-h/about.GIF"&gt;&lt;img id="BLOGGER_PHOTO_ID_5113411201780283586" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_F7mwJPejsqM/RvZ8ZWCd-MI/AAAAAAAAEJs/iSNtOBbegLk/s400/about.GIF" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There you may check what Java is being used and, looking at the "Properties" tab, you may check all other settings.&lt;br /&gt;&lt;br /&gt;That's it. Best regards to all!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-3596085636968834099?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=nnzp2Zt2LE4:7xuEFdmzpDY:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=nnzp2Zt2LE4:7xuEFdmzpDY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=nnzp2Zt2LE4:7xuEFdmzpDY:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=nnzp2Zt2LE4:7xuEFdmzpDY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=nnzp2Zt2LE4:7xuEFdmzpDY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=nnzp2Zt2LE4:7xuEFdmzpDY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=nnzp2Zt2LE4:7xuEFdmzpDY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=nnzp2Zt2LE4:7xuEFdmzpDY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=nnzp2Zt2LE4:7xuEFdmzpDY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=nnzp2Zt2LE4:7xuEFdmzpDY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=nnzp2Zt2LE4:7xuEFdmzpDY:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/nnzp2Zt2LE4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/3596085636968834099/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=3596085636968834099" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/3596085636968834099?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/3596085636968834099?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/nnzp2Zt2LE4/sqldeveloper-trick.html" title="SQLDeveloper setup trick" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_F7mwJPejsqM/RvZ8ZWCd-MI/AAAAAAAAEJs/iSNtOBbegLk/s72-c/about.GIF" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://java2go.blogspot.com/2007/09/sqldeveloper-trick.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3g5eip7ImA9WxVbFkQ.&quot;"><id>tag:blogger.com,1999:blog-6871409708513245659.post-2745112854993587753</id><published>2007-09-03T00:05:00.000-03:00</published><updated>2009-04-02T15:37:56.622-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T15:37:56.622-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="javaone" /><title>JavaOne 2007 - Performance Tips 2 - Finish the finalizers!</title><content type="html">&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;by Eduardo Rodrigues&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Continuing from my last post about some lessons learned at JavaOne'07 on Java performance since JDK 1.5, there's something we usually do not pay much attention to but which can get us some trouble: &lt;span style="font-weight: bold;"&gt;object finalizers&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Every time we override the &lt;span style="font-weight: bold; font-style: italic;"&gt;protected void finalize()&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt; throws Throwable&lt;/span&gt;&lt;/span&gt; method, we are implicitly creating a &lt;span style="font-style: italic;"&gt;postmortem&lt;/span&gt; hook to be called by the Garbage Collector after it finds that the object is unreachable and before it actually reclaims the object's memory space. In general, we override &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;finalize()&lt;/span&gt;&lt;/span&gt; with the best of the intentions which is to ensure that all necessary disposal of system resources and any other cleanup will be performed before the object is permanently discarded. So why is that an issue?&lt;br /&gt;&lt;br /&gt;Well, we all should know that &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;finalize()&lt;/span&gt;&lt;/span&gt; is an empty method declared in &lt;span style="font-style: italic; font-weight: bold;"&gt;java.lang.Object&lt;/span&gt; class, therefore, inherited by any existing Java class. So, when it's overridden, the JVM can't assume the default trivial finalization for the object anymore which means that "fast allocation" won't happen here. In fact, "finalizable" objects have much slower allocation simply because the VM must keep track of all &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;finalize()&lt;/span&gt;&lt;/span&gt; hooks. Besides, those objects also give much more work to the GC. It takes at least 2 GC cycles (which are also slower) to reclaim a "finalizable" object. The first is the usual one when the GC identifies the object as garbage. The difference is that now it has to enqueue the object on finalization queue. Only during a next cycle GC will dequeue and call the object's &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;finalize()&lt;/span&gt;&lt;/span&gt; method and, if we're lucky, discard the object and reclaim its space, or else, it may take another cycle just to finally get rid of that object.&lt;br /&gt;&lt;br /&gt;If we look closer, we'll notice that putting more pressure on the GC and slowing down both initialization and finalization processes are not the only problems here. Let's take a quick look at the J2SE 5.0 API Javadoc for the Object.finalize() method:&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;(...)   After the &lt;/span&gt;&lt;tt style="font-style: italic;"&gt;finalize&lt;/tt&gt;&lt;span style="font-style: italic;"&gt; method has been invoked for an object, &lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;no   further action is taken until the Java virtual machine has again   determined that &lt;/span&gt;there is no longer any means by which this object can   be accessed by any thread &lt;span style="color: rgb(0, 0, 0);"&gt;that has not yet died,&lt;/span&gt; including possible  actions by other objects or classes which are ready to be finalized&lt;/span&gt;,   at which point the object may be discarded.   The &lt;/span&gt;&lt;tt style="font-style: italic;"&gt;finalize&lt;/tt&gt;&lt;span style="font-style: italic;"&gt; method is &lt;span style="color: rgb(255, 0, 0);"&gt;never invoked more than once&lt;/span&gt; by a Java  virtual machine for any given object.  &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;Any exception &lt;span style="color: rgb(0, 0, 0);"&gt;thrown by the &lt;/span&gt;&lt;/span&gt;&lt;code style="font-style: italic; color: rgb(0, 0, 0);"&gt;finalize&lt;/code&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; method &lt;/span&gt;causes   the finalization of this object to be halted&lt;/span&gt; (...)&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;It is quite clear to me that there's a potential temporary (or even permanent) "&lt;span style="font-style: italic;"&gt;memory leak&lt;/span&gt;" matter hidden in that piece of Javadoc. Since the JVM is obligated to execute the &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;finalize()&lt;/span&gt;&lt;/span&gt; method before discarding any object overriding it, in fact, due to the additional GC cycles described above, not only that specific object will be retained longer in the heap but also any other objects that are still reachable from it. In the other hand, even after executing &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;finalize()&lt;/span&gt;&lt;/span&gt;, the VM will not reclaim an object's space if, by any means, it may still be accessed by any object or class, in any living thread, even if they're also ready to be finalized. Like it isn't enough, if any exception is thrown uncaught during &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;finalize()&lt;/span&gt;&lt;/span&gt; execution, the finalization of the object is halted and there's a good chance that, in this case, this object will be retained forever as garbage.&lt;br /&gt;&lt;br /&gt;At last, the fact that the &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;finalize()&lt;/span&gt;&lt;/span&gt; method should never be invoked more that once for any given object certainly implies the use of synchronization which is one more performance threatening element.&lt;br /&gt;&lt;br /&gt;So, next time you consider writing a finalizer in a class, please, take a second look at it. And if you really have to do that, be really careful with the code you write and try to follow these tips:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use finalizers only as a last resort!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Even if you do not explicitly override the &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;finalize()&lt;/span&gt;&lt;/span&gt; method, library classes you extend may have done it. Look at the example bellow:&lt;br /&gt;&lt;br /&gt;class MyFrame &lt;span style="font-weight: bold;"&gt;extends JFrame&lt;/span&gt; {&lt;br /&gt;   private byte[] buffer = new byte[16*1024*1024];&lt;br /&gt;   (...)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;In JDK 1.5 and earlier, the 16MB buffer will survive, at least, 2 GC cycles before any MyFrame instance is discarded. That's because JFrame library class does declare a finalizer. So, try to split objects in cases like this:&lt;br /&gt;&lt;br /&gt;class MyFrame {&lt;br /&gt;   &lt;span style="font-weight: bold;"&gt;private JFrame frame;&lt;/span&gt;&lt;br /&gt;   private byte[] buffer = new byte[16*1024*1024];&lt;br /&gt;   (...)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Even if you're considering to use a finalizer to dispose expensive and scarce resources, keep in mind that, being scarce, it's very likely that they will be exhausted before memory (assuming that memory is usually plentiful). So, in these cases, prefer to pool scarce resources instead.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;To be continued...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6871409708513245659-2745112854993587753?l=java2go.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/java2go?a=MwoBS9-KDB8:B2088IS6CWc:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=MwoBS9-KDB8:B2088IS6CWc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=MwoBS9-KDB8:B2088IS6CWc:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=MwoBS9-KDB8:B2088IS6CWc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=MwoBS9-KDB8:B2088IS6CWc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=MwoBS9-KDB8:B2088IS6CWc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=MwoBS9-KDB8:B2088IS6CWc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=MwoBS9-KDB8:B2088IS6CWc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?i=MwoBS9-KDB8:B2088IS6CWc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=MwoBS9-KDB8:B2088IS6CWc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/java2go?a=MwoBS9-KDB8:B2088IS6CWc:zUE_vjW40bg"&gt;&lt;img src="http://feeds.feedburner.com/~ff/java2go?d=zUE_vjW40bg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/java2go/~4/MwoBS9-KDB8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://java2go.blogspot.com/feeds/2745112854993587753/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=6871409708513245659&amp;postID=2745112854993587753" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/2745112854993587753?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6871409708513245659/posts/default/2745112854993587753?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/java2go/~3/MwoBS9-KDB8/javaone-2007-performance-tips-2-finish.html" title="JavaOne 2007 - Performance Tips 2 - Finish the finalizers!" /><author><name>Eduardo Ribeiro Rodrigues</name><uri>http://www.blogger.com/profile/05439924633149516920</uri><email>edu@pobox.com</email><gd:extendedProperty name="OpenSocialUserId" value="00996479898987168040" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://java2go.blogspot.com/2007/09/javaone-2007-performance-tips-2-finish.html</feedburner:origLink></entry></feed>
