<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Ed Burns&apos;s Blog</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/" />
<modified>2008-04-26T01:13:54Z</modified>
<tagline></tagline>
<id>tag:weblogs.java.net,2008:/blog/edburns/167</id>
<generator url="http://www.movabletype.org/" version="3.01D">Movable Type</generator>
<copyright>Copyright (c) 2008, edburns</copyright>
<entry>
<title>JavaOne 2008 Picks</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2008/04/javaone_2008_pi.html" />
<modified>2008-04-26T01:13:54Z</modified>
<issued>2008-04-25T16:53:32Z</issued>
<id>tag:weblogs.java.net,2008:/blog/edburns/167.9608</id>
<created>2008-04-25T16:53:32Z</created>
<summary type="text/plain">Ed&apos;s ScheduleBuilder output</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>Here is my table of chosen talks for <a
href="http://java.sun.com/javaone/sf/">JavaOne San Francisco 2008</a>.
I exported it from the ScheduleBuilder tool, sorry for the verbosity.

<span style="float: left;">
<a href="http://www.javaoneconference.com/ct.asp?L=1023&U=60161" target="_blank"><img src="http://www.javaoneconference.com/Buttons/buttons/120x120.gif" alt="j1" width="120" height="120" border="0" /></a>
</span>

</p>

<table  width=650 border="1" cellpadding="3" cellspacing="0"  >
          <tr align="center"> 
            <td width="10%" class=contenttext> Time </td>             
            <td  width="1%" class=contenttext> Remove </td>   
            <!--<td width="10%" align="left" class=contenttext> Room </td>-->
            <td  width="54%" align="left" class=contenttext> Session ID/Title </td>
            <td width="25%" class=contenttext nowrap>Speaker(s)</td>
        </tr>
		
		<tr  bgcolor="#999999"><td colspan=5 valign=top align=left ><font color=white ><b>Tuesday  , May       06</b></font></td></tr> 
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >8:30 AM - 10:30 AM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Sun General Session
Java + YOU 
</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>10:30 AM - 10:50 AM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/06/2008', '10:30');">Content Catalog</a></td></tr>
 <tr><td  align='left' valign='top'  nowrap >10:50 AM - 11:50 AM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28333   ></td><td valign='top' align='left' width=50%> TS-4817<br><a href="javascript:newWnd('session_details.jsp?isid=294817&ilocation_id=191-1&ilanguage=english');">The Java™ Platform Portlet Specification 2.0 (JSR 286)</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=294817&ilocation_id=191-1&icontact_id=25415');">Stefan Hepper</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >11:30 AM - 8:00 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Tuesday Pavilion Hours: 11:30 a.m. - 8:00 p.m.</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >11:50 AM - 12:10 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >11:50 AM - 11:50 AM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Lunch Served from 11:50 a.m. to 2:00 p.m.</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>11:50 AM - 01:30 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/06/2008', '11:50');">Content Catalog</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >1:30 PM - 3:00 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Sun General Session
Java-Centricity: Leveraging Java Technology at the hub of your Digital Life 
</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>03:00 PM - 03:20 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/06/2008', '15:00');">Content Catalog</a></td></tr>
 <tr><td  align='left' valign='top'  nowrap >3:20 PM - 4:20 PM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28402   ></td><td valign='top' align='left' width=50%> TS-5453<br><a href="javascript:newWnd('session_details.jsp?isid=295453&ilocation_id=191-1&ilanguage=english');">Is There A Place For Applets in Web 2.0?</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=295453&ilocation_id=191-1&icontact_id=54999');">Jim Crossley</a>; Gary Thompson</td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >4:20 PM - 4:40 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
 <tr><td  align='left' valign='top'  nowrap >4:40 PM - 5:40 PM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28131   ></td><td valign='top' align='left' width=50%> TS-6589<br><a href="javascript:newWnd('session_details.jsp?isid=296589&ilocation_id=191-1&ilanguage=english');">Defective Java™ Code: Turning WTF Code into a Learning Experience

</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=296589&ilocation_id=191-1&icontact_id=24302');">William Pugh</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >5:40 PM - 6:00 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
 <tr><td  align='left' valign='top'  nowrap >6:00 PM - 7:00 PM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28241   ></td><td valign='top' align='left' width=50%> TS-4956<br><a href="javascript:newWnd('session_details.jsp?isid=294956&ilocation_id=191-1&ilanguage=english');">Creating a JavaServer™ Faces Application from A to Z with JDeveloper </a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=294956&ilocation_id=191-1&icontact_id=51797');">Robert Jackson</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >7:00 PM - 7:30 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Evening Break</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
 <tr><td  align='left' valign='top'  nowrap >7:30 PM - 8:20 PM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28146   ></td><td valign='top' align='left' width=50%> BOF-5031<br><a href="javascript:newWnd('session_details.jsp?isid=295031&ilocation_id=191-1&ilanguage=english');">Upcoming Java™ Programming Language Features</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=295031&ilocation_id=191-1&icontact_id=38204');">Alex Buckley</a>; Maurizio Cimadomore; <a href="javascript:newWnd('speaker_details.jsp?isid=295031&ilocation_id=191-1&icontact_id=17958');">Jonathan Gibbons</a></td></tr>
<tr><td nowrap>08:20 PM - 10:20 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/06/2008', '20:20');">Content Catalog</a></td></tr><tr  bgcolor="#999999"><td colspan=5 valign=top align=left ><font color=white ><b>Wednesday, May       07</b></font></td></tr> 
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >8:30 AM - 9:15 AM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Oracle General Session
Enterprise Application Platform 
</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>09:15 AM - 09:30 AM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/07/2008', '09:15');">Content Catalog</a></td></tr>
 <tr><td  align='left' valign='top'  nowrap >9:30 AM - 10:30 AM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28246   ></td><td valign='top' align='left' width=50%> PAN-5435<br><a href="javascript:newWnd('session_details.jsp?isid=295435&ilocation_id=191-1&ilanguage=english');">The Script Bowl: A Rapid-Fire Comparison of Scripting Languages</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=295435&ilocation_id=191-1&icontact_id=25335');">Guillaume Laforge</a>; <a href="javascript:newWnd('speaker_details.jsp?isid=295435&ilocation_id=191-1&icontact_id=40341');">Charles Nutter</a>; <a href="javascript:newWnd('speaker_details.jsp?isid=295435&ilocation_id=191-1&icontact_id=58939');">Jorge Ortiz</a>; <a href="javascript:newWnd('speaker_details.jsp?isid=295435&ilocation_id=191-1&icontact_id=29216');">Raghavan Srinivas</a>; <a href="javascript:newWnd('speaker_details.jsp?isid=295435&ilocation_id=191-1&icontact_id=55096');">Frank Wierzbicki</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >10:30 AM - 10:50 AM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>10:50 AM - 11:30 AM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/07/2008', '10:50');">Content Catalog</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >11:30 AM - 4:30 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Wednesday Pavilion Hours: 11:30 a.m. - 4:30 p.m.</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >11:50 AM - 11:50 AM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Lunch Served from 11:50 a.m. to 2:00 p.m.</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>11:50 AM - 02:30 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/07/2008', '11:50');">Content Catalog</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >2:30 PM - 2:50 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>02:50 PM - 03:50 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/07/2008', '14:50');">Content Catalog</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >3:50 PM - 4:10 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>04:10 PM - 05:10 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/07/2008', '16:10');">Content Catalog</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >5:10 PM - 6:30 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Evening Break</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >5:30 PM - 6:15 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> AMD General Session
The Role of the Microprocessor in the Evolution of Java Technology </a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>06:15 PM - 06:30 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/07/2008', '18:15');">Content Catalog</a></td></tr>
 <tr><td  align='left' valign='top'  nowrap >6:30 PM - 7:20 PM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=27901   ></td><td valign='top' align='left' width=50%> BOF-5501<br><a href="javascript:newWnd('session_details.jsp?isid=295501&ilocation_id=191-1&ilanguage=english');">Java™ Champions BOF: The Latest Buzz, Highlights, and Panel Discussion</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=295501&ilocation_id=191-1&icontact_id=16116');">Calvin Austin</a>; Manfred Riem</td></tr>
<tr><td nowrap>07:20 PM - 07:30 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/07/2008', '19:20');">Content Catalog</a></td></tr>
 <tr><td  align='left' valign='top'  nowrap >7:30 PM - 8:20 PM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28096   ></td><td valign='top' align='left' width=50%> BOF-4984<br><a href="javascript:newWnd('session_details.jsp?isid=294984&ilocation_id=191-1&ilanguage=english');">The Java™ Platform, Enterprise Edition (Java EE Platform) Community Discussion</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=294984&ilocation_id=191-1&icontact_id=9933');">Roberto Chinnici</a>; <a href="javascript:newWnd('speaker_details.jsp?isid=294984&ilocation_id=191-1&icontact_id=17806');">William Shannon</a></td></tr>
<tr><td nowrap>08:20 PM - 08:30 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/07/2008', '20:20');">Content Catalog</a></td></tr>
 <tr><td  align='left' valign='top'  nowrap >8:30 PM - 9:20 PM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28097   ></td><td valign='top' align='left' width=50%> BOF-5224<br><a href="javascript:newWnd('session_details.jsp?isid=295224&ilocation_id=191-1&ilanguage=english');">Did We Spoil the End User? Building Personalization into JavaServer™ Faces Technology-Based Applications</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=295224&ilocation_id=191-1&icontact_id=55105');">Peter Ebell</a>; <a href="javascript:newWnd('speaker_details.jsp?isid=295224&ilocation_id=191-1&icontact_id=38658');">Lucas Jellema</a></td></tr><tr  bgcolor="#999999"><td colspan=5 valign=top align=left ><font color=white ><b>Thursday , May       08</b></font></td></tr> 
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >8:30 AM - 9:15 AM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Intel General Session
Innovations through Software 
</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>09:15 AM - 09:30 AM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/08/2008', '09:15');">Content Catalog</a></td></tr>
 <tr><td  align='left' valign='top'  nowrap >9:30 AM - 10:30 AM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28275   ></td><td valign='top' align='left' width=50%> TS-5793<br><a href="javascript:newWnd('session_details.jsp?isid=295793&ilocation_id=191-1&ilanguage=english');">Groovy and Grails: Changing the Landscape of Java™ Platform, Enterprise Edition (Java EE Platform) Patterns</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=295793&ilocation_id=191-1&icontact_id=25335');">Guillaume Laforge</a>; <a href="javascript:newWnd('speaker_details.jsp?isid=295793&ilocation_id=191-1&icontact_id=24686');">Graeme Rocher</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >10:30 AM - 10:50 AM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>10:50 AM - 11:30 AM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/08/2008', '10:50');">Content Catalog</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >11:30 AM - 4:30 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Thurdsay Pavilion Hours: 11:30 a.m. - 4:30 p.m.</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >11:50 AM - 11:50 AM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Lunch Served from 11:50 a.m. to 2:00 p.m.</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>11:50 AM - 02:30 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/08/2008', '11:50');">Content Catalog</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >2:30 PM - 2:50 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
 <tr><td  align='left' valign='top'  nowrap >2:50 PM - 3:50 PM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28114   ></td><td valign='top' align='left' width=50%> TS-5979<br><a href="javascript:newWnd('session_details.jsp?isid=295979&ilocation_id=191-1&ilanguage=english');">The JavaServer™ Faces 2.0 Platform Specification</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=295979&ilocation_id=191-1&icontact_id=16456');">Ed Burns</a>; <a href="javascript:newWnd('speaker_details.jsp?isid=295979&ilocation_id=191-1&icontact_id=17705');">Roger Kitain</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >3:50 PM - 4:10 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>04:10 PM - 05:10 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/08/2008', '16:10');">Content Catalog</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >5:10 PM - 6:30 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Evening Break</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >5:30 PM - 6:15 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Motorola General Session
