<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace Site Server v5.11.81 (http://www.squarespace.com/) on Mon, 28 May 2012 18:32:53 GMT--><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>Articles</title><link>http://www.java-hair.com/articles/</link><description></description><lastBuildDate>Fri, 16 Mar 2012 17:16:26 +0000</lastBuildDate><copyright></copyright><language>en-US</language><generator>Squarespace Site Server v5.11.81 (http://www.squarespace.com/)</generator><item><title>RMOUG Training Days 2012</title><dc:creator>Java Hair Owner</dc:creator><pubDate>Mon, 13 Feb 2012 19:52:24 +0000</pubDate><link>http://www.java-hair.com/articles/2012/2/13/rmoug-training-days-2012.html</link><guid isPermaLink="false">561505:6475783:15018261</guid><description><![CDATA[<p>I will be co-presenting at RMOUG Training Days with Jigar Parsana on the topic of modernizing Oracle Forms to a Struts 2 / Spring / Hibernate solution. &nbsp;We will present a case study and a comparison between this "open" framework and Oracle's ADF framework.</p>
<p>If you are going to be at RMOUG Training Days, be sure to come by Room 401 on Thursday, February 16th at 2:45.&nbsp;</p>]]></description><wfw:commentRss>http://www.java-hair.com/articles/rss-comments-entry-15018261.xml</wfw:commentRss></item><item><title>A Pattern for Development: ORM Reverse DTO Pattern</title><category>design pattern</category><category>hibernate</category><dc:creator>Chris Coy</dc:creator><pubDate>Mon, 06 Feb 2012 16:11:13 +0000</pubDate><link>http://www.java-hair.com/articles/2012/2/6/a-pattern-for-development-orm-reverse-dto-pattern.html</link><guid isPermaLink="false">561505:6475783:14899136</guid><description><![CDATA[<p><strong>The following issues and solution are fairly common in a modernization effort,&nbsp;especially when porting from an older system where complex queries already exist and no one wants to change them or tune for other scenarios. While this may not apply to your software effort, it does ease a lot of pain when solving certain niche problems.</strong></p>
<p>Let&rsquo;s start with a disclaimer &ndash; there are few perfect things and I don&rsquo;t claim this is one of them, I just know that this works really well and I hope it helps someone else. I also don&rsquo;t know if anyone&rsquo;s named this pattern already. If so, let me know. If there are any suggestions for better names, like &ldquo;Lightning Bolt,&rdquo; I&rsquo;m all ears.</p>
<p><strong>The Problems this Pattern Solves</strong></p>
<p>Typically in a J2EE project involving Hibernate, the developers will encounter a situation where there are two or three conflicting needs. If they&rsquo;re not specifically in conflict, these needs at least make the job a little difficult.</p>
<p>On one hand, there is a need to tune the Hibernate settings of an Entity bean to perform well in queries and take up minimal memory while executing the least number of sub-queries. On the other hand, there is a need for the Hibernate object to be editable and serializable in its original form, meaning that in some cases all data must be available and non-lazy. A third possible need is that somewhere out there is an Oracle/SQL Server/MySQL etc. DBA who is going crazy trying to tune for all the different ways Hibernate is generating queries. While each of these problems is reasonable on their own, solving all of them simultaneously (while doable,) takes up more effort than it should.</p>
<p>In other words, the following pattern allows the developer to solve all three problems with minimal effort on his or her part and minimal effort on the part of the DBA. Everybody&rsquo;s happy, though I have heard complaints from Java purists. My response to purism is usually the same, whether it&rsquo;s over-normalizing a database or writing software: &ldquo;Purism and strict adherence to design doctrines are a means to an end, they are NOT the end. The end result should be cost effective deployment of a working application that can be maintained.&rdquo; Sometimes I don&rsquo;t actually say all of that, I may just mutter under my breath and go to refill my coffee.</p>
<p><strong>How this Pattern Came to Be</strong></p>
<p>Having been the software architect on several efforts where the above problems manifested (including one where Hibernate staff were involved and liked the approach,) this really didn&rsquo;t become a standard until I was exposed to Oracle ADF. I like ADF quite a bit, it is a very short path to delivery and to a developer or business owner that means some good things. What caught my eye was that the ADF framework separated Entity objects from View objects. In ADF, an Entity object represents a table just like a Hibernate POJO usually represents a table. However, Entity objects proper are hardly ever shown in Lists of Values, Search results and so on. Instead, ADF abstracts the Entity objects with View objects. An ADF View object allows a layer of complexity or simplicity to built on top of one or many Entity objects, or it can be built using only a query as its source.</p>
<p>I decided that if it were a good idea for a core product and I&rsquo;d made a similar concept work in my past projects, then maybe it was time it became a well defined solution to the aforementioned problems. The solution below isn&rsquo;t exactly like ADF&rsquo;s pattern. With ADF, View objects make reference to the underlying Entity objects. In the following pattern, we make an effort NOT to.</p>
<p><strong>What it Is</strong></p>
<p>The concept is very simple in practice. Hibernate mappings and beans are created as usual. However, when it comes time to run queries or search for data, a separate object is used. This second object is a Hibernate object that is not mapped to a table. Rather, it&rsquo;s an object that includes one or more native SQL queries which alias columns. This has several benefits.</p>
<ol>
<li>A DBA can easily tune queries that return more than one result</li>
<li>The Hibernate persistence context doesn&rsquo;t need to track changes to the objects</li>
<li>The objects are immediately detachable without ever needing to worry about lazy loading.</li>
<li>The original entity can be tuned for any kind of eager or lazy fetching. This is especially useful if one isn&rsquo;t using (or doesn&rsquo;t want to deal with,) an &nbsp;OSIV pattern.</li>
</ol>
<p>To get these benefits, a few simple rules must apply to the View/DTO object.</p>
<ol>
<li>Don&rsquo;t map the object to a table</li>
<li>Don&rsquo;t create more than one hibernate object to represent query results -in other words, NO relationship objects. No many to ones, no one to many&hellip; you get the idea.</li>
</ol>
<p>There may be obvious exceptions to these rules and these are just the broad strokes. Usually when I implement this pattern I create a common abstract method in the View object that will allow a developer to get back a valid Serializable key for use in opening up a real Entity object for editing. In my implementations I usually call that method &ldquo;getEntityPrimaryKey()&rdquo; which returns a Serializable. Then I just pass that result to a simple Hibernate get or load operation and work with the Entity.</p>
<p>To reiterate: the purpose here is allow for peaceful coexistence between DBA approved queries, possibly massive search result tuning for various displays and individual tuning for editable objects.</p>
<p>How you choose to implement the pattern is up to you, but if I receive a few requests for examples, I&rsquo;ll gladly post them here.</p>]]></description><wfw:commentRss>http://www.java-hair.com/articles/rss-comments-entry-14899136.xml</wfw:commentRss></item><item><title>Design Considerations When Modernizing Legacy Apps</title><dc:creator>Java Hair Owner</dc:creator><pubDate>Fri, 09 Dec 2011 15:55:48 +0000</pubDate><link>http://www.java-hair.com/articles/2011/12/9/design-considerations-when-modernizing-legacy-apps.html</link><guid isPermaLink="false">561505:6475783:14043071</guid><description><![CDATA[<p>We have done a lot of modernization projects over the past few years, mostly modernizing Oracle Forms applications to a Java web type platform such as JSF or Struts. &nbsp;What we have learned over the years is that one aspect that all of these projects have in common is that making some design decisions at the beginning of the project is really important. &nbsp;Even though customers usually say, follow this style guide, this architecure (or we suggest both), and do the rest as the existing application is, they don't usually realize that there are additional requirements or considerations.</p>
<p><strong>1. &nbsp;Search/Edit Patterns</strong></p>
<p>First of all, as I've mentioned many times, modernizing the application provides a chance to modernize the workflow a little bit. &nbsp;Ultimately you would want to go from data-oriented views to task-oriented views, but often in the interest of time and budget, the customer sticks with the data-oriented views.</p>
<p>Even when staying with data-oriented views, however, it makes sense to think about redesigning the workflow slightly. &nbsp;Most form applications allow search and edit on the same screen, when modernizing it makes sense to split these into search and edit screens. &nbsp;No matter how you do this, make sure you come up with how it will be done for the basic types of screens in the application. &nbsp;Ideally you would want to create mock-ups for each page to demonstrate layout and flow, but unfortunately, this is now always something that can be budgeted for.</p>
<p><strong>2. Keyboard Shortcuts</strong></p>
<p>Many client/server applications make use of keyboard actions. &nbsp;Typical in a forms application, is to have one keystroke for insert, for instance, and the application will determine the data block to be edited based on the component that has focus. &nbsp;While this can be done in web applications, it isn't usually the preferred method.</p>
<p><strong>3. Transaction Handling</strong></p>
<p>Transaction handling will most likely be different when you are using an application server. &nbsp;Interaction with the databse should be done through a pool of database connections set up on the server, this reduces the load on the database but it also means that transactions should be made shorter. &nbsp;If a longer transaction is needed to accomodate the business process it will be necessary to either code the transaction handling and state management manually or make use of a framework that supports longer transactions such as ADF or Seam.</p>
<p><strong>4. Pop-ups vs. Drop-downs</strong></p>
<p>Most web applicaitons make use of drop down lists to provide selection lists to users but older legacy applications often made use of pop-ups. &nbsp;Decide ahead of time which to use and when to use them.</p>
<p><strong>5. Mixed Case Data Entry</strong></p>
<p>Many legacy applications converted text input from the user to uppercase before storing it in the database to make future comparisons easier. &nbsp;These days the amount of processing required to ignore case when search or comparing is minimal and the conversion not necessary. &nbsp;Should the modernized application take advantage of this?</p>
<p><strong>6. Security</strong></p>
<p>Often, in legacy applications, security is handled through database access. &nbsp;In modern applications, database access is normally handled via a pool of connections maintained by an application server. &nbsp;This makes handling security the same way not feasible. &nbsp;Instead, consider using the tools your application server provides for security or some sort of Single Sign On.</p>
<p>These are just a few of the design decisions that need to be made before starting a modernization project regardless of the architecture and frameworks chosen for the new application. &nbsp;Before you embark on such a project, make sure you understand the changes that will need to be made and the implications of those changes on the customer base. &nbsp;Try to get buy-in from the customer-base ahead of time, potentially using a POC or Mock-ups to convey the changes when appropriate.</p>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.java-hair.com/articles/rss-comments-entry-14043071.xml</wfw:commentRss></item><item><title>Another JBO-25030 Problem</title><category>ADF</category><category>adf</category><category>adf 11g</category><category>jbo</category><category>jbo-25030</category><dc:creator>Java Hair Owner</dc:creator><pubDate>Mon, 29 Aug 2011 18:34:56 +0000</pubDate><link>http://www.java-hair.com/articles/2011/8/29/another-jbo-25030-problem.html</link><guid isPermaLink="false">561505:6475783:12665098</guid><description><![CDATA[<p>Chris Muir has a good article explaining a typical <a href="http://one-size-doesnt-fit-all.blogspot.com/2008/05/jbo-25030-failed-to-find-or-invalidate.html">JBO-25030: Failed to find or invalidate owning entity</a> problem.&nbsp; Recently, however, I came across another atypical reason for the same error.</p>
<p>In this particular instance, converting the logic from an exisitng form to an ADF application, there was a master-detail relationship on the page.&nbsp; When the user created a new master record and then attempted to create a new detail record, the JBO-25030 exception would be thrown.&nbsp; What I found when investigating this was that if the user saved the master record first, then added a detail record, everything would work as expected.</p>
<p>Investigating further revealed that there was a primary key on the master record that was not updateable by the user.&nbsp; It was generated by a trigger on the database table.&nbsp; Since the primary key could not be validated when the child record was to be created, the exception was thrown.</p>
<p>This type of issue is easily overcome by putting the logic to get the new primary key (in this case from a sequence) in the ADF Code and removing the table's trigger.</p>]]></description><wfw:commentRss>http://www.java-hair.com/articles/rss-comments-entry-12665098.xml</wfw:commentRss></item><item><title>Google admits I was right, buys Motorola</title><dc:creator>Java Hair Owner</dc:creator><pubDate>Wed, 17 Aug 2011 18:11:54 +0000</pubDate><link>http://www.java-hair.com/articles/2011/8/17/google-admits-i-was-right-buys-motorola.html</link><guid isPermaLink="false">561505:6475783:12543559</guid><description><![CDATA[<p><span id="internal-source-marker_0.8656351674319505" style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">Ok,  so maybe a little hyperbole in the headline, but Google may have admitted that Apple, at least, had it right.&nbsp; A lot has been said about the Motorola purchase and it's implications for the bubbling patent wars but could this purchase represent more than that?</span></p>
<p><span id="internal-source-marker_0.8656351674319505" style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">My <a href="http://www.java-hair.com/articles/2011/6/20/why-apple-has-won-and-oracle-and-google-have-lost.html">last post</a> in this area was about how Apple beat Oracle and Google, referring  to their control over the hardware and the software in their business.  &nbsp;It now appears that Google agrees and decided to do something about the  situation by purchasing Motorola.</span><br /><br /><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">While  some articles have pointed out that Google is both <a href="http://gagagadget.com/wordpress/2011/08/holy-hardware-batman-google-buys-motorola-mobility/">alienating it&rsquo;s  friends</a>, and <a href="http://www.pcworld.com/article/238070/googles_motorola_buy_may_offer_boost_to_microsoft.html">bolstering it&rsquo;s enemies</a>, others have  pointed out that this gives Google the control it needs to make <a href="http://www.wired.com/epicenter/2011/08/is-android-actually-any-good/">Android a  success</a>. &nbsp;Hopefully this will give them a hardware platform that can  keep up with releases of the software and provide a consistent less  bug-prone environment for Android to shine in. &nbsp;If this alienates some  previously Android friendly companies such as Samsung and Sony, so be  it, it may just help them keep up with Apple.</span><br /><br /><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">Of  course the mobile platform is just one industry that Google will now  have a hardware presence in. &nbsp;Motorola does produce a great many cable  boxes which means <a href="http://mashable.com/2011/08/15/google-motorola-google-tv/">Google TV may have found a new platform</a> to shine on as  well. &nbsp;While I love my Tivo, I am curious to see what Google may do in  this arena in the future.</span><br /><br /><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">I  should mention, in regards to my last article, that though Sun did  provide the hardware platform and the software for Java to grow, they  never had any kind of pull in the desktop arena, though they did try.  &nbsp;Sun and Java did become a very popular combination for supporting web  applications. &nbsp;Oracle has also pointed out that one of their reasons  behind the Sun purchase was to provide a hardware platform to support  their database. &nbsp;The <a href="http://en.wikipedia.org/wiki/Oracle_Exadata">Exadata </a>hardware/software combination is a great  example of this ability Oracle now has to control the entire  environment.</span><br /><br /><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">The  trends certainly seem to indicate that while open specifications and  standards are great in some areas, it is easier to move forward when  both the hardware and software can work together closely.</span></p>]]></description><wfw:commentRss>http://www.java-hair.com/articles/rss-comments-entry-12543559.xml</wfw:commentRss></item><item><title>ADF 11g - Using LOV's for Convenience, not Validation</title><dc:creator>Java Hair Owner</dc:creator><pubDate>Thu, 11 Aug 2011 16:06:14 +0000</pubDate><link>http://www.java-hair.com/articles/2011/8/11/adf-11g-using-lovs-for-convenience-not-validation.html</link><guid isPermaLink="false">561505:6475783:12485007</guid><description><![CDATA[<p><span id="internal-source-marker_0.03827438349551582" style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">In  an existing Oracle Forms application we are modernizing for a customer,  the forms in places contain LOV&rsquo;s that exist on the field for  convenience, but not for validation. &nbsp;That is, a user can select an item  from the LOV or they can enter text. &nbsp;The text they enter will not get  added to the table referenced in the LOV, just the current data entry  record.</span><br /><br /><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">When  you create an LOV on an attribute in ADF 11g you can tell ADF what type  of control to use. &nbsp;For this type of control we want an Input Text with  List Of Values. &nbsp;This control will then be placed on the jsp page when  you drag and drop the attribute from your Data Controls panel. &nbsp;When it  creates the control, it will also create a validator for the control,  JDeveloper actually does this for all controls and it allows for  immediate feedback when a mandatory field is not entered or the type of  data does not fit the specified format, or in this case, the entered  data does not match a value in the LOV list. &nbsp;In order to allow the user  to enter a value not in the list, you need to remove the validator. </span><br /><br /><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">In  our case, this has the benefit of looking up a description and  displaying it in another field when a existing value in entered. &nbsp;If an  existing value is not entered, nothing is displayed in the description  field.</span>﻿</p>]]></description><wfw:commentRss>http://www.java-hair.com/articles/rss-comments-entry-12485007.xml</wfw:commentRss></item><item><title>Why Apple has won and Oracle and Google have lost</title><category>Client/Server</category><category>Java</category><category>Java</category><category>Modernization</category><category>iOS</category><dc:creator>Java Hair Owner</dc:creator><pubDate>Mon, 20 Jun 2011 20:57:05 +0000</pubDate><link>http://www.java-hair.com/articles/2011/6/20/why-apple-has-won-and-oracle-and-google-have-lost.html</link><guid isPermaLink="false">561505:6475783:11854935</guid><description><![CDATA[<div>
<p>Working in the field of software modernization and being specifically focused a lot of the time on modernizing client/server applications, that is, bringing native applications to the web, I couldn't help but wonder if we haven't come full circle already. &nbsp;</p>
<p>Many years ago with Sun's release of Java as the write-once, run anywhere answer to every developer's problems, it looked like Java Applets might be the wave of the future. &nbsp;That never did quite catch on as Sun had hoped. &nbsp;It was plagued mainly by the practical problem of having a platform that runs on every operating system in the same if not very similar fashion. &nbsp;Because of this "feature", the platform could be limiting at times. &nbsp;I believe that this type of limitation and the advance of dynamic HTML, CSS, and the web platform in general led to a huge number of web-based applications and a very small number of Java client applications.</p>
<p>Fast forward from then to now and Apple has taken a lesson from Java and decided early on to do things the "right" way. &nbsp;Of course, the "right" way means being in control of the hardware platform as well as the software platform. &nbsp;Because Apple controls the whole environment, "apps" are less likely to break, testing is simplified quite a bit, and even development to some extent is simplified. &nbsp;The result is the creation of some truly amazing client applications for consumers.</p>
<p>Google's Android is a player, but it is starting to suffer from what Java suffered from. &nbsp;I am not an Android user, but I have seen the complaints that some applications are only supported by newer versions of the software but some hardware platforms do not support the newer version. &nbsp;This comes across as an Android problem, but surely Apple has the same problem with their platforms?</p>
<p>For some reason, when I can't get an App for my iphone 3G because it doesn't sport the right hardware, it feels like MY problem for being 3 years behind the technology. &nbsp;That's probably because it isn't just a hardware compatibility issue, the device itself feels clunky and dated compared to newer versions of the iPhone. &nbsp;Android hardware is so varied and different that the same comparison really cannot be made unless it is among one manufacturer.</p>
<p>Anyway, my point is that Apple has created this beautiful sandbox where these great apps can be created that use the web, but are not web applications. &nbsp;They are client/server applications with the server being multi-tiered now. &nbsp;Just look at the articles that have come out regarding iCloud and the amount of app traffic vs. web traffic. &nbsp;iOS is really what Java should have been.</p>
<p>We haven't seen the push at the Enterprise level yet.&nbsp; Most customers want a web application, a more and more sophisticated web application, but still, not native apps.&nbsp; More and more, however, companies are looking at iPads as tools for their workforce and once that happens, their new apps are going to be native iOS apps.</p>
<p>Now the big question remaining is what is Oracle going to do about it?&nbsp; Does Java have a chance or has it's time passed?</p>
<p>&nbsp;</p>
</div>]]></description><wfw:commentRss>http://www.java-hair.com/articles/rss-comments-entry-11854935.xml</wfw:commentRss></item><item><title>Things I learned at UKOUG 2010</title><category>ADF</category><category>conference</category><dc:creator>Java Hair Owner</dc:creator><pubDate>Wed, 08 Dec 2010 16:55:59 +0000</pubDate><link>http://www.java-hair.com/articles/2010/12/8/things-i-learned-at-ukoug-2010.html</link><guid isPermaLink="false">561505:6475783:9676023</guid><description><![CDATA[<p>This year's UKOUG was a really interesting event.&nbsp; There was a stream dedicated to development and most of the presentations were pretty good.&nbsp; What I liked most about it was that even in the sessions I sat through that covered subjects I was already familiar with, I found I learned a new tidbit here or there.</p>
<p>In the Dynamic Forms and Tables in ADF presentation I learned that you can create a basically empty ViewObject (by basing in on something as inane as "select 1 from dual", and then in your Application Module you can create whatever query you want by using the createViewObjectFromSQLStatement method and passing in your SQL.&nbsp; This is a clever idea and I can see some use for it, especially in reporting type screens, but currently the implementation is a little limited.&nbsp; You can create a Dynamic Table to display the results, but the table cannot have sorting or filtering enabled, which, for a lot of the ADF applications we build, would make those screen noticeably different than other screens.</p>
<p>In a presentation about developing products I learned that Oracle MDS can be used to hold customized information for a specific implementation of an application.&nbsp; That is a very useful feature for ISVs.</p>
<p>A presentation about Javascript in ADF taught me that if you want to use it, you should manipulate the UI Component Model and not the DOM or the "Peer Objects" that would also be available but may not staty consistent.</p>
<p>Finally, in addition to learning that a new utility for creating custom skins is being developed, I learned that if I put a parameter called "DISABLE_CONTENT_COMPRESSION" in my web.xml and set it's value to "true", Firebug would be much more useful in helping to create skins.</p>
<p>One of the most important things I learned is that some things you just don't find out unless you attend these conferences.&nbsp; You could spend your entire career with a product like JDeveloper and not know all the tricks, especially the undocumented ones, but one trip to a conference like UKOUG and you could at least pick up a few of them.</p>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.java-hair.com/articles/rss-comments-entry-9676023.xml</wfw:commentRss></item><item><title>ADF Patterns for Forms Conversions</title><category>ADF</category><category>conference</category><category>ukoug</category><dc:creator>Java Hair Owner</dc:creator><pubDate>Fri, 29 Oct 2010 15:53:46 +0000</pubDate><link>http://www.java-hair.com/articles/2010/10/29/adf-patterns-for-forms-conversions.html</link><guid isPermaLink="false">561505:6475783:9323414</guid><description><![CDATA[<p>My presentation:&nbsp; ADF Patterns for Forms Conversions got accepted at UKOUG for this year.&nbsp; I will presenting there on that topic on November 30th at 12:00. <a href="http://techandebs.ukoug.org/default.asp?p=5434&amp;dlgact=shwprs&amp;prs_prsid=5624&amp;day_dayid=46">Here is the abstract.</a>&nbsp; I hope to see you there!</p>
<p>In the past I have done presentations on why converting to ADF is a good idea.&nbsp; This time I will be focusing less on the why and more on the how so it is bound to be a more interesting presentation for those who are actual Forms or even ADF developers.</p>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.java-hair.com/articles/rss-comments-entry-9323414.xml</wfw:commentRss></item><item><title>Welcome to the new Java Hair site!</title><dc:creator>Java Hair Owner</dc:creator><pubDate>Mon, 19 Apr 2010 18:25:31 +0000</pubDate><link>http://www.java-hair.com/articles/2010/4/19/welcome-to-the-new-java-hair-site.html</link><guid isPermaLink="false">561505:6475783:7385878</guid><description><![CDATA[<p>We have had our share of technical difficulties in running the blog site, espcially without resources solely devoted to the the updating and running of the server.&nbsp; To deal with that and to be able to post some new content, we have moved the Java-Hair blog to Squarespace.</p>
<p>One of our staffers will be re-posting the content from the old blog up here on the new site, so you will be sure to see a lot of recycled content in the coming weeks, but after that, we'll be on to the new stuff.</p>
<p>So with our technical issues now behind us, we will continue to delight and enlighten you with our vast knowledge of Java, ADF, XML and other enterprise technologies!&nbsp; Be sure to visit frequently and comment often!</p>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.java-hair.com/articles/rss-comments-entry-7385878.xml</wfw:commentRss></item></channel></rss>