Dial in, Drive Deep: Using Motorola's Platforms to Reach Consumer and Enterprise Markets 
</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>06:15 PM - 09:20 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/08/2008', '18:15');">Content Catalog</a></td></tr><tr  bgcolor="#999999"><td colspan=5 valign=top align=left ><font color=white ><b>Friday   , May       09</b></font></td></tr> 
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >8:30 AM - 10:30 AM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Sun General Session
Extreme Innovation </a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>10:30 AM - 10:50 AM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/09/2008', '10:30');">Content Catalog</a></td></tr>
 <tr><td  align='left' valign='top'  nowrap >10:50 AM - 11:50 AM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28120   ></td><td valign='top' align='left' width=50%> TS-6391<br><a href="javascript:newWnd('session_details.jsp?isid=296391&ilocation_id=191-1&ilanguage=english');">Using Java™ Technology at the World’s Largest Web Site</a></a></td><td align='left' valign='top'  >Joshua Blatt; <a href="javascript:newWnd('speaker_details.jsp?isid=296391&ilocation_id=191-1&icontact_id=55506');">Dean Yu</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >11:50 AM - 12:10 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >11:50 AM - 11:50 AM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Lunch Served from 11:50 a.m. to 2:00 p.m.</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>11:50 AM - 01:10 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/09/2008', '11:50');">Content Catalog</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >1:10 PM - 1:30 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
 <tr><td  align='left' valign='top'  nowrap >1:30 PM - 2:30 PM</td><td width='5%' align='center' ><input type=checkbox name=p_removed value=28521   ></td><td valign='top' align='left' width=50%> TS-6517<br><a href="javascript:newWnd('session_details.jsp?isid=296517&ilocation_id=191-1&ilanguage=english');">Road Test Results of the “Big Three” Web Application Frameworks</a></a></td><td align='left' valign='top'  ><a href="javascript:newWnd('speaker_details.jsp?isid=296517&ilocation_id=191-1&icontact_id=55546');">Sujoe Bose</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >2:30 PM - 2:50 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>02:50 PM - 03:50 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/09/2008', '14:50');">Content Catalog</a></td></tr>
<tr bgcolor='#dedede' ><td  align='left' valign='top'  nowrap >3:50 PM - 4:10 PM</td><td width='5%' align='center' >&nbsp;</td><td valign='top' align='left' width=50%> Break between sessions</a></td><td align='left' valign='top'  >&nbsp;</td></tr>
<tr><td nowrap>04:10 PM - 05:10 PM</td><td colspan='4'>To schedule a session during this timeslot, please return to the <a href=# onclick="returnToCC('05/09/2008', '16:10');">Content Catalog</a></td></tr>
		
       </table>  

<p><span class="technoratitag"> Technorati Tags: <a href="http://www.technorati.com/tags/edburns" rel="tag">edburns</a></span>
</p>

]]>

</content>
</entry>
<entry>
<title>JSF 2.0 Update</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2008/02/jsf_20_update.html" />
<modified>2008-02-25T16:42:44Z</modified>
<issued>2008-02-25T16:42:16Z</issued>
<id>tag:weblogs.java.net,2008:/blog/edburns/167.9264</id>
<created>2008-02-25T16:42:16Z</created>
<summary type="text/plain">New JSF 2.0 features, including Ajax Update.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Specification Requests</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>Here's an ultra quick update on where <a
href="https://javaserverfaces-spec-public.dev.java.net/">the JSR-314
Expert Group</a> is with JSF 2.0 developments.  Everything relating to
JSF 2.0 Expert Group developments is subject to change until the <a
href="http://jcp.org/en/procedures/jcp2#3.2">Proposed Final Draft</a>
version of the spec is released.</p>

<p>The ever resourceful and "do-the-right-thing"ful <a
href="http://blogs.sun.com/rlubke/">Ryan Lubke</a> has started a series
of blog entries showing how to use some <a
href="http://blogs.sun.com/rlubke/entry/jsf_2_0_new_feature2">JSF 2.0
features</a>.  Not all of the below features are showcased in Ryan's
blog just yet, but here's a look at what's coming in what's coming
(how's that for cutting edge!)</p>

<blockquote><p>Speaking of cutting edge, if you want to find out how
today's top programmers stay that way, check out my new book, <a
href="http://purl.oclc.org/NET/RidingTheCrest">Secrets of the Rockstar
Programmers</a> from McGraw-Hill, available in stores in
March.</p></blockquote>

	<ul>

	  <li><p>Ajax.  Tracked at <a href="https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=293">issue 293</a>.</p>

<p>We finally have a solution to the thorny, "my component needs a
resource (script, stylesheet, image), it needs to be in the HEAD (or
body, or form), but I'm not in the HEAD (or body or correct form).  Can
you please just 'do the right thing' for me?"</p>

<p>We've decided there will be a top level ajax.js file and that this
file will contain the standard JSF 2.0 JavaScript API.  We haven't
established what will be in this API, but it will have the following
attributes:<p>

<ul type="square">


<li><p>In a page that uses JSF, there must be a top level JavaScript
object named "javax", whose type is a JavaScript associative array.
We've undertaken the necessary communication with the Open Ajax
Alliance, and their <a
href="http://www.openajax.org/OpenAjax%20Hub.html">Hub</a> concept to
reserve the "javax" namespace.</p>

</li>

	  <li><p>Within that top level JavaScript object, found in the
	  OpenAjax Hub, there will be a "faces" property, whose value
	  must be another JavaScript associative array.</p></li>

	  <li><p>Within the "faces" JavaScript object, there will be yet
	  another JavaScript associative array, under the key "Ajax".
	  </p></li>

	  <li><p>This JavaScript associative array, will have properties
	  that <strong>are</strong> the JavaScript functions that
	  comprise the JSF 2.0 JavaScript API </p></li>

	  <li><p>If any components in the page declare they require the
	  JSF 2.0 JavaScript API, the runtime must guarantee that the
	  ajax.js file is delivered to the client and that this file
	  satisfies the above conditions. </p></li>

</ul>


<p>We're working to finalize spec details on the above items before
proceeding with fleshing out the actual JSF 2.0 JavaScript API.  I'm
certain it will include JavaScript functions for:</p>

<ul type="square">

	  <li><p>Partial page refresh via ajax
	  </p></li>

	  <li><p>Partial page update via ajax
	  </p></li>

	  <li><p>Given a jsf componentId or clientId, give me the client
	  DOM Element that corresponds to the outermost markup for that
	  component.  </p></li>

	  <li><p>Give me the JSF View State that would be sent in a
	  POSTBACK or Ajax request.</p></li>

</ul>


          </li>

	  <li><p>EZComp.  Tracked at <a href="https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=273">issue 273</a>.</p>

<p>This one has stalled a bit due to Ajax.  However, one aspect that has
proceeded is <a
href="https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=240">MegaListeners</a>.
Once we have this checked in, look to <a
href="http://blogs.sun.com/rlubke/">Ryan Lubke's Blog</a> &lt;<a
href="http://blogs.sun.com/rlubke/">http://blogs.sun.com/rlubke/</a>&gt;
for tips on how to use it.</p>

<p>Two more features of note are the new <a
href="https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=290">view
scope</a>, and the <a
href="https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=313">RAILS_ENV</a>.</p>

</li>


	</ul>

]]>

</content>
</entry>
<entry>
<title>The Joy of JCP</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2007/11/the_joy_of_jcp_1.html" />
<modified>2007-11-08T03:04:54Z</modified>
<issued>2007-11-08T03:04:40Z</issued>
<id>tag:weblogs.java.net,2007:/blog/edburns/167.8598</id>
<created>2007-11-08T03:04:40Z</created>
<summary type="text/plain">Ed shares a story about the vitality of the JSF 2.0 Expert Group.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Specification Requests</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>I have spent some time this week doing a bit of research about
Google's OpenSocial project and, from my perspective, it doesn't seem so
open.  None of the heavy hitters in the server side application platform
market are participating.  This can concievably be explained by the fact
that OpenSocial is all about REST and JavaScript.  "The Web is the
Platform" not, "The App Server is the Platform", so naturally the server
side application usual suspects would not be included.  Why then is
Oracle listed as a partner?  In the world of server side applications,
Oracle's chosen platforms have been Java and (somewhat) .NET.  If
OpenSocial was truly open, wouldn't you expect Oracle's peers, the other
major players in the server side application space, to be invited?</p>


<p>Leaving Oracle aside, there were some other glaring omissions from
the web 2.0 space.  Neither Yahoo! nor Facebook participated.  Were they
invited?  Won't people want to use Flickr based apps on their chosen
social platform?  Finally, if you want to call something open, there's
usually some sort of governancy body that ensures the stakeholders are
equally represented (for some definition of "equal").</p>


<div style="float: left; padding: 20px;">
<img alt="duckherder.jpg" src="http://weblogs.java.net/blog/edburns/archive/duckherder.jpg" width="238" height="191" />
<p>The Job of the JCP Spec Lead</p>
</div>

<p>I'd like to contrast this with the (admittedly much smaller) world of
the Java Community Process (JCP) and my (smaller still) view of it as
the co-spec lead of the JavaServer Faces (JSF) 2.0 Expert Group (EG).</p>

<p>At the beginning of October I received an email from JSF stake holder
and JBoss representative Gavin King.  Gavin had some concerns about how
I had been running the JSR.  Chief among them was his concern that the
important voices in the JSF community were not being herd on the EG.
While I respectfully disagreed about that being the case, I agreed to
make some changes to address his concerns.</p>

<p>One such change was to delegate the initial design work for our <a
href="https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=273">top
priority issue for JSF 2.0</a> to JSF stake holder and Facelets creator
Jacob Hookom.  Jacob shared his initial sketch with the EG today and
immediately we had useful constructive feedback from Ken Paulsen,
creator of JSFTemplating, and Gary VanMatre, creator of Apache Shale
Clay.  That means all of the major templating languages for JSF are
actively contributing to JSF 2.0.  That's JCP at its best.</p>

<span class="technoratitag">  Technorati Tags: <a href="http://www.technorati.com/tags/edburns" rel="tag">edburns</a></span>
]]>

</content>
</entry>
<entry>
<title>JSF Usage and JSF 2.0 Update</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2007/11/jsf_usage_and_j.html" />
<modified>2007-11-06T16:36:02Z</modified>
<issued>2007-11-06T16:35:49Z</issued>
<id>tag:weblogs.java.net,2007:/blog/edburns/167.8582</id>
<created>2007-11-06T16:35:49Z</created>
<summary type="text/plain">I share the latest discoveries about sites using JSF and give a quick update on JSF 2.0.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Enterprise</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<div style="float: left; padding: 20px;">
<a target="_" href="http://weblogs.java.net/blog/edburns/archive/realworldjsflinks.png"><img alt="Graphical Indicators of JSF Usage" src="http://weblogs.java.net/blog/edburns/archive/realworldjsflinks.png" width="320" height="240" /></a>
<p>Graphical Indicators of JSF Usage</p>
</div>

<p>From time to time, the JSF team at Sun surfs around a bit looking for
new Internet sites using JSF.  This time, my colleague <a
href="http://weblogs.java.net/blog/rogerk/">Roger Kitain</a> discovered
that <a href="http://www.virginmegastores.co.uk/index.jsf">Virgin
Megastore</a> is a JSF User.</p>

<p>Within Sun, we have an <a
href="http://en.wikipedia.org/wiki/Elevator_pitch">elevator
pitch</a>-like slide deck about JSF, and the most important slide
therein is at the left.  If you want more details about the sites
pictured, or you want to add some more sites to the list using JSF, the
wiki page is &lt;<a
href="http://wiki.java.net/bin/view/Projects/RealWorldJSFLinks">http://wiki.java.net/bin/view/Projects/RealWorldJSFLinks</a>&gt;.</p>

<p>By way of update on JSF 2.0, Jacob Hookom, the developer of Facelets
and JSF Expert Group member, is leading the drive toward our number one
<a
href="https://javaserverfaces-spec-public.dev.java.net/#EDR_Goals">goal
for JSF 2.0</a>: Making custom components easier to develop.  We're
expecting an EG-private proposal from Jacob this week.  Once we get it
firmed up we'll share it publically in an Early Draft Review of the
spec.  In other JSF 2.0 news, we have provisionally closed on the issue
of resource loading, as listed in [<a
href="https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=115">115-CompResources</a>].
This will also be in the EDR.</p>

<span class="technoratitag">  Technorati Tags: <a href="http://www.technorati.com/tags/edburns" rel="tag">edburns</a></span>]]>

</content>
</entry>
<entry>
<title>Swiss JSF User Group Formed</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2007/08/swiss_jsf_user.html" />
<modified>2007-08-01T18:59:47Z</modified>
<issued>2007-08-01T18:56:55Z</issued>
<id>tag:weblogs.java.net,2007:/blog/edburns/167.7959</id>
<created>2007-08-01T18:56:55Z</created>
<summary type="text/plain">I presented at the world&apos;s first JSF user group meeting.  </summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Enterprise</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>
Because I was presenting <a
href="http://www.mozilla.org/projects/blackwood/webclient/">MCP</a> at
the first ever <a href="http://jazoon.com/">Jazoon conference</a>, my
friend and expert JSF Developer Alexander Jesse invited me to speak at
the first ever JSF User Group meeting.  The meeting was held at a <a href="http://www.credit-suisse.com/" target="_">Credit
Suisse</a> office in Z&uuml;rich on the evening of the last day of the
Jazoon conference.</p>

<p>Credit Suisse is the largest financial institution to go public with
its investment in JSF, though I have it on good authority that Deutsche
Bank, and Oesterreichische Kontrollbank also have made significant
investments in JSF.  Mr. Jesse's <a
href="http://jazoon.com/en/conference/presentations/wp/1400">presentation</a>
at Jazoon detailed how Credit Suisse has achieved significant advances
in developer productivity, UI uniformity, and maintainability by
creating a custom JSF component library specific to the needs of Credit
Suisse IT developers.  Mr. Jesse printed up flyers announcing the JSF
user group meeting and these were distributed in the Sun and Credit
Suisse booths in the exhibitor area, as well as at every one of the five
JSF related presentations at Jazoon.</p>

<p>The primary goals of this inaugural meeting was to decide if there
was a need for a JSF user group in Switzerland, should the group be a
special interest group (SIG) within <a href="http://www.jugs.ch/"
target="_">JUGs</a> or a standalone group, and how often should the
group meet.  Secondarily, Mr. Jesse and I would present some fun
technical content, not found anywhere else at Jazoon.</p>

<p>The slides from the meeting can be found here:</p>

<ul>

<li><p><a href="http://weblogs.java.net/blog/edburns/archive/scripting-jsf.odp" target="_">Scripting JSF</a></p></li>

<li><p><a href="http://weblogs.java.net/blog/edburns/archive/20070628-swiss-jsf-user-group-jsf-2_0.odp" target="_">JSF 2.0</a></p></li>

<li><p><a href="http://weblogs.java.net/blog/edburns/archive/20070628-jsf-ug-ch.ppt"> Alexander Jesse Slides</a> JSF, Quo Vadis (in German)</p></li>

</ul>

<p>We had about 22 people attending the meeting, about half of whom had
heard of it from the conference.  The response was enthusiastic.  Alexander's notes from the meeting can be found at his blog, at &lt;<a href="http://ajesse.wordpress.com/2007/07/12/jsf-usergroup-ch-meeting-1/">http://ajesse.wordpress.com/2007/07/12/jsf-usergroup-ch-meeting-1/</a>&gt;.</p>

<p>Please leave a comment on this blog if you're interested in the next
meeting.</p>

<span class="technoratitag">  Technorati Tags: <a href="http://www.technorati.com/tags/edburns" rel="tag">edburns</a></span>]]>

</content>
</entry>
<entry>
<title>Vacation: Backwards Compatibility Story</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2007/07/vacation_backwa.html" />
<modified>2007-07-25T23:40:38Z</modified>
<issued>2007-07-25T23:40:30Z</issued>
<id>tag:weblogs.java.net,2007:/blog/edburns/167.7918</id>
<created>2007-07-25T23:40:30Z</created>
<summary type="text/plain">I share a small story about backwards compatibility.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Enterprise</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>Back in <a href="http://www.uiuc.edu/">college</a> I spent many hours
of my copious Freshman year free time playing <a
href="http://en.wikipedia.org/wiki/LHX_Attack_Chopper">LHX</a> on <a
href="http://share-it.gatech.edu/author/will">Will Day's</a> PC.  At the
time, all I had was an Apple //c, which was already behind the times by
then.  As you can read in the Wikipedia entry, this was a flight
simulation game.  The thing I remember most was the "missle-cam" view,
where you could fire a TOW missle and then switch to the missle's eye
view, where you controlled the missle until it hit the target.  Well,
during my recent vacation, I decided to see if I could find a way to
play it on a current computer.  Sure enough, the thing still runs
unmodified.  No emulator or anything.</p>

<p>As we're starting up <a
href="http://jcp.org/en/jsr/detail?id=314">JSF 2.0</a> I'll keep this
runtime backwards compatibility firmly in mind as I corral debate and
discussion on new features.</p>


<span class="technoratitag">  Technorati Tags: <a href="http://www.technorati.com/tags/edburns" rel="tag">edburns</a></span>]]>

</content>
</entry>
<entry>
<title>JSF 2.0 EG Kick Off Meeting: Buy a Feature</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2007/05/jsf_20_eg_kick.html" />
<modified>2007-05-21T19:39:46Z</modified>
<issued>2007-05-15T03:59:08Z</issued>
<id>tag:weblogs.java.net,2007:/blog/edburns/167.7402</id>
<created>2007-05-15T03:59:08Z</created>
<summary type="text/plain">A description of the JSF 2.0 EG Kick-Off meeting where we played an Innovation Game to help discover our priorities.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Specification Requests</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>Even though we haven't yet officially filed the JSR for JSF 2.0,
we're darn close, and I felt we could not afford to miss the opportunity
to have a JSF 2.0 Expert Group kick off meeting at JavaOne this year.
Once again we were blessed with a great turnout (19 people, including a
special visit from <a href="http://blogs.sun.com/jonathan/">Jonathan
Schwartz</a>, see <a href="#roster">the roster</a>).  Instead of
spending time gathering requriements or kibbutzing, I decided the
requirements we have already gathered were good enough for now.  Our
first order of business as the JSF 2.0 Expert Group was to prioritize
these requirements so we can build a schedule.</p>

<p>To complete this exercise, we used one of Luke Hohmann's Innovation
Games: <a
href="http://www.innovationgames.com/Game/BuyAFeature.aspx">Buy a
Feature</a>.  From Luke's description: </p>

<blockquote>
Create a list of features with an estimated cost. The cost can be
development effort or something else; although the cost can be the
actual cost you intend to charge for the feature, this is usually not
required. Customers buy features that they want in the next
release. Make certain that some features are priced high enough that no
one customer can buy them. This will help motivate negotiations between
customers as to which features are most important. Encourage customers
to pool their money to buy especially important / expensive
features. Works best with 4-5 customers in a group, so that you can
create more opportunities for customers to pool their money through
negotiating.
</blockquote>

<p>"Buy a Feature" is just one of the great games in Luke's book, <u><a
href="http://www.amazon.com/Innovation-Games-Creating-Breakthrough-Collaborative/dp/0321437292/ref=pd_bbs_sr_1/002-8440464-8460023?ie=UTF8&s=books&qid=1179146533&sr=8-1">Innovation
Games: Creating Breakthrough Products Through Collaborative Play
</a></u>.  </p>

<p>Exercising spec lead authority, I looked at 1) <a
href="https://javaserverfaces-spec-public.dev.java.net/proposals/JSF-2_0-draft.html">the
JSR draft</a>, 2) <a
href="http://wiki.java.net/bin/view/Projects/Jsf2RequirementsScratchpad">the
Requirements Scratchpad</a>, and 3) Alex Smirnov's requirements
document, and picked 15 requirements using a weighting algorithm.  I
assigned prices to each based on how much spec effort I thought it would
take to specify each feature.  I took the final 15 into the meeting.
JCP Experts being JCP Experts, there was some disagreement over my
inclusions and omissions from the list.  I pushed aside this
disagreement, for the most part, and only allowed two changes to the
menu at the meeting.  The actual menu used at the meeting follows.
</p>

<table border="1">
<caption>Table 1 - Menu of JSF 2.0 Features available for purchase</caption>
<tbody><tr>

<th>
Feature Name
</th>

<th>
Feature
</th>

<th>
Cost (USD)
</th>

</tr>

<tr>

<td>Facelets
</td>



<td>Real world, production view description technology, including
templating: include something influenced by Facelets, JSFTemplating or
Tiles in the specification.  Also includes component aggregation: allow
development of true JSF custom component with little or no Java coding
by aggregating existing simple components.
</td>

<td>165</td>

</tr>

<tr>

<td>Zero Deployment Time
</td>

<td>Eliminate the "deployment step". All the artifacts that comprise a JSF
application can be modified while the application is running. This will
bring the responsiveness people have been used to with iterative JSP
development to the JSF developer. One design idea for this is to allow
JSF artifacts to be authored in Script.
</td>

<td>100</td>

</tr>

<tr>

<td>EZComp
</td>

<td>Make it really easy to create JSF custom components.
</td>

<td>100
</td>

</tr>

<tr>

<td>Ajax
</td>



<td>Expand the request processing lifecycle to be aware of Ajax. This may
include describing a small developer-contract footprint JavaScript
library as part of the JavaServer Faces specification.  Enable
components to have a client based lifecycle in addition to, or instead
of the server based request/response lifecycle. Such a client based
lifecycle would enable use-cases such as drag-and-drop, master-detail
and sub-dialogs on a single page interface web application.
</td>

<td>80</td>

</tr>


<tr>

<td>Errors
</td>



<td>Better Error reporting, like what you get with Tapestry (also in
JSR-252-EG, where it was said: any time there is an error in *any* part
of the lifecycle, the user should see not just a cryptic stack trace,
but also the component - including file and line number - that triggered
the problem, the EL expression that was being evaluated - including the
part of the EL expression that triggered the problem,
etc. Diagnosability for state saving is also important. On this point,
Gavin King wants to have centralized error handling, with an
interception point, perhaps using navigation rules, to help handle
errors.)
</td>

<td>80</td>

</tr>

<tr>

<td>MegaListeners
</td>



<td>You want to be able to add listeners for various kinds of lifecycle
application events.  Maybe, "call this each time something validates,"
or "call this after everything successfully validates."  "before JSF
initializes", "after JSF is done initializing",
</td>

<td>50</td>

</tr>

<tr>

<td>Convention over Configuration
</td>



<td>Allow for "zero configuration" web applications. No faces-config.xml, no
web.xml. 
</td>

<td>50</td>

</tr>

<tr>

<td>Mostly GET
</td>



<td>Allow for bookmarkable JSF pages. More broadly, if HTTP GET can be used,
it should be used.
</td>

<td>80</td>

</tr>

<tr>

<td>AnnotationFest
</td>



<td>Leverage annotations to declare JSF artifacts (components, managed
beans, navigation rules, etc) to the runtime.
</td>

<td>25</td>

</tr>

<tr>

<td>Declarative Rendering
</td>



<td>Declarative Renderers, otherwise known as Renderers without resorting to
out.println().
</td>

<td>25</td>

</tr>

<tr>

<td>Fix State Saving
</td>



<td>Re-do UIComponent state saving with a view towards making stateless
components the default.
</td>

<td>80</td>

</tr>

<tr>

<td>Skins
</td>



<td>"Skinning", or "Themeing" of components.  This also would include
per-user personalizations that could be applied to the components.
</td>

<td>60</td>

</tr>




<tr>

<td>Singleton Precedence
</td>



<td>ViewHandler (and other parts of JSF) ordering when there are multiple
implementations -- also perhaps restrict to certain URLs
</td>

<td>40</td>

</tr>

<tr>

<td>Validation++
</td>



<td>Decent inter-component and form-level validation
</td>

<td>15</td>

</tr>

<tr>

<td>Programmatic Config Access
</td>



<td>Programmatic access to and modification of faces-config.xml and web.xml,
perhaps as a DOM instance.
</td>

<td>50</td>

</tr>

<tr>

<td>
</td>

<td><b>Total</b>
</td>

<td> <b>1000</b>
</td>


</tr>

</tbody></table>


<table style="margin:1%;float:left;" border="1">

<caption>Table 2 - Purchased Features</caption>

<tbody>

<tr>

<th>Feature Name
</th>

<th>Number of units purchased
</th>

</tr>

<tr>

<td>Ajax
</td>

<td>5
</td>

</tr>

<tr>

<td>Facelets
</td>

<td>4
</td>

</tr>

<tr>

<td>Annotations
</td>

<td>4
</td>

</tr>

<tr>

<td>State Saving
</td>

<td>4
</td>

</tr>

<tr>

<td>Validation
</td>

<td>4
</td>

</tr>

<tr>

<td>EZComp
</td>

<td>3
</td>

</tr>

<tr>

<td>Errors
</td>

<td>3
</td>

</tr>

<tr>

<td>Mostly GET
</td>

<td>3
</td>

</tr>

<tr>

<td>Singleton Precedence
</td>

<td>3
</td>

</tr>

<tr>

<td>MegaListeners
</td>

<td>2
</td>

</tr>

<tr>

<td>Declarative Renderers
</td>

<td>1
</td>

</tr>

<tr>

<td>Convention over Configuration
</td>

<td>1
</td>

</tr>

<tr>

<td>Skins
</td>

<td>1
</td>

</tr>

</tbody>

</table> 

<h3>Playing the Game</h3>

<p>We broke down into groups of four, and Roger Kitain, Dennis Byrne and
I played the role of feature retailers.  Dennis Byrne, who works for
world-famous XP Consulting firm <a
href="http://www.martinfowler.com/bliki/">ThoughtWorks</a> remarked that
his firm uses similar techniques to discover the preferences of clients.
From his experience in playing such games, he was very pleased with the
amount of high quality discussion in the groups, and so was I.  These
people clearly had strong opinions about web application frameworks, but
at the same time were professional in sharing them.  The collaboration
aspect of the game was a success, which in itself is a good outcome to a
JCP Expert Group kick-off meeting.</p>

<p>After each of the four groups had completed their shopping, I
collected the results which are summarized in the following table.</p>



<h3>Conclusion</h3>

<p>There were some problems with the exercise.  Ever the inveterate
gamer, Howard Lewis-Ship pointed out (sadly, after the exercise was
complete) that we had given too much money to each individual, which
under-constrained the participants and thus masked their true feelings.
This was an honest miscalculation, which I deeply regret.  In addition,
participants complained of a lack of consistent level of detail among
the menu items.  Some were very low level and specific, others high
level and generic.  This required each group to re-define the generic
items for their own purposes, and naturally each one did it in their own
way.  Each menu item was not cleanly disjoint from all the others,
leading to a participant to have to choose between items that both
possesed <strong>some</strong> of what they were looking for.  In spite
of these problems, I consider the exercise a success, for the experience
in playing it for future meetings, and, to a lesser extent, for the hard
data produced.</p>

<h3>Postscript</h3>

<p>Finally, I was delighted to have bumped into Jonathan Schwartz in the
halls of the Sun building where the meeting was being held.  Having
known Jonathan from my days at <a
href="http://en.wikipedia.org/wiki/Lighthouse_Design">Lighthouse
Design</a>, and knowing that deeply understands developers, I felt
confident in asking him to stop by the meeting and thank the EG members
for donating their time to the Java Community Process.  He went one step
further and hung out for a little bit collecting data on how well the EG
members felt the JCP was working.</p>


<h3><a name="roster">Attendees</a></h3>

<table border="1">

<caption>Table 3 - Attendance Roster</caption>

<tr>

<th>Group
</th>

<th>Name
</th>

<th>Representing
</th>

</tr>

<tr>

<td rowspan="4">1
</td>

<td>Gavin King
</td>

<td>RedHat (from JBoss)
</td>

</tr>

<tr>

<td>Kito Mann
</td>

<td>Self
</td>

</tr>

<tr>

<td>Stephen Kenna
</td>

<td>IBM
</td>

</tr>

<tr>

<td>John ?
</td>

<td>Computer Associates
</td>

</tr>

<tr>

<td rowspan="4">2
</td>

<td>Jacob Hookom
</td>

<td>Self
</td>

</tr>

<tr>

<td>Howard Lewis-Ship
</td>

<td>Self
</td>

</tr>

<tr>

<td>Martin Marinscheck
</td>

<td>Apache Software Foundation
</td>

</tr>

<tr>

<td>Alexander Smirnov
</td>

<td>Exadel
</td>

</tr>

<tr>

<td rowspan="4">3
</td>

<td>Manfred Geiler
</td>

<td>Apache Software Foundation
</td>

</tr>

<tr>

<td>Keith Donald
</td>

<td>Interface 21
</td>

</tr>


<tr>

<td>Peter Yueng
</td>

<td>Ericsson
</td>

</tr>

<tr>

<td>Damien Garbarino
</td>

<td>ILOG
</td>


</tr>

<tr>

<td rowspan="4">4
</td>

<td>Cleo Baretto
</td>

<td>ILOG
</td>

</tr>

<tr>

<td>Howard Abrams
</td>

<td>Computer Associates
</td>

</tr>

<tr>

<td>Igor Shabylov
</td>

<td>Exadel
</td>

</tr>

<tr>

<td>Ted Goddard
</td>

<td>ICESoft
</td>

</tr>

<tr>

<td rowspan="3">Facilitators
</td>

<td>Ed Burns
</td>

<td>Sun
</td>

</tr>

<tr>

<td>Roger Kitain
</td>

<td>Sun
</td>

</tr>

<tr>

<td>Dennis Byrne
</td>

<td>Apache Software Foundation
</td>


</tr>


</table>
]]>

</content>
</entry>
<entry>
<title>Testing Ajax Apps with JUnit</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2007/05/testing_ajax_ap.html" />
<modified>2007-05-04T21:47:29Z</modified>
<issued>2007-05-04T21:47:22Z</issued>
<id>tag:weblogs.java.net,2007:/blog/edburns/167.7230</id>
<created>2007-05-04T21:47:22Z</created>
<summary type="text/plain">I show how to use JUnit, combined with the Mozilla Control Program, to write in-depth automated tests of Ajax web applications.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Enterprise</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>JavaOne is practically here, so I thought I'd give a preview of one
of the sessions I'm on next week.  This one is close to my heart, <a
target="_"
href="http://www28.cplan.com/sb158/session_details.jsp?isid=285825&ilocation_id=158-1&ilanguage=english">BOF
6825 Testing Web 2.0 Features, Using Real-World Applications</a>.  I'll
be talking about using <a
href="http://www.mozilla.org/projects/blackwood/webclient/">The Mozilla
Control Program (MCP)</a> to write an automated test that exercise an
Ajax application.  Big deal, right?  Well, yes because MCP enables you
to make assertions about the actual Ajax transactions, and also allows
you to access the browser DOM using the plain old W3C DOM API in
Java.</p>

<p>To make this easy, I've recorded an Elluminate screencast showing MCP
in action testing the <a
href="http://webdev2.sun.com/#jMakiDemo">Dynamic Faces and jMaki sample
application</a>.  If you're a Sun employee and you choose not to view
this screencast just because I'm making you use JavaWebStart to view it,
please tell me so I can report you to the "eating our own dogfood"
police. </p>

<p>To view the screencast, click <a href="https://sas.elluminate.com/site/external/jwsdetect/playback.jnlp?psid=2007-05-04.1321.M.69C1B1B827565A3867AFCD7235AF77.vcr">here</a>.</p>
]]>

</content>
</entry>
<entry>
<title>Pre-JCP-filed draft for JavaServer Faces 2.0 JSR</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2007/03/prejcpfiled_dra_1.html" />
<modified>2007-03-30T16:28:05Z</modified>
<issued>2007-03-30T16:27:51Z</issued>
<id>tag:weblogs.java.net,2007:/blog/edburns/167.6957</id>
<created>2007-03-30T16:27:51Z</created>
<summary type="text/plain">A call for review of a draft version of the JSF 2.0 JSR.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Specification Requests</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>It's about time we get moving on JSF 2.0, so Sun's JSF team decided
to go public with a pre-JCP-filing of the JSR for JavaServer Faces 2.0.
The draft of the document at &lt;<a
href="https://javaserverfaces-spec-public.dev.java.net/proposals/JSF-2_0-draft.html">https://javaserverfaces-spec-public.dev.java.net/proposals/JSF-2_0-draft.html</a>&gt;
has been through several rounds of Sun internal review and also was
reviewed by the JSF 1.2 Expert Group.  Please review the draft and post
comments here on this blog.
</p>

<p>If you want to go even deeper into shaping JSF 2.0 and the JSR
submission, you can view and edit the wiki for a <a
href="http://wiki.java.net/bin/view/Projects/Jsf2RequirementsScratchpad">JSF
2.0 Requirements Scratchpad document</a>.  When the JSR gets rolling,
the requirements in that document will be turned into issues in the <a
href="https://javaserverfaces-spec-public.dev.java.net/servlets/ProjectIssues">JavaServer
Faces Specification Issue Tracker</a>.</p>

<p>Finally, I'd like to take this opportunity to extend an invitation to
several individuals outside of the JSF community to join us in
developing the next version of the Java standard web application
framework.  Specifically, I call upon Howard Lewis-Ship, Geert Bevin,
Eelco Hillenius, and Tim Fennell to consider <a
href="http://www.jcp.org/en/participation/membership">Joining the
JCP</a> so they can join the Expert Group when it forms.  Of course,
there are many other folks whose expertise would be appreciated on the
Expert Group, but Howard, Geert, Eelco and Tim come to mind because each
of them has their own web framework outside of JSF.</p>

<p>Please let us know what you think about starting JSF 2.0!</p>
]]>

</content>
</entry>
<entry>
<title>Compilllers are Helpful</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2007/03/compilllers_are.html" />
<modified>2007-03-12T17:11:24Z</modified>
<issued>2007-03-12T17:11:16Z</issued>
<id>tag:weblogs.java.net,2007:/blog/edburns/167.6791</id>
<created>2007-03-12T17:11:16Z</created>
<summary type="text/plain">I relate an experience where the compiler was helpful, and use the experience to caution those considering heavy use of scripting languages in enterprise projects.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Enterprise</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>When working to revive <a
href="http://www.mozilla.org/projects/blackwood/webclient">Webclient</a>
as a means to enable one to write automated tests for Ajax Applications,
I ended up fixing some thread safety assertions that were failing in
native code.  Part of this involved slightly recrafting the design of
the native/Java DOM bridge, originally written over seven years ago by
<a href="http://weblogs.java.net/blog/idk/">Igor Kushnirsky</a>.  Igor's
original design had lots of <code>public native</code> methods.  My
problem was that I needed these methods to have their native code
executed on a particular thread.  However, the DOM methods can be called
from any old thread in the application.  Webclient already does this
with an internal <code>NativeEventThread</code> class.  All webclient
methods that end up in native code happen on that thread.  Basically, I
had to go through the Java DOM code and turn this:</p>

<pre><code>

public native Element getElementById(String elementId);

</code></pre>

<p>into this:</p>

<pre><code>

public Element getElementById(String elementId) {
  // Make this happen on the NativeEventThread.
  return nativeGetElementById(elementId);
}
native Element nativeGetElementById(String elementId);

</code></pre>

<p>Of course, I would have to modify the function names in the native
C++ source files as well.</p>

<p>In case you were wondering, I did consider these solutions but
rejected them.</p>

<dl>

<dt>Use Javier Pedemonte's Java XPCOM bridge
</dt>

<dd>I plan to completely rewrite the mozilla layer of webclient and dom
to use this most excellent software after I get the 2.0 release done.  I
don't have time for that extensive rewrite now.
</dd>

<dt>Use aspect oriented programming techniques
</dt>

<dd>Sure, I could do this, but I don't want to introduce another
dependency on another technology.
</dd>

</dl>

<p>That said, I wrote some xemacs macros as I went along and it only
took a couple hours of manual editing.  While doing it, I re-compiled
all along the way.  Naturally, the compiler caught some things, which I
easily fixed, as I went along.</p>

<p>This got me thinking.  Say this code was written entirely in a
scripting language.  If so, this sort of "complicated, human-assisted
global search and replace" change (I won't call it refactoring since
this particular process was so specific to JNI) would be really error
prone and hard to debug.  The absence of a type checking compiler would
really make this sort of change hard.</p>

<p>I assert that this sort of change is happens all the time in the
maintenance phase of a large software project.  I assert that the person
making the change is seldom the same person who wrote the code
originally.  Given these assertions, I predict much woe for the
maintenance programmer who has to do such a change on a scripting
language based project.  I continue to urge caution for those listening
to scripting zealots when they consider moving more of their projects to
scripting languages.</p>


<span class="technoratitag"> Technorati Tags: <a href="http://www.technorati.com/tags/edburns" rel="tag">edburns</a></span>
]]>

</content>
</entry>
<entry>
<title>##jsf irc channel usage</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2007/01/jsf_irc_channel.html" />
<modified>2007-01-19T20:04:38Z</modified>
<issued>2007-01-19T20:03:50Z</issued>
<id>tag:weblogs.java.net,2007:/blog/edburns/167.6368</id>
<created>2007-01-19T20:03:50Z</created>
<summary type="text/plain">A graph of traffic on the ##jsf IRC channel.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Enterprise</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>Because JavaServer Faces technology is delivered by Sun as a part of
<a href="http://java.sun.com/javaee/">the Java EE SDK</a> and also <a
href="https://glassfish.dev.java.net/">Project Glassfish</a>, the Sun JSF
team strongly feels that community is important.  To that end, I've been
plugging the use of the ##jsf irc channel on irc.freenode.net as a
community resource.  My team and I try to maintain a daily presence in
the channel.  <a
href="http://weblogs.java.net/blog/edburns/archive/2005/10/jsf_irc_channel_1.html">Since
we started hanging out there</a>, we've seen the daily traffic steadily
grow.</p>

<p>Now that over a year has passed, I thought it would be fun to throw
in a graph.  Here is a chart of the daily log size for the ##jsf
channel, where each data point is a weekly average of the size, in
bytes, of the daily log file. The first datapoint in the x axis is from
the fourth week of 2006, on up to today.</p>

<p>If you want to join the channel, please <a
href="http://java.sun.com/javaee/javaserverfaces/#IRC">see the
instructions at the JSF main site</a>.</p>

<p><img alt="graph.jpg"
src="http://weblogs.java.net/blog/edburns/graph.jpg" width="1048"
height="760" /></p>

<p>Many thanks to <a href="http://www.rifers.org/">Geert Bevin</a> who,
very graciously and professionally provides the log bot on the
channel.</p>

<span class="technoratitag"> Technorati Tags: <a href="http://www.technorati.com/tags/edburns" rel="tag">edburns</a></span>

]]>

</content>
</entry>
<entry>
<title>Adding Dynamic Faces Support to a jMaki widget</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2006/12/adding_dynamic.html" />
<modified>2006-12-07T18:38:40Z</modified>
<issued>2006-12-07T17:09:45Z</issued>
<id>tag:weblogs.java.net,2006:/blog/edburns/167.6119</id>
<created>2006-12-07T17:09:45Z</created>
<summary type="text/plain">In this entry, I show how I added Dynamic Faces support to the Dojo
Inline Editor widget in jMaki.

I also explain the general Dynamic Faces and jMaki story.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Enterprise</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>In this entry, I show how I added Dynamic Faces support to the Dojo
Inline Editor widget in jMaki.</p>

<h2>Background and History</h2>

<p>If you've read my blog before, you know that I think JSF is a good
fit for handling the <a
href="http://weblogs.java.net/blog/edburns/archive/2006/11/motherhood_appl.html">motherhood
and apple pie</a> requirements of web applications.  What you may not
know is that <a href="http://ajax.dev.java.net">jMaki</a> intentionally
leaves the work of satisfying these requirements as an exercise for the
developer.  No problem, just use jMaki and JSF together.  This is indeed
a valid answer, but there is a subtlety that bears clarification.</p>

<p>When using jMaki + JSF under J2EE 1.4 (the default target audience
for jMaki), you miss out on the following features:</p>

	<ul>

	  <li><p>Ability to have the jMaki widget POST back to the faces
	  page while preserving the JSF view state.</p></li>

	  <li><p>Ability to use jMaki widgets that represent components
	  that accept user input within an iterating component such as
	  dataTable.</p></li>

	  <li><p>Ability to attach valueChangeListeners to jMaki
	  components in the view.</p></li>

	  <li><p>Ability to attach converters and validators to jMaki
	  components in the view.</p></li>

	  <li><p>Ability to attach action and/or actionListeners to
	  jMaki components in the view.</p></li>


	</ul>

<p>These deficiencies stem both from missing features in the built-in
jMaki JSF support and from missing features in JSF 1.1 commonly used
with J2EE 1.4.</p>

<h2>The story about jMaki and Dynamic Faces</h2>

<p>By using jMaki with <a
href="https://jsf-extensions.dev.java.net/">Dynamic Faces</a> on top of
JavaEE 5, however, all of these deficiencies can be addressed (with the
exception of the last two, and issues <a
href="https://ajax.dev.java.net/issues/show_bug.cgi?id=57">have been</a>
<a href="https://ajax.dev.java.net/issues/show_bug.cgi?id=58">filed</a>
for these features).  This section discusses how using jMaki and Dynamic
Faces addresses all of the deficiencies mentioned above.</p>

<dl>

<dt>Ability to have the jMaki widget POST back to the faces page while
preserving the JSF view state.</dt>

<dd>
    <p>This is the big one, and it was at the heart of the <a
    href="http://weblogs.java.net/blog/edburns/archive/2006/05/javaone_video_a_1.html">JavaOne</a>
    presentation in which I participated.  The lack of this feature in
    many Ajax + JSF solutions is what prompted us to title the session,
    "Ajax done right".  When you do not have the JSF view state, you
    cannot do <b>any</b> of the things that JSF does well.  Including
    the JSF View state in the Ajax transaction is essential.</p>

    <p>By using Dynamic Faces to send and receive Ajax transactions from
    the browser to the JSF view, the JSF view state is correctly
    preserved, allowing the entire JSF lifecycle to be used, including
    conversion, validation, events, etc.</p>

</dd>

<dt>Ability to use jMaki widgets that represent components
	  that accept user input within an iterating component such as
	  dataTable.
</dt>

<dd>

<p>This one is near and dear to <a
href="http://weblogs.java.net/blog/jhook/">Jacob Hookom's</a> heart.
Not only do you need the JSF view state, but you need a way to apply
individual values to an individual components within a composite
component (such as a table or tree).  This capability did not exist in
JSF until version 1.2, and Dynamic Faces takes full advantage of it.</p>

</dd>

<dt>Ability to attach valueChangeListeners to jMaki
	  components in the view.
</dt>

<dd><p>This didn't exist in jMaki until <a
href="https://ajax.dev.java.net/issues/show_bug.cgi?id=3">issue 3</a>
was fixed.  However, even though you can add a valueChangeListener to a
jMaki component now, you still need to preserve the JSF view state in
order for it to ever have a chance of being invoked.  Again, Dynamic
Faces is the answer.</p>
</dd>

<dt><p>Ability to attach converters and validators to jMaki
	  components in the view.</p>

<p>Ability to attach action and/or actionListeners to
g	  jMaki components in the view.</p>
</dt>

<dd><p>As with valueChangeListener, these two need to be first
implemented in jMaki, then they need to be used with Dynamic Faces.</p>
</dd>

</dl>

<h3>How To</h3>

<p>The whole point of jMaki is to put today's hot JavaScript widget
libraries in the hands of Java web application developers.  Each widget
library has different ways of doing things, and indeed, each widget
within each library does too.  jMaki solves this by having specific
files with each widget.  Therefore, adding Dynamic Faces support to each
widget involves making some modifications to the widget specific files.
Currently, the only widgets that have been modified are the <a
href="http://sunapp1.whardy.com:8090/jsf-jmaki/fisheye.jsf">Dojo FishEye</a> and <a href="http://javaserver.org/jmaki/dojo/inlineedit-jsf-df.faces">Inline Editor</a>, and the <a
href="http://sunapp1.whardy.com:8090/jsf-jmaki/home.jsf">Scriptaculous Inplace Editor</a>.  This section shows some high
level guidelines for how to add Dynamic Faces support to an arbitrary
jMaki widget.</p>


<p>The widget specific files for a jMaki widget are:</p>

<table border="1">

<tr>

<th>File Name
</th>

<th>Purpose
</th>

</tr>

<tr>

<td>component.css
</td>

<td>Any CSS style associated with an instance of this widget.
</td>

</tr>

<tr>

<td>component.htm
</td>

<td>The markup that will be included in the page an instance of this
widget.
</td>

</tr>

<tr>

<td>component.js
</td>

<td>The JavaScript adapter file for this widget.  This adapts between
the widget library specific way of doing things and the jMaki server
side framework.  This is also the easiest place where Dynamic Faces
support can be added.
</td>

</tr>

<tr>

<td>widget.json
</td>

<td>Any name/value pairs that aid in the configuration of an instance of
this widget.
</td>

</tr>

</table>

<p>In general, you'll probably just need to modify component.js to add
Dynamic Faces support.  Please follow <a href="http://java.sun.com/developer/technicalArticles/J2EE/webapp_3/">Jennifer's Tutorial</a> for how to get
started with jMaki and Dynamic Faces.  Once you've done that, you need
to make sure to include the Dynamic Faces taglib and script tag in the
page on which you are using the jMaki widgets.</p>

<p>Syntax highlighting courtesy of <a href="http://www.nopaste.com/">http://www.nopaste.com/</a>.</p>

<h4>Listing 1, the JSP Page</h4>

<div class='code'><pre class="html4strict"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;%@ taglib prefix=<span style="color: #ff0000;">&quot;a&quot;</span> uri=<span style="color: #ff0000;">&quot;http://java.sun.com/jmaki-jsf&quot;</span> %<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;%@ taglib uri=<span style="color: #ff0000;">&quot;http://java.sun.com/jsf/core&quot;</span> prefix=<span style="color: #ff0000;">&quot;f&quot;</span> %<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;%@ taglib uri=<span style="color: #ff0000;">&quot;http://java.sun.com/jsf/html&quot;</span> prefix=<span style="color: #ff0000;">&quot;h&quot;</span> %<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;%@ taglib prefix=<span style="color: #ff0000;">&quot;jsfExt&quot;</span> uri=<span style="color: #ff0000;">&quot;http://java.sun.com/jsf/extensions/dynafaces&quot;</span>%<span style="color: #000000; font-weight: bold;">&gt;</span></span> </div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/h2.html"><span style="color: #000000; font-weight: bold;">&lt;h2&gt;</span></a></span>Editor Using JSF<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h2&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/hr.html"><span style="color: #000000; font-weight: bold;">&lt;hr&gt;</span></a></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;f:view&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;jsfExt:scripts /<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;h:form prependId=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">  <span style="color: #009900;">&lt;h:dataTable <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;table&quot;</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">&quot;10&quot;</span> binding=<span style="color: #ff0000;">&quot;#{ResultSetBean.data}&quot;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">               <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;#{ResultSetBean.list}&quot;</span> var=<span style="color: #ff0000;">&quot;customer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    <span style="color: #009900;">&lt;h:column&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;">&lt;f:facet           <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;header&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #009900;">&lt;h:outputText  <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Account Id&quot;</span>/<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/f:facet&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;">&lt;h:outputText        <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;accountId&quot;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                     <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;#{customer.accountId}&quot;</span>/<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/h:column&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    <span style="color: #009900;">&lt;h:column&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;">&lt;f:facet           <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;header&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #009900;">&lt;h:outputText  <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Customer Name&quot;</span>/<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/f:facet&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000; font-weight: bold;">&lt;a</span></a>:ajax <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dojo.inlineedit&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;#{customer.name}&quot;</span> /<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/h:column&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    <span style="color: #009900;">&lt;h:column&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;">&lt;f:facet           <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;header&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #009900;">&lt;h:outputText  <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Symbol&quot;</span>/<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/f:facet&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;">&lt;h:outputText        <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;symbol&quot;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                     <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;#{customer.symbol}&quot;</span>/<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/h:column&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    <span style="color: #009900;">&lt;h:column&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;">&lt;f:facet           <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;header&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #009900;">&lt;h:outputText  <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Total Sales&quot;</span>/<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/f:facet&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">      <span style="color: #009900;">&lt;h:outputText       <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;totalSales&quot;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                     <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;#{customer.totalSales}&quot;</span>/<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/h:column&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/h:dataTable&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/h:form&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>/f:view&gt;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li></ol></pre></div>

<p>Line 4 has the taglib for Dynamic Faces, line 11 uses the scripts
tag.  Line 29 has the use of the jMaki ajax component.</p>


<p>Let's take a look at the component.js for the Dojo Inline Edit
widget, before Dynamic Faces support was added.</p>

<h4>Listing 2, the component.js before Dynamic Faces is added</h4>

<div class='code'><pre class="javascript"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">dojo.<span style="color: #006600;">require</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;dojo.widget.*&quot;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">dojo.<span style="color: #006600;">require</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;dojo.widget.InlineEditBox&quot;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">dojo.<span style="color: #006600;">require</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;dojo.event.*&quot;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> container = document.<span style="color: #006600;">getElementById</span><span style="color: #66cc66;">&#40;</span>widget.<span style="color: #006600;">uuid</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> w = dojo.<span style="color: #006600;">widget</span>.<span style="color: #006600;">createWidget</span><span style="color: #66cc66;">&#40;</span>container<span style="color: #66cc66;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">w.<span style="color: #006600;">getValue</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    <span style="color: #000066; font-weight: bold;">return</span> w.<span style="color: #006600;">textValue</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// add a saveState function</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> widget.<span style="color: #006600;">valueCallback</span> != <span style="color: #3366CC;">'undefined'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    w.<span style="color: #006600;">onSave</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>newValue, oldValue<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>   </div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #009900; font-style: italic;">// we need to be able to adjust this</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #003366; font-weight: bold;">var</span> url = widget.<span style="color: #006600;">valueCallback</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        dojo.<span style="color: #006600;">io</span>.<span style="color: #006600;">bind</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                url: url + <span style="color: #3366CC;">&quot;?cmd=update&quot;</span>,</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                method: <span style="color: #3366CC;">&quot;post&quot;</span>,</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            content: <span style="color: #66cc66;">&#123;</span> <span style="color: #3366CC;">&quot;value&quot;</span> : newValue  <span style="color: #66cc66;">&#125;</span>,</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            load: <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>type,data,evt<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                <span style="color: #009900; font-style: italic;">// do something if there is an error</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            <span style="color: #66cc66;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    <span style="color: #66cc66;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">w.<span style="color: #006600;">saveState</span> = w.<span style="color: #006600;">onSave</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">jmaki.<span style="color: #006600;">attributes</span>.<span style="color: #006600;">put</span><span style="color: #66cc66;">&#40;</span>widget.<span style="color: #006600;">uuid</span>, w<span style="color: #66cc66;">&#41;</span>;</div></li></ol></pre></div>

<p>On lines 1 - 3 we have the dojo includes: uninteresting.  Line 5 of
listing 2 is interesting.  The "widget" refererred to is this instance
of this widget in the page.  In this case, it's the widget on line 29 of
Listing 1.  However, keep in mind that line 29 of listing 1 is inside of
a dataTable, therefore, there will be 10 instances of this widget in the
page, each corresponding to an actual JavaScript object in the
JavaScript VM.  Therefore, the value of <code>widget.uuid</code> will be
different for each widget, and will, most importantly, correspond to the
JSF Client Id for the widget in the JSF view.  This is important because
in order to address the widget in the JSF view, you need its client
id.</p>

<p>For example, the <code>widget.uuid</code> values for this page happen
to be <code>table:<i>n</i>:j_id_id34</code> where <i>n</i> is the
numbers 0 to 9.</p>

<p>Returning to line 5 of listing 2, the actual DOM element returned by
the call to <code>document.getElementById</code> is what jMaki renders
based on the content of the <code>component.htm</code> file.  For the
dojo inline editor, this file is:</p>

<div class='code'><pre class="html4strict"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;${uuid}&quot;</span> dojoType=<span style="color: #ff0000;">&quot;inlineEditBox&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;dInlineEdit&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>${value}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></span></div></li></ol></pre></div>

<p>The jMaki <code>AjaxWrapperRenderer</code> will cause the
<code>component.htm</code> file to be rendered like this in the page
from listing 1.</p>

<div class='code'><pre class="html4strict"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;table:0:j_id_id34&quot;</span> dojoType=<span style="color: #ff0000;">&quot;inlineEditBox&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;dInlineEdit&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>name_0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></span></div></li></ol></pre></div>

<p>Therefore, when line 5 of listing 2 executes, the value of
<code>container</code> is the <code>div</code> element with id
<code>table:<i>n</i>:j_id_id34</code>, where <i>n</i>, of course, is the
current row in the table. </p>

<p>Line 6 of listing 2 uses the dojo <code>createWidget</code> to create
an instance of the inline edit box inside of the <code>container</code>
element.</p>

<p>Lines 14 - 25 of listing 2 declares the JavaScript function that will
be called when the user presses the "save" button in the widget UI.</p>

<p>Now, let's take a look at the changes to component.js necessary to
add Dynamic Faces support, expressed as a diff.</p>

<h4>Listing 3, the diffs to component.js to add Dynamic Faces support</h4>

<div class='code'><pre class="javascript"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">--- component-pre-DF.<span style="color: #006600;">js</span>	<span style="color: #CC0000;">2006</span><span style="color: #CC0000;">-12</span><span style="color: #CC0000;">-07</span> <span style="color: #CC0000;">10</span>:<span style="color: #CC0000;">32</span>:<span style="color: #CC0000;">25.000000000</span> <span style="color: #CC0000;">-0500</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+++ component.<span style="color: #006600;">js</span>	<span style="color: #CC0000;">2006</span><span style="color: #CC0000;">-12</span><span style="color: #CC0000;">-07</span> <span style="color: #CC0000;">10</span>:<span style="color: #CC0000;">31</span>:<span style="color: #CC0000;">19.000000000</span> <span style="color: #CC0000;">-0500</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">@@ <span style="color: #CC0000;">-12</span>,<span style="color: #CC0000;">6</span> <span style="color: #CC0000;">+12</span>,<span style="color: #CC0000;">16</span> @@</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #009900; font-style: italic;">// add a saveState function</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> widget.<span style="color: #006600;">valueCallback</span> != <span style="color: #3366CC;">'undefined'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">     w.<span style="color: #006600;">onSave</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>newValue, oldValue<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>   </div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+      <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> _globalScope.<span style="color: #006600;">DynaFaces</span> != <span style="color: #3366CC;">'undefined'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+	  DynaFaces.<span style="color: #006600;">fireAjaxTransaction</span><span style="color: #66cc66;">&#40;</span>container, </div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+					<span style="color: #66cc66;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+					execute: widget.<span style="color: #006600;">uuid</span>,</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+					render: <span style="color: #3366CC;">&quot;none&quot;</span>,</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+					postBody: widget.<span style="color: #006600;">uuid</span> + <span style="color: #3366CC;">&quot;=&quot;</span> + newValue</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+					<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+      <span style="color: #66cc66;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+      <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">         <span style="color: #009900; font-style: italic;">// we need to be able to adjust this</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">         <span style="color: #003366; font-weight: bold;">var</span> url = widget.<span style="color: #006600;">valueCallback</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">         dojo.<span style="color: #006600;">io</span>.<span style="color: #006600;">bind</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">@@ <span style="color: #CC0000;">-22</span>,<span style="color: #CC0000;">7</span> <span style="color: #CC0000;">+32</span>,<span style="color: #CC0000;">8</span> @@</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                 <span style="color: #009900; font-style: italic;">// do something if there is an error</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">             <span style="color: #66cc66;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">         <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+      <span style="color: #66cc66;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">     <span style="color: #66cc66;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #66cc66;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> w.<span style="color: #006600;">saveState</span> = w.<span style="color: #006600;">onSave</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">-jmaki.<span style="color: #006600;">attributes</span>.<span style="color: #006600;">put</span><span style="color: #66cc66;">&#40;</span>widget.<span style="color: #006600;">uuid</span>, w<span style="color: #66cc66;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">\ No newline at end of file</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">+jmaki.<span style="color: #006600;">attributes</span>.<span style="color: #006600;">put</span><span style="color: #66cc66;">&#40;</span>widget.<span style="color: #006600;">uuid</span>, w<span style="color: #66cc66;">&#41;</span>;</div></li></ol></pre></div>

<p>The only change is a conditional within the <code>onSave</code>
function.  jMaki defines a <code>_globalScope</code> global variable
that allows you to access all things globally defined in the page.  It
so happens that the scripts included by virtue of line 11 of listing 1
define a global variable called <code>DynaFaces</code>.  This JavaScript
object has all the functions exposed by the Dynamic Faces JavaScript
library.  Therefore, you can safely test for the existing of Dynamic
Faces in a page as shown on line 8 of listing 3.  If Dynamic faces is
not being used in the page, then the normal jMaki operation of the
widget takes place, as shown on lines 17 - 23 of the diff.</p>

<p>Lines 9 - 14 of listing 3 cause a Dynamic Faces Ajax transaction to
be made back to the JSF page currently being viewed in the browser.
This transaction includes all the view state for the current
<code>f:view</code>.  The first argument to
<code>fireAjaxTransaction</code> is the DOM element from which the
transaction should be fired.  It is important that this be the DOM
element that corresponds to the actual JSF <code>UIComponent</code> in
the view.  The second argument to <code>fireAjaxTransaction</code> is a
JavaScript associative array.  In this case, we're saying three things:</p>

	<ul>

	  <li><p>do the 'execute' portion of the JSF lifecycle just on
	  the JSF <code>UIComponent</code> for this widget instance.
	  </p></li>

	  <li><p>do not re-render anything to the browser (in this case,
	  Dojo handles it).</p></li>

          <li><p>In the HTTP POST body of the request, include the name
          value pair for the currently entered value of the widget.
          </p></li>

	</ul>

<p>Note that <code>newValue</code>, on line 6 of listing 3, is an
argument to the <code>onSave</code> function.  It is the new value
entered by the user.</p>

<p>For more information on the JavaScript functions exposed from Dynamic
Faces, see <a
href="https://jsf-extensions.dev.java.net/nonav/mvn/reference-ajax.html">the
Dynamic Faces Reference</a>.</p>

<h2>Summary</h2>

<p>jMaki gives you cool widgets.  Dynamic Faces + jMaki gives you cool
widgets you can use in a real enterprise web application.</p>

<span class="technoratitag"> Technorati Tags: <a href="http://www.technorati.com/tags/edburns" rel="tag">edburns</a></span>

]]>

</content>
</entry>
<entry>
<title>Knoppix, Partimage, VMware, mmmm</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2006/12/knoppix_partima.html" />
<modified>2006-12-04T13:57:13Z</modified>
<issued>2006-12-04T13:56:58Z</issued>
<id>tag:weblogs.java.net,2006:/blog/edburns/167.6083</id>
<created>2006-12-04T13:56:58Z</created>
<summary type="text/plain">An account of my journey from multi-boot existence to the joy of VMware.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[    <h1><a name="background">Background</a></h1>

<p>I had been doing the multi-boot thing on my Toshiba Satellite
5205-S703 since I bought it in late 2002.  It came factory installed
with Windows XP Home Edition (monopoly anyone?) on an NTFS partition.
Thanks to Partition Magic 7.0, I soon ended up with the following
partition table:</p>

<code>
<pre>
Physical Geometry: 7,926 Cyls, 255 Hds, 63, Sects

Drive: C:
Partition Type: 07 (Hex) NTFS
Serial Number: F8CD:F94F
Total Physical Sectors: 80,080,632 (3,945.6 MB)

Drive: E:
Partition Type: 08 (Hex) FAT32
Serial Number: None
Total Physical Sectors: 8,353,800 (4,079.0 MB)

Drive: Extended
Partition Type: 0F (Hex) ExtendedX
Serial Number: None
Total Physical Sectors: 100,775,745 (49,206.9 MB)

Drive: F:
Partition Type: 08 (Hex) FAT32
Serial Number: None
Total Physical Sectors: 78,605,982 (38,381.8 MB)

Drive:  SWAPSPACE2
Partition Type: 82 (Hex) Linux Swap
Serial Number: None
Total Physical Sectors: 2,120,517 (1,035.4 MB)

Drive: Linux Ext2
Partition Type: 83 (Hex) Linux Ext2
Serial Number: None
Total Physical Sectors: 20,049,057 (9,789.6 MB) 

</pre>
</code>

<p>C: contained the factory Windows XP, E: contained Windows 2000
Professional, where I did most of my production work, including work on
<a
href="http://purl.oclc.org/NET/edburns/webclientStatus/">mozilla.org</a>
<a href="http://purl.oclc.org/NET/edburns/plugletStatus/">side
projects</a>.  In the GNU/Linux partition, I ran Sun Java Desktop System
Linux.  I used GRUB as my bootloader, but somehow managed to have the
Windows bootloader in there as well (like a sub-menu) to choose between
Win XP and 2k, once "Windows" had been chosen from the main menu.  I
never bothered to fix that.</p>

<p>At the <a href="http://jaoo.dk/photos/exhibition/list.m">JAOO
2006</a> conference, VMware was giving out free licenses to their VMware
workstation 5.5 product.  Seeing an opportunity to free myself from the
shackles of a multi-boot existence, I took one.  Several months later, I
began the long and arduous process of converting my multi-boot machine
into one that just boots the factory installed OS (since that's the only
thing officially supported by the manufacturer anyway) and uses VMs for
the other OSes.</p>

<h1><a name="process">Process</a></h1>

<p>I wanted to convert the OSes installed in my real hard disk
partitions into VMs.  Here is the high level process I will use.</p>

	<ol>

	  <li><p>Install VMware Workstation 5.5 under the Windows XP OS,
	  using an external disk for extra space and to contain the VMs
	  for the guest OSes.</p></li>

	  <li><p>For each OS on a real partition on my disk</p>

         <ol type="a">

	  <li><p>Use a <a href="http://www.knoppix.org/">Knoppix 3.7</a>
	  CD I had made years ago to boot the Toshiba laptop.  Once
	  booted into Knoppix, use partimage to create partition images
	  of all the OS partitions on the mahcine.  Swap partitions
	  needn't be imaged, for obvious reasons, and data partitions
	  needn't be imaged because they can simply be copied.  I stored
	  the partimage files on an external disk.</p></li>

	  <li><p>Create a VM for that OS, storing it on an external
	  disk.</p></li>

	  <li><p>Boot the VM into Knoppix</p></li>

	  <li><p>Install VMware tools into the running Knoppix instance
	  so I can access the partimage files using the "shared folders"
	  feature of VMware.</p></li>

	  <li><p>Use partimage to restore the OS partition into the
	  virtual hard disk of the VM.</p></li>

	  <li><p>Re-install the appropriate boot loader for that OS to
	  enable that OS to boot.</p></li>
</ol>

</li>

	  <li><p>Once VMs had been created, on an external disk, for all
	  the OSes on real partitions, completely and totally wipe,
	  defrag, and re-install from factory media the laptop.  After
	  the factory restore has completed, run Windows update however
	  many times I need to get the machine totally up to snuff and
	  current.  Re-install virus protection software and other
	  essential goodies.  Note, on the core, non virtual OS, I plan
	  to install very little real software, just stuff that
	  absolutely has to have access to the real hardware.</p></li>

	</ol>

<h1><a name="details">Details for the hard part: Steps b. thru f. above</a></h1>

	<ol>

	  <li><p>Create the new VM using VMware.</p>

<p>Set the guest OS type to be the type of the OS stored in your
partimage files.</p>

	<p>Make sure the hard drive types (IDE or SCSI) match what is in
	the partimage files.  I chose to pre-allocate space.  Not sure
	if this is necessary.</p>

<p>Make the same amount of disk space is allocated in the VM as was in
the partition from which the partimage files were made.</p>

<p>Because you are using the Knoppix live CD, you need to mount a second
CDROM drive from the <code>linux.iso</code> file, located in the install
directory of VMware.  Make sure to assign IDE 1.1 to this virtual CDROM
drive.</p>

<p>Use the VMware shared folders feature to expose your partimage files
to the VM.</p>

          </li>

	  <li><p>Boot knoppix and install VMware tools into the running
	  Knoppix instance.</p>

<p>Download the <a href="http://weblogs.java.net/blog/edburns/vmware-knoppix-overlay.tar.gz/vmware-knoppix-overlay.tar.gz">vmware-knoppix-overlay.tar.gz</a> to a real
machine on which an FTP server is running.  In fact, this can be the
VMware host machine, but it needn't be.</p>

<p>With the Knoppix CD in the drive, start the VM, pressing escape
during the VMware startup screen to enter the boot menu.  Select
CDROM.</p>

<p>When Knoppix starts up, get root access: <code>su -</code> , then</p>

<code>
<pre>
cd /tmp
tar -zxf /mnt/cdrom1/VMwareTools-5.5.3-34685.tar.gz
</pre>
</code>

<p>Use FTP to transfer the
<code>vmware-knoppix-overlay.tar.gz</code> file to /tmp in Knoppix.</p>

<code>
<pre>
cd /
tar -zxf /tmp/vmware-knoppix-overlay.tar.gz
cd /tmp/vmware-tools-distrib
./vmware-install.pl
</pre>
</code>

<p>This will run the modified VMware installer for Knoppix.  When it
asks "In which directory do you want to install the binary files?"
answer <code>/ramdisk/bin</code>.</p>

<p>Accept the defaults for the rest of the questions until it asks,
"What is the location of the directory of C header files that match your
running kernel?"  Answer
<code>/ramdisk/lib/modules/2.4.27/build/include</code>.</p>

<p>When done with these scripts, you should have access to your shared
folders under the path <code>/mnt/hgfs</code>.</p>

           </li>

	  <li><p>Use <code>fdisk</code> under knoppix to partition the
	  virtual disk, most likely it will be <code>/dev/hda</code>, in
	  such a way that it is equivalent to the partimage files you
	  are going to restore.  For example, if the partimage files
	  were created from a <code>JFS</code> filesystem, use JFS as
	  the partition type in <code>fdisk</code>.  If you need to
	  create a swap partition, make sure to do that as
	  well.</p></li>

	  <li><p>Use partimage to restore the image files under
	  <code>/mnt/hgfs</code> to the new virtual disk.</p></li>

	  <li><p>Lastly, you need to make sure that the boot loader has
	  been restored.  It's very unlikely that you can use the
	  bootloader that happened to be installed in the partimage
	  files.  Of course, bootloaders are a matter of preference, but
	  I used GRUB.  Here's what I had to do in my case.</p>

<p>Back at the root prompt in Knoppix:</p>


<code>
<pre>
mkdir /mnt/hda1
mount /dev/hda1 /mnt/hda1
cd /mnt/hda1/boot
cp -r grub grub.orig
rm -rf grub
grub-install --no-floppy --root-directory=/mnt/hda1 --recheck /dev/hda
</pre>
</code>



<p>At this pount the guest OS should boot.</p>

           </li>

	</ol>


<p>Of course, your mileage may vary, but hopefully there is some useful
information here.  It was a PITA for me to figure this out so I thought
I ought to share it once I did.</p>

<span class="technoratitag"> Technorati Tags: <a href="http://www.technorati.com/tags/edburns" rel="tag">edburns</a></span>]]>

</content>
</entry>
<entry>
<title>(near) Zero (re-)Deployment Time for JSF</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2006/12/near_zero_redep.html" />
<modified>2006-12-02T02:52:24Z</modified>
<issued>2006-12-02T02:52:11Z</issued>
<id>tag:weblogs.java.net,2006:/blog/edburns/167.6076</id>
<created>2006-12-02T02:52:11Z</created>
<summary type="text/plain">I show how to achieve neaz zero re-deployment time for JSF using JMX.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Enterprise</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[     <p>One oft cited complaint about Java Web Applications is the slow
     and laborious <a
     href="http://www.theserverside.com/news/thread.tss?thread_id=35538">deployment
     step</a>.  This step seriously undermines the ability to get into a
     <a href="http://web.ionsys.com/~remedy/FLOW%20%20.htm">flow
     state</a> and is generally a major buzz kill.  The absense of a
     deployment step is one reason why people like Ruby on Rails so
     much.</p>

     <p><a href="https://jsf-extensions.dev.java.net/nonav/mvn/#Design Time">JSF-Extensions Design Time</a> brings good news for
     flow-impaired Java Web application Developers: the JMX
     PhaseListener.</p>

     <p>The implementation of this was really simple.  I just took <a
     href="http://weblogs.java.net/blog/jfarcand/archive/2006/01/fast_web_applic_1.html">Jean-Francios
     Arcand's JMXDeploy class</a>, modded it ever so slightly, as you
     can see in <a
     href="https://jsf-extensions.dev.java.net/source/browse/jsf-extensions/trunk/code/dev-time/src/main/java/com/sun/faces/extensions/devtime/zdt/JMXDeploy.java">the
     source code</a>, and called it from a
     <code>PhaseListener</code>. </p>

    <p>I did a <a target="_" href="https://sas.elluminate.com/site/external/launch/play.jnlp?psid=2006-12-01.1228.M.A30E5F9A6C6658A6AEB70B313207BE.vcr">screencast about it too</a>.</p>

<span class="technoratitag"> Technorati Tags: <a href="http://www.technorati.com/tags/edburns" rel="tag">edburns</a></span>
]]>

</content>
</entry>
<entry>
<title>Motherhood, Apple Pie and Web apps</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/edburns/archive/2006/11/motherhood_appl.html" />
<modified>2006-11-13T16:35:24Z</modified>
<issued>2006-11-13T16:35:13Z</issued>
<id>tag:weblogs.java.net,2006:/blog/edburns/167.5933</id>
<created>2006-11-13T16:35:13Z</created>
<summary type="text/plain">In this entry, Ed explains why server side frameworks are important, even in a world of Ajax and GWT.</summary>
<author>
<name>edburns</name>

<email>Ed.Burns@sun.com</email>
</author>
<dc:subject>Community: Java Enterprise</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/edburns/">
<![CDATA[<p>

In my recent spate of <a
href="http://weblogs.java.net/blog/edburns/archive/2006/09/speaking_at_the.html">speaking
engagements</a>, I have been including a "<a target="_"
href="http://lesscode.org/2005/07/21/motherhood-and-apple-pie/">motherhood
and apple pie</a>" slide in my presentations about JSF and Ajax.  I put
this in my slides in response to a question I sometimes hear when I make
the case for JSF and Ajax.  The question goes something like this:

</p>

<blockquote>
Hey, why do I need JSF, or any other server side framework for that
matter?  With Ajax, or things like GWT, can't I just put it all in the
client?  I mean, let's just do everything in JavaScript!
</blockquote>

<p>You're welcome to do that, <strong>but</strong> if you do, please
know that you'll have to do all of these things yourself.  

<img style="float:right" 
     alt="Screen capture of slide showing basic requirements of web apps" 
     src="http://weblogs.java.net/blog/edburns/20061113-baseball-apple-pie.png"
      width="341" height="253" /> 


As you may guess, JSF already does all of these for you, does them quite
well, and does them in a way that is an industry standard, with the
brainpower of leading minds from Oracle, Sun, IBM, Apache, the Open
Source Community, and others.  </p>

<p>

This is why I have been spending my spare time trying to get <a
href="http://ajax.dev.java.net">Project jMaki</a> to have first class
support for JSF as a core part of its feature set and value proposition.
In fact, if you support this idea, please send an email to <a
href="mailto:users@ajax.dev.java.net?subject=No%20Beta%20without%20full%20JSF%20support">the
jMaki User list</a> saying that you think this is important.  For some
exmples of this in action, please see <a
href="http://sunapp1.whardy.com:8090/jsf-jmaki/home.jsf">here</a>, <a
href="http://sunapp1.whardy.com:8090/jsf-jmaki/fisheye.jsf">here</a>, <a
href="http://javaserver.org/jmaki/dojo/fisheye-jsf-df.faces">here</a>,
and <a
href="http://javaserver.org/jmaki/scriptaculous/inplace-jsf-df.faces">here</a>.

</p>]]>

</content>
</entry>

</feed>