<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-36819724</id><updated>2012-02-16T12:43:34.354-05:00</updated><category term='web application'/><category term='Amazon Simple Email'/><category term='StAX'/><category term='PostFix'/><category term='SAAJ'/><category term='Amazon'/><category term='Generic Type'/><category term='SES'/><category term='search engine'/><category term='recrprocal'/><category term='Perfect'/><category term='Security'/><category term='SOA'/><category term='sybase'/><category term='XML Parser'/><category term='EJB'/><category term='DOM'/><category term='XML Signature'/><category term='SMTP'/><category term='android application'/><category term='JNDI'/><category term='Relay'/><category term='plugin'/><category term='spring'/><category term='Crystal'/><category term='neighbor'/><category term='RESTFul'/><category term='broken pipe'/><category term='Grails'/><category term='performance'/><category term='JAX-WS'/><category term='Secure Postfix'/><category term='SSL'/><category term='exchange'/><category term='neighbor service'/><category term='Java Mail'/><category term='share'/><category term='debug'/><category term='Service'/><category term='Java SE 5.0'/><category term='transaction'/><category term='download android'/><category term='technical'/><category term='mysql'/><category term='tool exchange'/><category term='tool'/><category term='JAXP'/><category term='meta program'/><category term='JAXR'/><category term='Simple email service'/><category term='XML'/><category term='Submission'/><category term='Object Database'/><category term='EntityBean'/><category term='UDDI'/><category term='Java'/><category term='Web Service'/><category term='life'/><category term='SOAP'/><category term='Tomcat'/><category term='android'/><category term='publish android'/><category term='SEO'/><category term='groovy'/><category term='content provider'/><category term='optimization'/><category term='XWSS'/><category term='writetext'/><category term='classified'/><category term='SessionBean'/><category term='Ubuntu'/><category term='J2EE'/><title type='text'>Netwiser @ RISGuru</title><subtitle type='html'>Rich Internet Solution GURU. James Zhang</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>82</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36819724.post-8081960612826025291</id><published>2011-11-09T15:50:00.002-05:00</published><updated>2011-11-09T15:50:49.289-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='content provider'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Save Image in Android Content Provider</title><content type='html'>&lt;pre class="prettyprint" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; color: #007000; font-size: 13px; margin-bottom: 1em; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; android&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;provider&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;MediaStore&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Images&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Media&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; android&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;content&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ContentValues&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;io&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;OutputStream&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// Save the name and description of an image in a ContentValues map. &amp;nbsp;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ContentValues&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; values &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ContentValues&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;3&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;values&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;put&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Media&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;DISPLAY_NAME&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"road_trip_1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;values&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;put&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Media&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;DESCRIPTION&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Day 1, trip to Los Angeles"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;values&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;put&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Media&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;MIME_TYPE&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"image/jpeg"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// Add a new record without the bitmap, but with the values just set.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// insert() returns the URI of the new record.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Uri&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; uri &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; getContentResolver&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;insert&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Media&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;EXTERNAL_CONTENT_URI&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; values&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// Now get a handle to the file for that record, and save the data into it.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// Here, sourceBitmap is a Bitmap object representing the file to save to the database.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;try&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;OutputStream&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; outStream &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; getContentResolver&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;openOutputStream&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;uri&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; sourceBitmap&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;compress&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Bitmap&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CompressFormat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;JPEG&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;50&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; outStream&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; outStream&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;close&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;catch&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Exception&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Log&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;TAG&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"exception while writing image"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8081960612826025291?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8081960612826025291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/11/save-image-in-android-content-provider.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8081960612826025291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8081960612826025291'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/11/save-image-in-android-content-provider.html' title='Save Image in Android Content Provider'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-4809238671991258602</id><published>2011-09-18T21:50:00.002-04:00</published><updated>2011-09-18T21:50:53.698-04:00</updated><title type='text'>Introduction to Android development</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; color: #4b4b4b; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 14px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;The following paragraphs summarize the work of the Android development experts fully conversant with all aspects of the Android development. Watch their Android development advice to avoid surprises. Now that we discussed aspects of Android development, let's turn to some of the other factors that must be considered.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="color: #575451; font-size: 18px; margin-top: 10px;"&gt;&lt;span style="font-size: small;"&gt;Introduction&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;The BlackBerry and iPhone, which is attractive and high-volume mobile platforms are addressing opposite ends of a spectrum. The BlackBerry is rock solid for enterprise business user. For a consumer device, it is difficult to compete with the iPhone for ease of use and "cool factor." Android, a young and not-yet proven platform, has the potential to play at both ends of the mobile phone spectrum and perhaps even bridge the gap between work and play.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Today many network-based or network-enabled devices running a flavor of the Linux kernel. It is a solid platform cost-effectively implement and support readily accepted as a good design approach for implementation. The user interface for these drugs is often based on HTML and visible with a PC or Mac browser. But not every device should be checked by a general computing device. Consider a conventional device such as a stove, microwave oven or bread machine. What if your appliances were checked by Android and boasted a color touch screen? With an Android UI on the stove-top, the author may also be able to cook anything.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;In this article, learn about the Android platform and how it can be used for mobile applications and mobile no. Install the Android SDK and build a simple application&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="color: #575451; font-size: 18px; margin-top: 10px;"&gt;&lt;span style="font-size: small;"&gt;A brief history of Android&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;The Android platform is the product of the Open Handset Alliance, a group of organizations working to build better mobile phone. The group, led by Google, including mobile operators, handset device manufacturers, component manufacturers, software solution and platform providers and marketing companies. From a software development standpoint, Android is right in the middle of the open source world.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;The first Android-capable phone on the market, the G1 device manufactured by HTC and maintained at T-Mobile. The device was available after almost one year of speculation, where the only software development tools available single step to improve SDK releases. Because the G1 release date neared, the team released Android SDK V1.0 and applications began to surface for the new platform.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;To spur innovation, Google sponsored two rounds of the "Android Developer Challenge", where millions of dollars were given to top contest entries. A few months after the G1, the Android Market was released, allowing users to download and view programs on their phones. More than about 18 months, a new mobile platform was the public arena.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="color: #575451; font-size: 18px; margin-top: 10px;"&gt;&lt;span style="font-size: small;"&gt;The Android platform&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;The width of Android's capabilities, it would be easy to confuse with a desktop operating system. Android is a layered environment built on a foundation of the Linux kernel, and includes a range of functions. The UI subsystem includes:&lt;/span&gt;&lt;/div&gt;&lt;ul style="line-height: 33px; margin-top: 0px; text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-size: small; line-height: 15px;"&gt; Windows&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small; line-height: 15px;"&gt; Views&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small; line-height: 15px;"&gt; Widgets for displaying common elements, such as input fields, lists and drop-down lists&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Android includes an embeddable browser based on WebKit, the same open source browser engine of iPhone Mobile Safari browser.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Android has a healthy array of connectivity options, including WiFi, Bluetooth, and wireless data over a cellular connection (eg, GPRS, EDGE, and 3G). A popular technique in Android applications can be linked to an address directly into Google Maps to display within an application. Support for location-based services (like GPS) and accelerometers is also available in the Android software stack, but not all Android devices are equipped with the necessary hardware.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Historically, two areas where mobile applications are struggling to keep up with their desktop counterparts, graphics / media, and data storage methods. Android focuses on the graphic challenge with native support for 2-D and 3-D graphics, including the OpenGL library. Data storage burden is eased because the Android platform includes the popular open source SQLite database.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="color: #575451; font-size: 18px; margin-top: 10px;"&gt;&lt;span style="font-size: small;"&gt;Android Application Development&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;There are many different types of applications in the Android market and the demand for them over the years. People with Mobi, our Android applications division focuses on providing solutions for the development of Android platform. We offer a wide range of Android application development solutions that are built using the capabilities of the Android SDK. We also offer our customers the opportunity to join our team of developers on a project basis or alternatively dedicated developers who can work on the specified client project and according to their guidelines to hire.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="color: #575451; font-size: 18px; margin-top: 10px;"&gt;&lt;span style="font-size: small;"&gt;Services Offered&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style="color: #575451; font-size: 15px; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 4px;"&gt;&lt;span style="font-size: small;"&gt;Android Application Development:&lt;/span&gt;&lt;/h3&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Our expert team of high quality designs Android application development solutions, where she first introduced to the concepts and understand the framework for creating an Android application. Our Android developers have all the skills and full understanding of the different tools to the industry develop, test, implement and deploy software for the platform.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Our developers can analyze, understand, and therefore make the necessary framework&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;They possess full knowledge of and experience with different tools, such as Android SDK and API's Framework&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Our developers use a variety of techniques, including Qume based emulator SQLiteDatabse, Java Programming Language, Android security architecture and Trace / View tests&lt;/span&gt;&lt;/div&gt;&lt;h3 style="color: #575451; font-size: 15px; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 4px;"&gt;&lt;span style="font-size: small;"&gt;Android Social Network Development:&lt;/span&gt;&lt;/h3&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;People with Mobi, our developers know the popularity of social networks than enjoying our developers to Android-based social networking application development outsourcing for our customers. This fully functional social networking Android apps to a simple upload of photos, live chat, message notifications and profile views, etc. through our customized Android Social networking applications for our clients outsourcing, we offer:&lt;/span&gt;&lt;/div&gt;&lt;ul style="line-height: 33px; margin-top: 0px; text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-size: small; line-height: 15px;"&gt;Applications that can track the movements of online contacts&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small; line-height: 15px;"&gt;Create alerts for specific groups of friends&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small; line-height: 15px;"&gt;Make sure the network application also works as a guide&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 style="color: #575451; font-size: 15px; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 4px;"&gt;&lt;span style="font-size: small;"&gt;Android Game Development&lt;/span&gt;&lt;/h3&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Mobile gaming is one of the most popular applications and there is always a constant demand for Android games. Mobi with people, our game development team consists of enthusiastic, eager and creative professionals looking for something new and out-of-the-box gaming applications all the time to create. Developing games for the Android platform is based on Java and the Android OS extends support for Java, through its various libraries.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Our team of Android game developers will understand the needs of our offshore clients and therefore consider innovative gaming solutions.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;They have deep experience and expertise of not only the Android SDK, but also of the NDK r3, which add-on for the original Android SDK kit.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Our developers also have an extensive knowledge of other technologies required to improve the quality games such as Android Java SE Development, Eclipse, Android Eclipse plug-ins, 3D graphics development, reuse and replacement of parts, etc.&lt;/span&gt;&lt;/div&gt;&lt;h3 style="color: #575451; font-size: 15px; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 4px;"&gt;&lt;span style="font-size: small;"&gt;Android Wireless Application Development:&lt;/span&gt;&lt;/h3&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;There exists in the industry, different races and types of Android wireless applications and our developers are skilled in offering scalable application development services to our offshore clients. We can help organizations meet the demands of wireless applications. Our developers are experienced in providing:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Superior quality interactive data services with high quality wireless application development Android&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Our developers are able to conceptualize, design, development, testing and integrating different types of wireless applications Android.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Android by custom wireless application, a large number of activities are carried out, including sports, music downloads, keeping track of various services and e-mail via the hand-held device.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 13px; line-height: 15px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 10px; text-align: justify; word-wrap: break-word;"&gt;&lt;span style="font-size: small;"&gt;Now you understand why there is a growing interest in Android development. If people are looking for more information on the development of Android, you will be able to meet their needs.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-4809238671991258602?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/4809238671991258602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/09/introduction-to-android-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4809238671991258602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4809238671991258602'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/09/introduction-to-android-development.html' title='Introduction to Android development'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7232884550157809290</id><published>2011-07-29T16:34:00.001-04:00</published><updated>2011-07-29T16:34:26.346-04:00</updated><title type='text'>Concurrent Update GORM object</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, FreeSans, Helvetica, sans-serif; font-size: 14px; line-height: 12px; "&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;  FYI I believe the reason airport.lock() doesn&amp;#39;t work is because according to the hibernate docs, if &amp;quot;airport&amp;quot; has already been loaded in the session, then lock() does a version check - which may fail under concurrency. The workaround is it evict airport from the session then re-obtain it using session.load(clazz, id, LockMode.UPGRADE), e.g.&lt;/p&gt;  &lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;def session = sessionFactory.currentSession&lt;br&gt;session.evict(airport) // Force the following load to actually go to the DB instead of doing a version check&lt;br&gt;  airport = session.load(Airport.class, &lt;a href="http://airport.id"&gt;airport.id&lt;/a&gt;, LockMode.UPGRADE)&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;  This seems to work OK&lt;/p&gt;&lt;/span&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;Reference: &lt;a href="http://jira.grails.org/browse/GRAILS-2790"&gt;http://jira.grails.org/browse/GRAILS-2790&lt;/a&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-7232884550157809290?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/7232884550157809290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/07/concurrent-update-gorm-object.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7232884550157809290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7232884550157809290'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/07/concurrent-update-gorm-object.html' title='Concurrent Update GORM object'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-5968733228208584763</id><published>2011-05-23T13:10:00.000-04:00</published><updated>2011-05-23T13:10:12.640-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Submission'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine'/><title type='text'>Search Engine Submission Links (Over 100)</title><content type='html'>&lt;div style="background-color: transparent;"&gt;&lt;a href="http://blog.iask.com/add_new_rss.php" id="internal-source-marker_0.4317480593454093"&gt;&lt;span style="background-color: transparent; color: #6c737f; font-family: Georgia; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://blog.iask.com/add_new_rss.php&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://blog.iask.com/ping.php"&gt;&lt;span style="background-color: transparent; color: #6c737f; font-family: Georgia; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://blog.iask.com/ping.php&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.weblogs.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://api.moreover.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.syndic8.com/xmlrpc.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.blogrolling.com/pinger/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://services.newsgator.com/ngws/xmlrpcping.aspx&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.bloglines.com/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.blo.gs/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.blogcatalog.com/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://xping.pubsub.com/ping/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.myblog.jp/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://blog.goo.ne.jp/XMLRPC&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.blogpeople.net/servlet/weblogUpdates&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.twingly.com/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.spinn3r.com/open/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://api.postrank.com/v2/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.wasalive.com/ping/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.icerocket.com:10080/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.feedblitz.com/f/f.fbz?XmlPing&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.zhuaxia.com/rpc/server.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.xianguo.com/xmlrpc/ping.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://blog.iask.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://api.my.yahoo.com/rpc2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.pingomatic.com/rpc2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.blog.qikoo.com/rpc2.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.technorati.com/rpc/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://blog.yodao.com/ping/rpc2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.zhuaxia.com/rpc/server.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.xianguo.com/xmlrpc/ping.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.blog.qikoo.com/rpc2.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://api.my.yahoo.com/rpc2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.pingomatic.com/rpc2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.blog.qikoo.com/rpc2.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.zhuaxia.com/rpc/server.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.technorati.com/rpc/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.xianguo.com/xmlrpc/ping.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.bloglines.com/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://blog.yodao.com/ping/rpc2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://services.newsgator.com/ngws/xmlrpcping.aspx&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://1470.net/api/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://api.feedster.com/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://api.moreover.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://api.moreover.com/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://api.my.yahoo.com/rss/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://bblog.com/ping.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://bitacoras.net/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://blog.goo.ne.jp/XMLRPC&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://blogdb.jp/xmlrpc&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://blogmatcher.com/u.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://bulkfeeds.net/rpc&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://coreblog.org/ping/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://mod-pubsub.org/kn_apps/blogchatt&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.lasermemory.com/lsrpc/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.amagle.com/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.bitacoras.com&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.blo.gs/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.bloggers.jp/rpc/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.cocolog-nifty.com/xmlrpc&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.blogmura.jp/rpc/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.exblog.jp/xmlrpc&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.myblog.jp&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.rootblog.com/rpc.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.syndic8.com/xmlrpc.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.weblogalot.com/rpc.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.weblogs.se/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://pingoat.com/goat/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rcs.datashed.net/RPC2/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.blogbuzzmachine.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.blogrolling.com/pinger/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.icerocket.com:10080/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.newsgator.com/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.pingomatic.com&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.technorati.com/rpc/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.weblogs.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://topicexchange.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://trackback.bakeinu.jp/bakeping.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.a2b.cc/setloc/bp.a2b&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.bitacoles.net/ping.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.blogdigger.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.blogoole.com/ping/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.blogoon.net/ping/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.blogpeople.net/servlet/weblogUpdates&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.blogroots.com/tb_populi.blog?id=1&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.blogshares.com/rpc.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.blogsnow.com/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.blogstreet.com/xrbin/xmlrpc.cgi&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.mod-pubsub.org/kn_apps/blogchatter/ping.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.newsisfree.com/RPCCloud&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.newsisfree.com/xmlrpctest.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.popdex.com/addsite.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.snipsnap.org/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.weblogues.com/RPC/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://xmlrpc.blogg.de&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://blogsearch.google.com/ping/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.feedburner.com/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.feedsky.com/api/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.xianguo.com/xmlrpc/ping.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.technorati.com/rpc/ping&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.pingomatic.com&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.blogpeople.net/servlet/weblogUpdates&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.myblog.jp&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.bloggers.jp/rpc/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://bblog.com/ping.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://api.moreover.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://xping.pubsub.com/ping/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.syndic8.com/xmlrpc.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://ping.weblogalot.com/rpc.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.weblogs.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://topicexchange.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.wasalive.com/ping/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.pingoat.com/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.weblogs.com/pingSiteForm&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://api.my.yahoo.com/RPC2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.feedping.com&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.rssping.com/&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://fgiasson.com/pings/ping.php&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://rpc.feedsky.com/ping&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-5968733228208584763?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/5968733228208584763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/05/search-engine-submission-links-over-100.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5968733228208584763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5968733228208584763'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/05/search-engine-submission-links-over-100.html' title='Search Engine Submission Links (Over 100)'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7121116033146320647</id><published>2011-05-17T11:44:00.002-04:00</published><updated>2011-05-17T11:44:39.535-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='publish android'/><category scheme='http://www.blogger.com/atom/ns#' term='android application'/><title type='text'>Use AndroidGateway.com guard service to ease your paid Android application development</title><content type='html'>&lt;span class="Apple-style-span" style="color: #152a3d; font-family: 'Lucida Grande', Arial, Verdana, sans-serif; font-size: 15px; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Using the same infrastructure stack, removing the need for developers to manually recreate an applications stack for each release to each marketplace.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;a href="https://www.androidgateway.com/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #7ea8fd; font-size: 16px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="Android Authorization and Authentication Service"&gt;Android Gateway Authorization and Authentication Service&lt;/a&gt;&amp;nbsp;lets you manage access to applications that users have downloaded from various Android application marketplaces. To use Android Gateway Authorization and Authentication Service in an application, you need to have a developer account on Android Gateway, and you can publish the application on different Android Marketplaces delivering to users.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Developers need to register for one account and agree to the&lt;a href="https://www.androidgateway.com/content/public/terms" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #7ea8fd; font-size: 16px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="Android Gateway Terms of Service"&gt;&amp;nbsp;Android Gateway terms of service&lt;/a&gt;. Once you are registered, you can obtain your developer API key and start to debugging and testing your authorization and authentication implementation. For more information about publishing on different Android Marketplaces, please refer to each marketplace instructions.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Once your developer account is set up, use the account to:&lt;/div&gt;&lt;ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; list-style-image: initial; list-style-position: outside; list-style-type: initial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; vertical-align: baseline;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 2px; margin-left: 1.5em; margin-right: 0px; margin-top: 2px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 1em; padding-top: 0px; vertical-align: baseline;"&gt;Obtain an API key for licensing&lt;/li&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 2px; margin-left: 1.5em; margin-right: 0px; margin-top: 2px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 1em; padding-top: 0px; vertical-align: baseline;"&gt;Associate your applications to partnership marketplaces&lt;/li&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 2px; margin-left: 1.5em; margin-right: 0px; margin-top: 2px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 1em; padding-top: 0px; vertical-align: baseline;"&gt;Debug and test an application's authorization and authentication implementation&lt;/li&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 2px; margin-left: 1.5em; margin-right: 0px; margin-top: 2px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 1em; padding-top: 0px; vertical-align: baseline;"&gt;Keep track of your application authorization and authentication status&lt;/li&gt;&lt;/ul&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;If you have your developer API ready, after you publish your paid applications to different marketplaces, for instance,&amp;nbsp;&lt;a href="http://www.andapponline.com/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #7ea8fd; font-size: 16px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="Android Application Online"&gt;AndAppOnline.com&lt;/a&gt;, write down your account information and product listing information from that marketplace, go back to Android Gateway, register your application and marketplace association with the information you recorded just now.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;The information you need to register the association are including:&lt;/span&gt;&lt;/div&gt;&lt;ul style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; list-style-image: initial; list-style-position: outside; list-style-type: initial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; vertical-align: baseline;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 2px; margin-left: 1.5em; margin-right: 0px; margin-top: 2px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 1em; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: x-small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Your developer API on the marketplace that you have published your Android application&lt;/span&gt;&lt;/li&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 15px; margin-bottom: 2px; margin-left: 1.5em; margin-right: 0px; margin-top: 2px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 1em; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: x-small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;You application key or unique id on the marketplace after you have published you have published your Android application&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-7121116033146320647?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/7121116033146320647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/05/use-androidgatewaycom-guard-service-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7121116033146320647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7121116033146320647'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/05/use-androidgatewaycom-guard-service-to.html' title='Use AndroidGateway.com guard service to ease your paid Android application development'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-5753115608812009137</id><published>2011-04-16T16:55:00.000-04:00</published><updated>2011-04-16T16:55:03.637-04:00</updated><title type='text'>Android Gateway, authorization and authentication solution for paid android applications</title><content type='html'>&lt;span class="Apple-style-span" style="color: #152a3d; font-family: 'Lucida Grande', Arial, Verdana, sans-serif; font-size: 13px; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 18px; font-weight: bold; line-height: 1em; margin-bottom: 0.8em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;How does it work&lt;/span&gt;&lt;/h2&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;To help Android Application developers add licensing protection to their application, Android Gateway provides open source library (Auth Library) that developers can include in their application project or they can implement by themselves according to the specification. The Auth Library handles all of the authorization and authentication-related communication with the Android Gateway and her partnership marketplaces. With Auth Library integrated, the application can determine its licensing status for current device by simply calling a validation checker method and verifying the received response.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;To help to protect the privilege of developers' paid application, it is strongly recommended that developers use obfuscator programs available for Android applications such as ProGuard, to obfuscate their application code. Obfuscating their code helps to make it more difficult to decompile the application's byte code, modify it — such as by removing the license check — and then recompile and redistribute it.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;For technical detail information such as how to authorize and authenticate through&amp;nbsp;&lt;a href="https://www.androidgateway.com/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #7ea8fd; font-size: 16px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="Android Gateway"&gt;AndroidGateway.com&lt;/a&gt;, please refer to the&amp;nbsp;&lt;a href="https://www.androidgateway.com/content/public/technical-document" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #7ea8fd; font-size: 16px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" title="Android Technical Documents,Android Developer Help"&gt;Technical Documents&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-5753115608812009137?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/5753115608812009137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/04/android-gateway-authorization-and_16.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5753115608812009137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5753115608812009137'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/04/android-gateway-authorization-and_16.html' title='Android Gateway, authorization and authentication solution for paid android applications'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-6293854444682607404</id><published>2011-04-13T23:59:00.002-04:00</published><updated>2011-04-13T23:59:55.472-04:00</updated><title type='text'>Android Gateway, authorization and authentication solution for paid android applications</title><content type='html'>Pretty busy to promote the new service site, &lt;a href="https://www.androidgateway.com/"&gt;AndroidGateway.com&lt;/a&gt;, the guards for paid Android Applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-6293854444682607404?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='' href='https://www.androidgateway.com' length='0'/><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/6293854444682607404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/04/android-gateway-authorization-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6293854444682607404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6293854444682607404'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/04/android-gateway-authorization-and.html' title='Android Gateway, authorization and authentication solution for paid android applications'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-2076811871690721242</id><published>2011-03-15T10:13:00.000-04:00</published><updated>2011-03-15T10:13:19.604-04:00</updated><title type='text'>Throttle Postfix max proc to match Amazon SES max send rate</title><content type='html'>By default Postfix will start up to 100 threads to send emails, but SES at the beginning only allows 1 email per second, the emails exceed the max send rate of SES may get lost. ( However I have never experienced any email lost yet, good to SES). It is a slow accumulation process to build up your MaxSendRate in SES. Here is a trick to throttle your Postfix to reduce the concurrent threads by change the config in master.cf from:&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; color: black; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 668px;"&gt;&lt;code&gt;aws-email  unix  -       n       n       -       -       pipe&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;to:&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; color: black; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 668px;"&gt;&lt;code&gt;aws-email  unix  -       n       n       -       5       pipe&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-2076811871690721242?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/2076811871690721242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/03/throttle-postfix-max-proc-to-match.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/2076811871690721242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/2076811871690721242'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/03/throttle-postfix-max-proc-to-match.html' title='Throttle Postfix max proc to match Amazon SES max send rate'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7946442182999140323</id><published>2011-02-24T23:44:00.000-05:00</published><updated>2011-02-24T23:44:14.857-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SES'/><category scheme='http://www.blogger.com/atom/ns#' term='PostFix'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Simple Email'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Success migrate to Amazon Simple Email Service</title><content type='html'>After couple of days implement, test and monitor, today I successfully migrate my site's SMTP from Gmail to Amazon Simple Email Service(SES). The first daily cron-job kicks in and sends out 1000 emails, hit the limitation of Amazon SES, has to wait for 3 days for Amazon to increase my sending quota and rate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-7946442182999140323?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/7946442182999140323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/02/success-migrate-to-amazon-simple-email.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7946442182999140323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7946442182999140323'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/02/success-migrate-to-amazon-simple-email.html' title='Success migrate to Amazon Simple Email Service'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-6186692504605954936</id><published>2011-02-24T09:41:00.003-05:00</published><updated>2011-02-25T10:19:47.222-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><category scheme='http://www.blogger.com/atom/ns#' term='SES'/><category scheme='http://www.blogger.com/atom/ns#' term='PostFix'/><category scheme='http://www.blogger.com/atom/ns#' term='Secure Postfix'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Simple Email'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Mail'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Basic step to install Postfix to relay email to Amazon SES</title><content type='html'>For many users, this is all one needs to do to configure postfix on an SMTP gateway:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Install postfix from a binary package via your local package tool (rpm, etc.) or by compiling from source and running postfix's INSTALL.sh script.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Open /etc/postfix/main.cf with the text editor of your choice.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Uncomment and set the parameter myhostname to equal your server's fully qualified domain name (FQDN), e.g., “myhostname = james.whatever.com”.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Uncomment and set the parameter mydestination as follows, assuming this is the e-mail gateway for one's entire domain:&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="perl" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;&lt;ol&gt;&lt;li style="color: #003030; font-weight: normal; font: normal normal 130% 'Courier New', Courier, monospace; vertical-align: top;"&gt;&lt;div style="background: none; color: #000020; font: normal normal 1em/1.2em monospace; margin-left: 20px; margin: 0; padding: 0; vertical-align: top;"&gt;mydestination &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;$myhostname&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; localhost&lt;span style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: blue;"&gt;$mydomain&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;$mydomain&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Save and close main.cf.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If desired, add a line to /etc/aliases diverting root's mail to a less-privileged account, e.g., root: james. This is also the place to map aliases for users who are served by internal mail servers (for example, james.someone: james@whatever.whatever.com). When you are done editing and/or adding aliases, save the file and enter the command newaliases to convert it into a hash database.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Execute the command postfix start.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The most common invocations of the postfix command are &lt;b&gt;postfix start&lt;/b&gt;, &lt;b&gt;postfix stop&lt;/b&gt; and &lt;b&gt;postfix reload&lt;/b&gt;. Start and stop are obvious; reload causes postfix to reload its configuration files without stopping and restarting. Another handy one is &lt;b&gt;postfix flush&lt;/b&gt;, which forces postfix to immediately attempt to send all queued messages.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Security Tips:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;In order to prevent giving out information that serves no purpose to legitimate external parties, it is wise to set in the main.cf file the parameter :&lt;br /&gt;&lt;div class="ini" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;&lt;ol&gt;&lt;li style="color: #003030; font-weight: normal; font: normal normal 130% 'Courier New', Courier, monospace; vertical-align: top;"&gt;&lt;div style="background: none; color: #000020; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"&gt;&lt;span style="color: #000099;"&gt;masquerade_domains&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;=&lt;/span&gt;&lt;span style="color: #660066;"&gt; $mydomain&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;Setting the following in main.cf will ensure that only localhost can send emails:&lt;br /&gt;&lt;div class="ini" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;&lt;ol&gt;&lt;li style="color: #003030; font-weight: normal; font: normal normal 130% 'Courier New', Courier, monospace; vertical-align: top;"&gt;&lt;div style="background: none; color: #000020; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"&gt;&lt;span style="color: #000099;"&gt;inet_interfaces&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;=&lt;/span&gt;&lt;span style="color: #660066;"&gt; localhost&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;To turn off unknown local recipient rejects by the SMTP server, specify:&lt;br /&gt;&lt;br /&gt;&lt;div class="ini" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;&lt;ol&gt;&lt;li style="color: #003030; font-weight: normal; font: normal normal 130% 'Courier New', Courier, monospace; vertical-align: top;"&gt;&lt;div style="background: none; color: #000020; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"&gt;/etc/postfix/main.cf:&lt;/div&gt;&lt;/li&gt;&lt;li style="color: #003030; font-weight: normal; font: normal normal 130% 'Courier New', Courier, monospace; vertical-align: top;"&gt;&lt;div style="background: none; color: #000020; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #000099;"&gt;local_recipient_maps&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-6186692504605954936?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/6186692504605954936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/02/basic-step-to-install-postfix-to-relay.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6186692504605954936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6186692504605954936'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/02/basic-step-to-install-postfix-to-relay.html' title='Basic step to install Postfix to relay email to Amazon SES'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8569961935824816804</id><published>2011-02-21T00:41:00.003-05:00</published><updated>2011-02-25T12:12:38.746-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Relay'/><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><category scheme='http://www.blogger.com/atom/ns#' term='SES'/><category scheme='http://www.blogger.com/atom/ns#' term='PostFix'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Simple Email'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Setup Amazon SES to relay email by Grails/Java</title><content type='html'>I used Gmail to send email to my users, but was suffering with Gmail restriction which allows max 500 emails per day. &lt;br /&gt;&lt;br /&gt;After a couple of hours shot and tried, finally I got the PostFix relay through Amazon SES working seamlessly with Grails. &lt;br /&gt;&lt;br /&gt;If you don't know what is Amazon SES, please google by yourself and follow the documentation how to apply for SES on Amazon portal. &lt;br /&gt;&lt;br /&gt;Here are the detail steps.&lt;br /&gt;&lt;br /&gt;1 Download scripts from http://aws.amazon.com/developertools/Amazon-SES&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;http://aws-catalog-download-files.s3.amazonaws.com/AmazonSES-2011-02-02.zip&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;2 Unzip the AmazonSES-2011-02-02.zip to /opt/thirdparty/amazon/bin (or create any folder as your like, but the user you use to execute scripts needs permission to get into the folder to call these scripts)&lt;br /&gt;&lt;br /&gt;3 Chmod 755 for all *.pl files under /opt/thirdparty/amazon/bin&lt;br /&gt;&lt;br /&gt;4 Create a new text file with the name of your choice—aws-credentials, for example.&lt;br /&gt;&lt;br /&gt;Add the following lines ( your own access key and secret key) to this file:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;AWSAccessKeyId=00000000000000&lt;br /&gt;&lt;br /&gt;AWSSecretKey=xxxxxxxxxxxxxxxxxx&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;5 Install Perl ( by default, Linux already ship with the latest Perl)&lt;br /&gt;&lt;br /&gt;6 Install the required Perl modules:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;sudo apt-get install libio-socket-ssl-perl&lt;br /&gt;&lt;br /&gt;sudo apt-get install libxml-libxml-perl&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;7 Verify email address with Amazon (change email to your designated email account)&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;cd /opt/thirdparty/amazon/bin&lt;br /&gt;./ses-verify-email-address.pl -k aws-credentials -v user@example.com&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;8 List verified email addresses&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;./ses-verify-email-address.pl -k aws-credentials -l&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;9 Update the DNS records to add TXT records for your domain to prevent ISPs put your emails into SPAM.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;v=spf1 include:amazonses.com ~all&lt;br /&gt;&lt;br /&gt;spf2.0/pra include:amazonses.com ~all&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;10 Test sending email (use your verified email):&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;touch msgbody.txt  &lt;br /&gt;## edit msgbody.txt&lt;br /&gt;./ses-send-email.pl -k aws-credentials -s "Test of Amazon SES" -f user@example.com user@example.com &amp;lt; msgbody.txt&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;11 Check your email to verify the status&lt;br /&gt;&lt;br /&gt;12 Once it works, go to this URL request for product access: &lt;br /&gt;&lt;div class="html4strict" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/SESAccessRequest&lt;/div&gt;&lt;br /&gt;13 Install PostFix as Satellite Mode&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install postfix&lt;br /&gt;sudo dpkg-reconfigure postfix&lt;br /&gt; &lt;br /&gt;  &amp;gt;General type of mail configuration: Satellite&lt;br /&gt;  &amp;gt;NONE doesn't appear to be requested in current config&lt;br /&gt;  &amp;gt;System mail name: server1.example.com&lt;br /&gt;  &amp;gt;Root and postmaster mail recipient: &amp;lt;admin_user_name&amp;gt;&lt;br /&gt;  &amp;gt;Other destinations for mail: server1.example.com, example.com, localhost.example.com, localhost&lt;br /&gt;  &amp;gt;Force synchronous updates on mail queue?: No&lt;br /&gt;  &amp;gt;Local networks: 127.0.0.0/8&lt;br /&gt;  &amp;gt;Yes doesn't appear to be requested in current config&lt;br /&gt;  &amp;gt;Mialbox size limit (bytes): 0&lt;br /&gt;  &amp;gt;Local address extension character: +&lt;br /&gt;  &amp;gt;Internet protocols to use: all&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;14  Modify the master.cf under /etc/postfix/ to add &lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;aws-email  unix  -       n       n       -       -       pipe&lt;br /&gt;  flags=R user=support argv=/opt/thirdparty/amazon/bin/ses-send-email.pl -r -k /opt/thirdparty/amazon/bin/aws-credentials -e https://email.us-east-1.amazonaws.com -f ${sender} ${recipient}&lt;br /&gt;** There must be at least one white space in front of "flags=R"&lt;br /&gt;** user should be your own user (not admin)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;15 Modify the main.cf under /etc/postfix/ to add &lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;default_transport = aws-email&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;16 cp SES.pm from /opt/thirdparty/amazon/bin to /user/local/lib/site_perl (if not existing, create one), this is important!&lt;br /&gt;&lt;br /&gt;17 &lt;br /&gt;&lt;div class="perl" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;sudo &lt;span style="color: #339933;"&gt;/&lt;/span&gt;etc&lt;span style="color: #339933;"&gt;/&lt;/span&gt;init&lt;span style="color: #339933;"&gt;.&lt;/span&gt;d&lt;span style="color: #339933;"&gt;/&lt;/span&gt;postfix restart&lt;/div&gt;&lt;br /&gt;18 Test postfix locally (use your verified email address)&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;sudo apt-get install mailutils&lt;br /&gt;echo test | mail -s "test email sent" user@example.com &lt;br /&gt;// if the email can't be sent, you have to create a Linix account which is your verified SES username,ie, support, then use "su support" to send email&lt;br /&gt;mailq  // Check the mail queue. &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;19 Verify the SES status&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;./ses-get-stats.pl -k aws-credentials -s&lt;br /&gt;./ses-get-stats.pl -k aws-credentials -q&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ok, everything is running smoothly, now we can go to next section. Use Grails to send email through PostFix relay by Amazon SES.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Section Two:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Use Grails and Email plugin to send email &lt;br /&gt;1 Install Grails ( I'm using Grails 1.3.5)&lt;br /&gt;&lt;br /&gt;2 Install email plugin&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;grails install-plugin mail&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;3 Setup the email setting in Config.groovy&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;grails.mail.overrideAddress="user@example.com" // use your verified email&lt;br /&gt;grails {&lt;br /&gt;  mail {&lt;br /&gt;    host = "localhost"&lt;br /&gt;    port= 25&lt;br /&gt;    props = ["mail.transport.protocol":"smtp",&lt;br /&gt;      "mail.smtp.port":"25",&lt;br /&gt;      "mail.smtp.host":"localhost"]&lt;br /&gt;  } &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;4 Write a simple code to send email, verify your email box is having that email. Bravo!&lt;br /&gt;&lt;div class="java" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;grails console&lt;/div&gt;&lt;br /&gt;&lt;div class="java" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-weight: bold;"&gt;import&lt;/span&gt; &lt;span style="color: #006699;"&gt;org.codehaus.groovy.grails.commons.ApplicationHolder&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-weight: bold;"&gt;import&lt;/span&gt; &lt;span style="color: #006699;"&gt;org.springframework.context.ApplicationContext&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ApplicationContext ctx &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;ApplicationContext&lt;span style="color: #009900;"&gt;)&lt;/span&gt;ApplicationHolder.&lt;span style="color: #006633;"&gt;getApplication&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getMainContext&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;def mailService &lt;span style="color: #339933;"&gt;=&lt;/span&gt; ctx.&lt;span style="color: #006633;"&gt;getBean&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;'mailService'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mailService.&lt;span style="color: #006633;"&gt;sendMail&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; to &lt;span style="color: blue;"&gt;'user@example.com'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; subject &lt;span style="color: blue;"&gt;'Does this work? Oh Yeah!'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; body &lt;span style="color: blue;"&gt;'Sending email through Amazon SES is great.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;5 The &lt;b&gt;beautiful &lt;/b&gt;thing is, you can manipulate the email "from address" in "grails.mail.overrideAddress", which means that you can have multiple Grails applications running on same server serving different domains (in my case) with multiple verified email accounts without setting up the virtual mail domains in PostFix.&lt;br /&gt;&lt;br /&gt;Troubleshooting:&lt;br /&gt;If the email is not received, verify the log under /var/log/mail.log or /var/log/mail.info to see what is going on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8569961935824816804?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8569961935824816804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/02/setup-amazon-ses-to-relay-email-by.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8569961935824816804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8569961935824816804'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/02/setup-amazon-ses-to-relay-email-by.html' title='Setup Amazon SES to relay email by Grails/Java'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-5490608329734889367</id><published>2011-02-20T21:42:00.001-05:00</published><updated>2011-02-24T09:48:32.546-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Simple email service'/><category scheme='http://www.blogger.com/atom/ns#' term='SES'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Prepare for Amazon Simple Email Service (SES) on Ubuntu 10.10</title><content type='html'>1. Download scripts from http://aws.amazon.com/developertools/Amazon-SES&lt;br /&gt;&lt;div class="ini" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;http://aws-catalog-download-files.s3.amazonaws.com/AmazonSES-&lt;span style=""&gt;2011&lt;/span&gt;-02-02.zip&lt;/div&gt;&lt;br /&gt;2. Create a new text file with the name of your choice, aws-credentials, for example.&lt;br /&gt;&lt;br /&gt;Add the following lines ( your own access key and secret key) to this file:&lt;br /&gt;&lt;br /&gt;&lt;div class="ini" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #000099;"&gt;AWSAccessKeyId&lt;/span&gt;&lt;span style="color: #000066; font-weight:bold;"&gt;=&lt;/span&gt;&lt;span style="color: #660066;"&gt;00000000000000&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000099;"&gt;AWSSecretKey&lt;/span&gt;&lt;span style="color: #000066; font-weight:bold;"&gt;=&lt;/span&gt;&lt;span style="color: #660066;"&gt;xxxxxxxxxxxxxxxxxx&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;3. Install the required Perl modules:&lt;br /&gt;&lt;br /&gt;&lt;div class="ini" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;sudo apt-get install libio-socket-ssl-perl&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sudo apt-get install libxml-libxml-perl&lt;/div&gt;&lt;br /&gt;4. Verify email address (use your email domain and account)&lt;br /&gt;&lt;div class="ini" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;ses-verify-email-address.pl -k aws-credentials -v user@example.com&lt;/div&gt;&lt;br /&gt;5. List verified email addresses&lt;br /&gt;&lt;div class="ini" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;ses-verify-email-address.pl -k aws-credentials -l&lt;/div&gt;&lt;br /&gt;6. Update the DNS records to add TXT records for your domain. &lt;br /&gt;&lt;br /&gt;&lt;div class="ini" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #000099;"&gt;v&lt;/span&gt;&lt;span style="color: #000066; font-weight:bold;"&gt;=&lt;/span&gt;&lt;span style="color: #660066;"&gt;spf1 include:amazonses.com ~all&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;spf2.0/pra include:amazonses.com ~all&lt;/div&gt;&lt;br /&gt;7. Test sending email:&lt;br /&gt;&lt;div class="ini" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;ses-send-email.pl -k aws-credentials -s &lt;span style="color: #933;"&gt;&amp;quot;Test of Amazon SES&amp;quot;&lt;/span&gt; -f user@example.com user@example.com &amp;lt; msgbody.txt&lt;/div&gt;&lt;br /&gt;8. Once you are satisfied with SES, go to this URL request for product access:&lt;br /&gt;https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/SESAccessRequest&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-5490608329734889367?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/5490608329734889367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/02/prepare-for-amazon-simple-email-service.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5490608329734889367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5490608329734889367'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/02/prepare-for-amazon-simple-email-service.html' title='Prepare for Amazon Simple Email Service (SES) on Ubuntu 10.10'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7063989437747921454</id><published>2011-02-17T12:50:00.003-05:00</published><updated>2011-02-22T17:51:17.736-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='meta program'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Groovy Meta Programming in Grails Plugin</title><content type='html'>I was implementing a SEO plugin, the idea is inspired by Taggable plugin. The plugin is targeting to generate  and  automatically for each GSP page shows the domain object.&lt;br /&gt;&lt;br /&gt;After a long research and test, I sort it out. In order to save someone else precise time, I share the code here:&lt;br /&gt;&lt;br /&gt;The plugin create two dynamic methods in the domain class that has implemented a specific interface. A taglib will then invoke two new methods to get the property value from the domain instance and generate the  tags in GSP.&lt;br /&gt;&lt;br /&gt;Here is the magic part in the SEOGrailsPlugin.groovy.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;def doWithDynamicMethods = { ctx -&amp;gt;&lt;br /&gt;  for(domainClass in application.domainClasses) {&lt;br /&gt;    if(SEOObject.class.isAssignableFrom(domainClass.clazz)) {&lt;br /&gt;    // domainClass is the GrailsClass represents Content&lt;br /&gt;      domainClass.clazz.metaClass {&lt;br /&gt;        getSEOKeywords { -&amp;gt;&lt;br /&gt;          def tags = delegate.getTags()&lt;br /&gt;          return tags?.join(',')&lt;br /&gt;        }&lt;br /&gt;        getSEODescription { -&amp;gt;&lt;br /&gt;          def caller = delegate   &lt;br /&gt;            // Keep a caller reference, at this moment the delegate is the Content Instance which calls the getSEODescription closure&lt;br /&gt;          if (!delegate.metaClass.'static'.defaultSEODesc){  &lt;br /&gt;            // Check the caller has the static defaultSEODesc&lt;br /&gt;            return ''&lt;br /&gt;          } &lt;br /&gt;          def desc = delegate.defaultSEODesc   &lt;br /&gt;            // Get the Content static defaultSEODesc value, could be a List or String&lt;br /&gt;          def description = []&lt;br /&gt;          if (desc instanceof List){&lt;br /&gt;            desc.each { name -&amp;gt;&lt;br /&gt;              if (domainClass.hasProperty(name)){ &lt;br /&gt;                // Verify the caller in this case is Content Class has the property &lt;br /&gt;                description &amp;lt;&amp;lt; caller.&amp;quot;${name}&amp;quot;.encodeAsHTML()  &lt;br /&gt;                  // get the property value from the actual Content instance&lt;br /&gt;              }&lt;br /&gt;            }&lt;br /&gt;          } else {&lt;br /&gt;            if (domainClass.hasProperty(desc)){&lt;br /&gt;              description &amp;amp;lt;&amp;amp;lt; caller.&amp;quot;${desc}&amp;quot;.encodeAsHTML()&lt;br /&gt;            }&lt;br /&gt;          }&lt;br /&gt;          return description.join(' &amp;#124; ')&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I will be updating this post once I finish cleaning and testing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-7063989437747921454?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/7063989437747921454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/02/groovy-meta-programming-in-grails.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7063989437747921454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7063989437747921454'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/02/groovy-meta-programming-in-grails.html' title='Groovy Meta Programming in Grails Plugin'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-5667566030531077630</id><published>2011-02-16T10:06:00.000-05:00</published><updated>2011-02-16T10:06:27.659-05:00</updated><title type='text'>Android Gateway is about to launch</title><content type='html'>Android Gateway is an one-stop, two-phase authorization and authentication gateway for Android Paid Applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-5667566030531077630?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.androidgateway.com' title='Android Gateway is about to launch'/><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/5667566030531077630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2011/02/android-gateway-is-about-to-launch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5667566030531077630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5667566030531077630'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2011/02/android-gateway-is-about-to-launch.html' title='Android Gateway is about to launch'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8883072999418426983</id><published>2010-12-07T00:00:00.002-05:00</published><updated>2010-12-07T00:02:08.767-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web application'/><category scheme='http://www.blogger.com/atom/ns#' term='debug'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Using Grails Console to debug web application</title><content type='html'>Basically, using this trick to make your web application debug in Grails much more easier.&lt;br /&gt;&lt;div style="background-color: #cccccc; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cccccc; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;import org.codehaus.groovy.grails.commons.ApplicationHolder&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cccccc; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;import org.springframework.context.ApplicationContext&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cccccc; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cccccc; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;ApplicationContext ctx = (ApplicationContext)ApplicationHolder.getApplication().getMainContext()&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cccccc; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cccccc; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;def productService = ctx.getBean('productService')&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cccccc; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;def newApps = productService.getNewProducts()&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #cccccc; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;def updateApps = productService.getUpdatedProducts()&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;......&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It supports auto reload, if changing the services, controllers, taglib classes, the console can load them automatically.&lt;br /&gt;&lt;br /&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8883072999418426983?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8883072999418426983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/12/using-grails-console-to-debug-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8883072999418426983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8883072999418426983'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/12/using-grails-console-to-debug-web.html' title='Using Grails Console to debug web application'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8485557507557012928</id><published>2010-12-03T11:43:00.001-05:00</published><updated>2010-12-03T11:43:43.739-05:00</updated><title type='text'>Using XDelta to incrementally deploy web application on Amazon EC2</title><content type='html'>To deploy Java Web Application on Amazon Elastic Compute Cloud, the common practice is to use SCP to upload the whole Java War file and then move to application server deployment folder. If the War file includes lot of video, images and other third party libraries and the size over 100M or something, it is suffering and painful to wait 30 - 60 minutes for uploading such a file over DSL/Cable. It is not recommended to have a build environment in your production server, what should I do?&lt;br&gt;  &lt;br&gt;&lt;b&gt;Here comes XDelta to rescue, yahoo!&lt;/b&gt;&lt;br&gt;&lt;br&gt;XDelta3, (&lt;a href="http://code.google.com/p/xdelta/"&gt;http://code.google.com/p/xdelta/&lt;/a&gt;) is a tool and library for differential compression. Xdelta release version 3 supports VCDIFF encoding and decoding. Supports compressing 64 bit files on Windows, Linux, etc. There are versions for Linux and Windows. &lt;br&gt;  &lt;br&gt;Depending on the changes between the two Wars, the difference is usually below 5% of the original War file if release iteration is short and quick.&lt;br&gt;&lt;b&gt;&lt;br&gt;How it works? &lt;/b&gt;&lt;br&gt;&lt;br&gt;In your local development environment, after the War file built, says neighbour123-1.8.war, and a previous version of War is kept as neighbour123.ref.war,&lt;br&gt;  run: &lt;b&gt;xdelta3 -e -f -s -q neighbour123.ref.war neighbour123-1.8.war diff.bin&lt;/b&gt;&lt;br&gt;&lt;br&gt;Upload the diff.bin by SCP to Amazon EC2, the file size is about 2 - 5 MB and takes only 1 - 2 minutes.&lt;br&gt;&lt;br&gt;In the production server&lt;br&gt;  run: xdelta3 -d -s -q neighbour123.ref.war  diff.bin neighbour123-1.8.war&lt;br&gt;&lt;br&gt;Here are the definitions for options:&lt;br&gt;&lt;pre class="prettyprint"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;e           compress&lt;/span&gt;&lt;span class="pun"&gt;&lt;br&gt;  &lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;d           decompress&lt;/span&gt;&lt;br&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;f           force overwrite&lt;br&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;q           be quiet&lt;/span&gt;&lt;br&gt;  &lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;s source    source file to copy &lt;/span&gt;&lt;span class="kwd"&gt;from&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="kwd"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; any&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br&gt;  &lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;br&gt;It is &lt;b&gt;important &lt;/b&gt;to make sure the neighbour123.ref.war in two server environments are the same. &lt;br&gt;&lt;br&gt;Building the difference by XDelta is extremely fast, it takes maximum 2 seconds on my P9600 CPU/4G Lenovo T400. &lt;br&gt;  &lt;br&gt;You can apply the same technique not only to Java Web Application deployment, buy also Rails on Ruby and Python, even PHP. &lt;br&gt;&lt;br&gt;Enjoy.&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8485557507557012928?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8485557507557012928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/12/using-xdelta-to-incrementally-deploy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8485557507557012928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8485557507557012928'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/12/using-xdelta-to-incrementally-deploy.html' title='Using XDelta to incrementally deploy web application on Amazon EC2'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-6710797433898121334</id><published>2010-11-02T10:48:00.001-04:00</published><updated>2010-11-02T10:49:51.721-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>A new ERA starts</title><content type='html'>Working for Online Banking Replatform for a bank. It is totally different and new experience to me. Have to pick up tones of technique heard but had never used before.&lt;br /&gt;&lt;br /&gt;Painful but enjoyable.&lt;br /&gt;&lt;br /&gt;Love the Groovy very much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-6710797433898121334?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/6710797433898121334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/11/new-field-starts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6710797433898121334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6710797433898121334'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/11/new-field-starts.html' title='A new ERA starts'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8032322310081469260</id><published>2010-11-02T10:45:00.000-04:00</published><updated>2010-11-02T10:45:26.967-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='transaction'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring Transaction Management</title><content type='html'>&lt;b&gt;How It Works&lt;/b&gt;&lt;br /&gt;PlatformTransactionManageris a general interface for all Spring’s transaction managers.&lt;br /&gt;Spring has several built-in implementations of this interface for use with different transaction&lt;br /&gt;management APIs:&lt;br /&gt;•&amp;nbsp; If you have to deal with only a single data source in your application and access it with&lt;br /&gt;JDBC, DataSourceTransactionManagershould meet your needs.&lt;br /&gt;•&amp;nbsp; If you are using JTA for transaction management on a Java EE application server, you&lt;br /&gt;should use JtaTransactionManagerto look up a transaction from the application server.&lt;br /&gt;•&amp;nbsp; If you are using an object/relational mapping framework to access a database, you&lt;br /&gt;should choose a corresponding transaction manager for this framework, such as&lt;br /&gt;HibernateTransactionManagerand JpaTransactionManager.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8032322310081469260?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8032322310081469260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/11/spring-transaction-management.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8032322310081469260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8032322310081469260'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/11/spring-transaction-management.html' title='Spring Transaction Management'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7275237563390288031</id><published>2010-10-28T14:00:00.002-04:00</published><updated>2010-10-28T14:02:09.694-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='sybase'/><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='writetext'/><category scheme='http://www.blogger.com/atom/ns#' term='RESTFul'/><title type='text'>Inserting TEXT into SYBASE</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr valign="bottom"&gt;&lt;td&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The &lt;i&gt;text&lt;/i&gt; datatype stores up to 2,147,483,647 bytes of printable characters on linked lists of separate data pages. Each page stores a maximum of 1800 bytes of data.&lt;/p&gt;  &lt;p&gt;To save storage space, define &lt;i&gt;text&lt;/i&gt; columns as NULL. When you initialize a &lt;i&gt;text&lt;/i&gt; column with a non-null &lt;b&gt;insert&lt;/b&gt; or &lt;b&gt;update&lt;/b&gt;, Adaptive Server assigns a text pointer and allocates an entire 2K data page to hold the value. &lt;/p&gt;  &lt;p&gt;You cannot use the &lt;i&gt;text&lt;/i&gt; datatype: &lt;/p&gt;   &lt;ul&gt;&lt;li class="fi"&gt;&lt;p&gt;For parameters to stored procedures, as values passed to these parameters, or for local variables&lt;/p&gt;  &lt;/li&gt;&lt;li class="ds"&gt;&lt;p&gt;For parameters to remote procedure calls (RPCs)&lt;/p&gt;  &lt;/li&gt;&lt;li class="ds"&gt;&lt;p&gt;In &lt;b&gt;order by&lt;/b&gt;, &lt;b&gt;compute&lt;/b&gt;, &lt;b&gt;group by&lt;/b&gt;, or &lt;b&gt;union&lt;/b&gt; clauses&lt;/p&gt;  &lt;/li&gt;&lt;li class="ds"&gt;&lt;p&gt;In an index&lt;/p&gt;  &lt;/li&gt;&lt;li class="ds"&gt;&lt;p&gt;In subqueries or joins&lt;/p&gt;  &lt;/li&gt;&lt;li class="ds"&gt;&lt;p&gt;In a &lt;b&gt;where&lt;/b&gt; clause, except with the keyword &lt;b&gt;like&lt;/b&gt;&lt;/p&gt;  &lt;/li&gt;&lt;li class="ds"&gt;&lt;p&gt;With the &lt;b&gt;+&lt;/b&gt; concatenation operator&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr valign="top"&gt;&lt;td&gt;&lt;b&gt;&lt;span style="font-size:180%;"&gt;Inserting TEXT into SYBASE from SAS&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;a name="z1070965"&gt;   TEXT data can only be inserted into a SYBASE table by using the BULK= data set option, as in the following example:   &lt;/a&gt; &lt;/p&gt;&lt;pre&gt;data yourlib.newtable(bulk=yes);&lt;br /&gt;  set work.sasbigtext;&lt;br /&gt;run;  &lt;/pre&gt; &lt;p&gt;If the BULK option is not used, you will receive the following error message:     &lt;/p&gt;&lt;pre&gt;ERROR: Object not found in database. Error Code: -2782&lt;br /&gt;An untyped variable in the PREPARE statement 'S401bcf78'&lt;br /&gt;is being resolved to a TEXT or IMAGE type.&lt;br /&gt;This is illegal in a dynamic PREPARE statement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;The &lt;b&gt;writetext&lt;/b&gt; command completely overwrites any data in the column it affects. The column must already contain a valid text pointer. &lt;/p&gt;  &lt;p&gt;You can use the &lt;b&gt;textvalid()&lt;/b&gt; function to check for a valid pointer:&lt;/p&gt;   select textvalid("blurbs.copy", textptr(copy)) from blurbs   &lt;p&gt;There are two ways to create a text pointer: &lt;/p&gt;   &lt;ul&gt;&lt;li class="fi"&gt;&lt;p&gt;&lt;b&gt;insert&lt;/b&gt; actual data into the &lt;i&gt;text&lt;/i&gt;, &lt;i&gt;unitext&lt;/i&gt;, or &lt;i&gt;image&lt;/i&gt; column &lt;/p&gt;  &lt;/li&gt;&lt;li class="ds"&gt;&lt;p&gt;&lt;b&gt;update&lt;/b&gt; the column with data or a NULL &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;There are two ways to create a text pointer: &lt;/p&gt;   &lt;ul&gt;&lt;li class="fi"&gt;&lt;p&gt;&lt;b&gt;insert&lt;/b&gt; actual data into the &lt;i&gt;text&lt;/i&gt;, &lt;i&gt;unitext&lt;/i&gt;, or &lt;i&gt;image&lt;/i&gt; column &lt;/p&gt;  &lt;/li&gt;&lt;li class="ds"&gt;&lt;p&gt;&lt;b&gt;update&lt;/b&gt; the column with data or a NULL &lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;An “initialized” &lt;i&gt;text&lt;/i&gt; column uses 2K of storage, even to store a couple of words. Adaptive Server saves space by not initializing text columns when explicit or implicit null values are placed in &lt;i&gt;text&lt;/i&gt; columns with &lt;b&gt;insert&lt;/b&gt;. The following code fragment inserts a value with a null text pointer, checks for the existence of a text pointer, and then updates the &lt;i&gt;blurbs&lt;/i&gt; table. Explanatory comments are embedded in the text:&lt;/p&gt;   &lt;pre&gt;/* Insert a value with a text pointer. This could&lt;br /&gt;** be done in a separate batch session. */&lt;br /&gt;insert blurbs (au_id) values ("267-41-2394")&lt;br /&gt;/* Check for a valid pointer in an existing row.&lt;br /&gt;** Use textvalid in a conditional clause; if no&lt;br /&gt;** valid text pointer exists, update ’copy’ to null&lt;br /&gt;** to initialize the pointer. */&lt;br /&gt;if (select textvalid("blurbs.copy", textptr(copy))&lt;br /&gt;    from blurbs&lt;br /&gt;    where au_id = "267-41-2394") = 0&lt;br /&gt;begin&lt;br /&gt;    update blurbs&lt;br /&gt;       set copy = NULL&lt;br /&gt;       where au_id = "267-41-2394"&lt;br /&gt;end&lt;br /&gt;/*&lt;br /&gt;** use writetext to insert the text into the&lt;br /&gt;** column. The next statements put the text&lt;br /&gt;** into the local variable @val, then writetext&lt;br /&gt;** places the new text string into the row&lt;br /&gt;** pointed to by @val. */&lt;br /&gt;declare @val varbinary(16)&lt;br /&gt;select @val = textptr(copy)&lt;br /&gt;    from blurbs&lt;br /&gt;    where au_id = "267-41-2394"&lt;br /&gt;writetext blurbs.copy @val&lt;br /&gt;    "This book is a must for true data junkies."&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-7275237563390288031?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/7275237563390288031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/10/inserting-text-into-sybase.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7275237563390288031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7275237563390288031'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/10/inserting-text-into-sybase.html' title='Inserting TEXT into SYBASE'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-4279667437411928535</id><published>2010-09-20T13:46:00.001-04:00</published><updated>2010-09-20T13:46:52.978-04:00</updated><title type='text'>Top Ten Security Attack in Software Application</title><content type='html'>&lt;p&gt;The OWASP Top 10 Web Application Security Risks for 2010 are: &lt;/p&gt; &lt;ul&gt;&lt;li&gt;A1: Injection  &lt;/li&gt;&lt;li&gt;A2: Cross-Site Scripting (XSS)  &lt;/li&gt;&lt;li&gt;A3: Broken Authentication and Session Management  &lt;/li&gt;&lt;li&gt;A4: Insecure Direct Object References  &lt;/li&gt;&lt;li&gt;A5: Cross-Site Request Forgery (CSRF)  &lt;/li&gt;&lt;li&gt;A6: Security Misconfiguration  &lt;/li&gt;&lt;li&gt;A7: Insecure Cryptographic Storage  &lt;/li&gt;&lt;li&gt;A8: Failure to Restrict URL Access  &lt;/li&gt;&lt;li&gt;A9: Insufficient Transport Layer Protection &lt;/li&gt;&lt;li&gt;A10: Unvalidated Redirects and Forwards  &lt;/li&gt;&lt;/ul&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-4279667437411928535?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/4279667437411928535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/09/top-ten-security-attack-in-software.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4279667437411928535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4279667437411928535'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/09/top-ten-security-attack-in-software.html' title='Top Ten Security Attack in Software Application'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-4842235920753606825</id><published>2010-09-20T13:45:00.000-04:00</published><updated>2010-09-20T13:46:13.334-04:00</updated><title type='text'>Special XML attacks</title><content type='html'>&lt;div class="h2"&gt; &lt;h2&gt;Special XML attacks&lt;/h2&gt; &lt;/div&gt;    &lt;p&gt;XML messages have a few intrinsic weakness, that Web Service creators  should know about. None of these problems are unique to SOAP; anyone  processing incoming XML needs to know and resist these.&lt;/p&gt;   &lt;ol&gt;&lt;li&gt;Large XML Documents&lt;br&gt; Have a client post an XML doc of extreme length/depth  &amp;lt;foo&amp;gt;&amp;lt;foo&amp;gt;&amp;lt;foo&amp;gt;...&amp;lt;/foo&amp;gt;&amp;lt;/foo&amp;gt;&amp;lt;/foo&amp;gt;  This does bad things to DOM parsers and memory consumption on the  server: a DoS attack. The issue here is that the costs of handling a  large XML document are much greater than the cost of generating one.&lt;/li&gt;&lt;li&gt;Entity Expansion Attacks.&lt;br&gt; If an XML doc header declares some recursive entity declarations, and  the file refers to them, then bad things happen. Axis became immune to  this between versions 1.0 and 1.1.&lt;/li&gt;&lt;li&gt;Entities referring to the filesystem.&lt;br&gt; Here you declare an entity referring to a local file, then expand it.  Result: you may be able to probe for files, perhaps even get a copy of  it in the error response. As Axis does not support entities any more, it  resists this. If your code has any way of resolving URLs from incoming  messages, you may recreate this problem.&lt;/li&gt;&lt;/ol&gt;   &lt;p&gt;The other thing to know about XML is that string matching is not  enough to be sure that the content is safe, because of the many ways to  reformat the same XML.&lt;/p&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-4842235920753606825?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/4842235920753606825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/09/special-xml-attacks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4842235920753606825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4842235920753606825'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/09/special-xml-attacks.html' title='Special XML attacks'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-1306862809373317256</id><published>2010-09-09T11:19:00.000-04:00</published><updated>2010-09-09T11:20:10.158-04:00</updated><title type='text'>Use CSS3 and HTML 5 to create sticky note</title><content type='html'>Here are the sample&lt;br&gt;&lt;br&gt;&lt;a href="http://nettuts.s3.amazonaws.com/771_sticky/step1.html"&gt;http://nettuts.s3.amazonaws.com/771_sticky/step1.html&lt;/a&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-1306862809373317256?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/1306862809373317256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/09/use-css3-and-html-5-to-create-sticky.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1306862809373317256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1306862809373317256'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/09/use-css3-and-html-5-to-create-sticky.html' title='Use CSS3 and HTML 5 to create sticky note'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-4118811086550153180</id><published>2010-09-08T17:43:00.001-04:00</published><updated>2010-09-08T17:43:24.887-04:00</updated><title type='text'>JSR 168 VS JSR 286</title><content type='html'>&lt;span class="postbody"&gt;&lt;b&gt;JSR-168 – What is missing?&lt;/b&gt; &lt;br&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="postbody"&gt;inter-portlet communication, &lt;/span&gt;&lt;span class="postbody"&gt;only supported within the same portlet application  using session attributes &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;    portlet filters &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt; target portlets will only "see" messages during next  render request &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;portlets cannot (should not) update their state during a  render request: "event" handling not really possible &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt; A portlet can only render html fragments &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Have to fallback/delegate to the servlet container &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Requires coordination between portlet and servlet &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;javascript or css can only be embedded withing the  content markup; no body onLoad handling hooks &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;API forbids adding cookies: only client side setting of  cookies using javascript is possible &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Most web frameworks are Servlet API only &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Servlet dispatching not supported from processAction &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Needs Portals Bridges or similar solutions &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;JSTL support very limited&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="postbody"&gt;&lt;br&gt;  &lt;br&gt; &lt;b&gt;JSR-286 &lt;/b&gt;&lt;br&gt;  &lt;br&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="postbody"&gt;Binary compatible with JSR-168 &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Alignment with J2EE 1.4, WSRP 2.0 &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Portlet coordination &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Public render parameters &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Shared session state across applications (maybe) &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Portlet events &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Resource serving &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;AJAX support &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Portlet filters &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Extended cache support &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="postbody"&gt;Improved support for common web frameworks &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="postbody"&gt;&lt;br&gt; &lt;/span&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-4118811086550153180?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/4118811086550153180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/09/jsr-168-vs-jsr-286.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4118811086550153180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4118811086550153180'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/09/jsr-168-vs-jsr-286.html' title='JSR 168 VS JSR 286'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8956588503880045739</id><published>2010-09-06T15:32:00.001-04:00</published><updated>2010-09-06T15:32:47.426-04:00</updated><title type='text'>Is Google So Call "OPEN"?</title><content type='html'>&lt;span class="z19Dle zG9tqc" id="col-z13izhahoza0zzh2b22yhl2guqves5ygl04"&gt;&lt;span class="HgYomf"&gt;&lt;span style="display: block;" class="QGJaM Ig Uqtsze"&gt;&lt;p&gt;话说我们团队的作品 &lt;a href="http://rockplayer.freecoder.org/"&gt;RockPlayer for android&lt;/a&gt;  在 Android Market 上正式发布有 1 个半月了, 算是我王婆卖瓜吧, 来自全球各地的反响还是很不错的.  我们也正在很努力地做进一步的完善和增强, 希望能够进一步地提供更多的功能和更好的性能. 可是, 我们的努力, 由于 Google 在  android market 上的行为, 很可能成为泡影, 至少, 也会是一个非常严重的打击吧.&lt;/p&gt; &lt;p&gt;8 月中旬的某天, 有用户反映在 Market 上找不到 RockPlayer 的 ARMv7 和 ARMv6+VFP 的版本了,  我们赶紧连上 market 一看究竟, 发现这两个版本已经被标记为 suspended 了. 我们的第一感觉是很莫名其妙, 不知道什么原因使得  Google 把这两个版本  suspend 了. 还有剩下的一个版本还在, 用户还能从 Market 下载.  于是我们一方面告知用户需要其余版本的请到网站进行下载, 另一方面积极地想办法寻找与 Google 沟通的方式. 无奈的是,  无论我们通过什么样的途径向 Google 询问 RockPlayer 为啥被 suspend 的原因, 始终得不到任何回答. 同时, 通过在  Internet 上的搜索发现, 象我们一样, 被 suspend 了却得不到任何回应的开发者还有很多. 甚至, 在 Internet  都找不到任何一个 Google 对此类事件有回应的实例!&lt;/p&gt; &lt;p&gt;事情还没完. 今天早上一起来, 发现连剩下的那个都被 suspend 了. 同样是没有任何说明!&lt;/p&gt; &lt;p&gt;&lt;a href="http://fingermove.com/wp-content/uploads/2010/09/RockPlayerSuspended.png"&gt;&lt;img title="RockPlayerSuspended" src="https://0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;amp;gadget=a&amp;amp;rewriteMime=image/*&amp;amp;refresh=31536000&amp;amp;url=http://fingermove.com/wp-content/uploads/2010/09/RockPlayerSuspended-1024x153.png" alt="" height="153" width="1024" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Google, 你不是很 open 吗? 你不是就打着 open 的旗号来跟 iPhone 抗衡吗? 但至少, AppStore  拒绝我的应用会给我一个理由, 让我可以修改了之后重新提交. 而你呢? 连个理由都不给, 并且对询问没有任何回应. 这难道就叫 open 吗?  这难道是一个口口声声要号称赶超 AppStore 的 Market 应该干的事吗? 不管 AppStore 是如何独断 – Google  还常拿这个来攻击 AppStore 并号称自己不作监管 – 至少, 对于与开发者的沟通来说, 远远好于这个号称 open 的 android  market!&lt;/p&gt; &lt;p&gt;如果 Google 继续这么做, 那么, 对不起, Android Market 永远都赶不上 AppStore 的.&lt;/p&gt; &lt;p&gt;最后还需要说明的是: 我们不会放弃, 会继续进行版本更新, 同时也会以积极的态度去继续试图跟 Google 沟通. 毕竟, market 如果能变得更好一点, 无论对开发者还是用户, 都是一件好事.&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8956588503880045739?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8956588503880045739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/09/is-google-so-call-open.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8956588503880045739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8956588503880045739'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/09/is-google-so-call-open.html' title='Is Google So Call &quot;OPEN&quot;?'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-6190295263643105799</id><published>2010-07-28T17:27:00.000-04:00</published><updated>2010-07-28T17:27:20.615-04:00</updated><title type='text'>OI Notepad | Android Application Online</title><content type='html'>&lt;a href="http://www.andapponline.com/public/product/sTcqSGujdCoJ"&gt;OI Notepad | Android Application Online&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Very productive. Developed a lot excellent Android applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-6190295263643105799?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.andapponline.com/public/product/sTcqSGujdCoJ' title='OI Notepad | Android Application Online'/><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/6190295263643105799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/07/oi-notepad-android-application-online.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6190295263643105799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6190295263643105799'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/07/oi-notepad-android-application-online.html' title='OI Notepad | Android Application Online'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-3856478610323093007</id><published>2010-07-27T22:06:00.008-04:00</published><updated>2011-03-01T13:21:45.418-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JNDI'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><category scheme='http://www.blogger.com/atom/ns#' term='broken pipe'/><title type='text'>Use JNDI datasource for MySQL in Grails and Tomcat 6.0</title><content type='html'>The dataSource for MySQL is always experiencing broken pipe issue, although set the autoReconnect=true, and tune the C3P0 connection pool properties does not help.&lt;br /&gt;Spent a few hours and finally made JNDI datasource for MySQL in Grails 1.3.2 and Tomcat 6.0 to work. ( There were couple of threads and comments you can find by Google, but there were mistakes here and there).&lt;br /&gt;&lt;br /&gt;Here are the detail:&lt;br /&gt;&lt;br /&gt;In DataSource.groovy, remove datasource section, keep the hibernate section as:&lt;br /&gt;&lt;div class="groovy" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;hibernate &lt;span style="color: #66cc66;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; dialect&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: red;"&gt;'org.hibernate.dialect.MySQL5Dialect'&lt;/span&gt; &lt;span style="color: grey; font-style: italic;"&gt;// Mandatory&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; cache.&lt;span style="color: #006600;"&gt;use_second_level_cache&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20true" style="color: #000060;"&gt;&lt;span style="color: black; font-weight: bold;"&gt;true&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; cache.&lt;span style="color: #006600;"&gt;use_query_cache&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20true" style="color: #000060;"&gt;&lt;span style="color: black; font-weight: bold;"&gt;true&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; cache.&lt;span style="color: #006600;"&gt;provider_class&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: red;"&gt;'org.hibernate.cache.EhCacheProvider'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #66cc66;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;and in the "Production" section:&lt;br /&gt;&lt;div class="groovy" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;production &lt;span style="color: #66cc66;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; dataSource &lt;span style="color: #66cc66;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dbCreate &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: red;"&gt;"update"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pooled &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20false" style="color: #000060;"&gt;&lt;span style="color: black; font-weight: bold;"&gt;false&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; jndiName &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: red;"&gt;"java:comp/env/jdbc/YOUR JNDI NAME"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #66cc66;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If you need to work on development without datasource, here are the code:&lt;br /&gt;&lt;div class="groovy" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;development &lt;span style="color: #66cc66;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; dataSource &lt;span style="color: #66cc66;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; url &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: red;"&gt;"jdbc:mysql://127.0.0.1:3306/DATABASENAME?useUnicode=true&amp;amp;amp;characterEncoding=UTF-8"&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dbCreate &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &amp;nbsp;&lt;span style="color: red;"&gt;"update"&lt;/span&gt; &amp;nbsp;&lt;span style="color: grey; font-style: italic;"&gt;// one of 'create', 'create-drop','update' &amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; username &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: red;"&gt;"root"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; password &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: red;"&gt;"xxxxxxxxxxxxx"&lt;/span&gt; &amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; driverClassName &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: red;"&gt;"com.mysql.jdbc.Driver"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #66cc66;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;If you are using "/" as your context, the context file for Tomcat will be under $TOMCAT_HOME/conf/Catalina/YOURSERVERNAME/ROOT.xml, otherwise it will be $TOMCAT_HOME/conf/Catalina/yourcontext.xml or your META-INF/context.xml under your GRAILS project.&lt;br /&gt;&lt;br /&gt;Edit the context.xml to be something like this:&lt;br /&gt;&lt;div class="xml" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&lt;span style="color: black; font-weight: bold;"&gt;&amp;lt;context&lt;span style="color: black; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&lt;span style="color: black; font-weight: bold;"&gt;&amp;lt;resource&lt;/span&gt; &lt;span style="color: #000066;"&gt;auth&lt;/span&gt;=&lt;span style="color: red;"&gt;"Container"&lt;/span&gt; &lt;span style="color: #000066;"&gt;driverclassname&lt;/span&gt;=&lt;span style="color: red;"&gt;"com.mysql.jdbc.Driver"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000066;"&gt;maxactive&lt;/span&gt;=&lt;span style="color: red;"&gt;"100"&lt;/span&gt; &lt;span style="color: #000066;"&gt;maxidle&lt;/span&gt;=&lt;span style="color: red;"&gt;"30"&lt;/span&gt; &lt;span style="color: #000066;"&gt;maxwait&lt;/span&gt;=&lt;span style="color: red;"&gt;"10000"&lt;/span&gt; &lt;span style="color: #000066;"&gt;name&lt;/span&gt;=&lt;span style="color: red;"&gt;"jdbc/YOURJNDINAME"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000066;"&gt;password&lt;/span&gt;=&lt;span style="color: red;"&gt;"javadude"&lt;/span&gt; &lt;span style="color: #000066;"&gt;removeabandoned&lt;/span&gt;=&lt;span style="color: red;"&gt;"true"&lt;/span&gt; &lt;span style="color: #000066;"&gt;removeabandonedtimeout&lt;/span&gt;=&lt;span style="color: red;"&gt;"60"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;=&lt;span style="color: red;"&gt;"javax.sql.DataSource"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000066;"&gt;url&lt;/span&gt;=&lt;span style="color: red;"&gt;"jdbc:mysql://127.0.0.1:3306/DATABASENAME?useUnicode=true&amp;amp;amp;characterEncoding=UTF-8"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000066;"&gt;username&lt;/span&gt;=&lt;span style="color: red;"&gt;"javauser"&lt;/span&gt; &lt;span style="color: #000066;"&gt;validationquery&lt;/span&gt;=&lt;span style="color: red;"&gt;"SELECT 1;"&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;&amp;lt;/resource&lt;span style="color: black; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900;"&gt;&lt;span style="color: black; font-weight: bold;"&gt;&amp;lt;/context&lt;span style="color: black; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;It is &lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;not &lt;/span&gt;&lt;/b&gt;necessary to create the resource reference in the Web.xml by creating a &lt;span style="color: red;"&gt;_Events.&lt;/span&gt;groovy under GRAILS project script folder, otherwise it will prompts lobException if BLOB/CLOB has been used in the domain classes&lt;br /&gt;&lt;br /&gt;The underlying code in _Events.groovy are not necessary:&lt;br /&gt;&lt;div class="groovy" style="background-color: #f0f0f0; border: 1px solid #d0d0d0; color: #000066; font-family: monospace;"&gt;&lt;span style="color: grey; font-style: italic;"&gt;//import groovy.xml.StreamingMarkupBuilder&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;//import grails.util.*&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;//import groovy.util.*&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;//eventWebXmlEnd = {String tmpfile -&amp;amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp;println 'Start to twist the web.xml file =======================&amp;amp;gt;'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp;if (GrailsUtil.environment == 'production') {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;def root = new XmlSlurper().parse(webXmlFile)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// add the data source&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.appendNode {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'resource-ref'{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'description'('The Andapponline Database resource')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'res-ref-name'('jdbc/DATABASENAME')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'res-type'('javax.sql.DataSource')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'res-auth'('Container')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;webXmlFile.text = new StreamingMarkupBuilder().bind {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mkp.declareNamespace("": "http://java.sun.com/xml/ns/j2ee")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mkp.yield(root)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;// &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-style: italic;"&gt;//}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;The last step, copy the mysql connectorJ jar file to $TOMCAT_HOME/lib.&lt;br /&gt;&lt;br /&gt;All Set.&lt;br /&gt;&lt;br /&gt;Help your neighbors, help yourself, visit &lt;a href="http://www.neighbour123.com/"&gt;http://www.neighbour123.com&lt;/a&gt;&lt;br /&gt;Looking for Android applications for your hand-held? Get them from &lt;a href="http://www.andapponline.com/"&gt;http://www.andapponline.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-3856478610323093007?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/3856478610323093007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/07/use-jndi-datasource-for-mysql-in-grails.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3856478610323093007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3856478610323093007'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/07/use-jndi-datasource-for-mysql-in-grails.html' title='Use JNDI datasource for MySQL in Grails and Tomcat 6.0'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-3090179102633024242</id><published>2010-06-06T23:06:00.003-04:00</published><updated>2010-06-06T23:08:06.397-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tool exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='share'/><category scheme='http://www.blogger.com/atom/ns#' term='recrprocal'/><category scheme='http://www.blogger.com/atom/ns#' term='neighbor service'/><category scheme='http://www.blogger.com/atom/ns#' term='neighbor'/><title type='text'>Reuse, recycle, reciprocal. Save environment, save the planet.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.neighbour123.com/images/logo.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 176px; height: 46px;" src="http://www.neighbour123.com/images/logo.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.neighbour123.com/"&gt;http://www.neighbour123.com&lt;/a&gt; is a Location Base Service  (LBS)  Web  2.0 platform for neighbors to publish free classified  information,  share with each other for stuff, labor, service, event,  etc. By posting  what you want or what you can offer, spare things in the  garage can be  made use for the people who need them indeed.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Reuse,   recycle, reciprocal.  Save environment, save the  planet.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Everybody  can help, help yourself, help your neighbors.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-3090179102633024242?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/3090179102633024242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/06/reuse-recycle-reciprocal-save.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3090179102633024242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3090179102633024242'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/06/reuse-recycle-reciprocal-save.html' title='Reuse, recycle, reciprocal. Save environment, save the planet.'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-736711323310394741</id><published>2010-06-05T01:30:00.001-04:00</published><updated>2010-06-05T01:31:43.093-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='share'/><category scheme='http://www.blogger.com/atom/ns#' term='neighbor service'/><category scheme='http://www.blogger.com/atom/ns#' term='neighbor'/><category scheme='http://www.blogger.com/atom/ns#' term='classified'/><title type='text'>Performance optimization</title><content type='html'>&lt;span class="z19Dle" id="col-z13yepq5uubtt5dng22ri5vwmwr3wrqir04"&gt;&lt;span class="zo"&gt;&lt;a href="http://www.neighbour123.com"&gt;Neighbour123.com&lt;/a&gt;, performance optimization result:&lt;br /&gt;&lt;br /&gt;Performance overview&lt;br /&gt;&lt;br /&gt;On average, pages in your site take 0.9 seconds to load (updated on  Jun 2, 2010). This is faster than 92% of sites. These estimates are of  medium accuracy (between 100 and 1000 data points). &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 204);"&gt;&lt;a href="http://www.neighbour123.com"&gt;Neighbour123.com&lt;/a&gt; is a  Location Base Service (LBS)  Web 2.0 platform for neighbors to share  with each other for stuff, labor, service, event, etc. By posting what  you want or what you can offer, as well as some spare things in your  garage, you can save serious cash by borrowing from your neighbors,  helping from your neighbors or you can earn easy cash for yourself. &lt;br /&gt;&lt;/span&gt; &lt;p style="text-align: center;"&gt;&lt;span style="color: rgb(51, 153, 204);"&gt;&lt;strong&gt;Everybody  can help, help yourself, help your neighbors.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-736711323310394741?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/736711323310394741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/06/performance-optimization.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/736711323310394741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/736711323310394741'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/06/performance-optimization.html' title='Performance optimization'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-9100646598404723303</id><published>2010-05-10T22:02:00.001-04:00</published><updated>2010-05-10T22:03:10.050-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='publish android'/><category scheme='http://www.blogger.com/atom/ns#' term='download android'/><category scheme='http://www.blogger.com/atom/ns#' term='android application'/><title type='text'>Welcome to Android Application Online</title><content type='html'>&lt;span class="z19Dle" id="col-z13pxrqg5ta5wf0zt04cexsrjmfmwjmytuw0k"&gt;&lt;span class="zo"&gt;Dear Chinese Android Application Developers,&lt;br /&gt;&lt;br /&gt;This is James and David, entrepreneurs of Android Application Online  (&lt;a href="http://www.andapponline.com/" class="ot-anchor"&gt;http://www.andappon&lt;wbr&gt;line.com&lt;/a&gt;).  We would like to invite you to host your application on our web site,  Android Application Online (&lt;a href="http://www.andapponline.com/" class="ot-anchor"&gt;http://www.andappon&lt;wbr&gt;line.com&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;We are Android Application Online, a quick growth start-up company  based on Toronto, Ontario, Canada. We are new, fast and aggressive. We  are tech savvy, we love technology. We are gearing toward Android phone  users who are looking to fill their mobile devices with QUALITY  software. With the constantly growing amount of visitors and  contributors of the project, we set our mission to provide Android phone  users and developers with the best centralized collection of quality  mobile software resources in the most convenient fashion.&lt;br /&gt;&lt;br /&gt;Why developers want to publish their applications to our site?&lt;br /&gt;&lt;br /&gt;1)      Marketing: we are aggressively marketing our site; help  them to reach specific interest groups. They can leverage our marketing  power to extend their applications reach.&lt;br /&gt;&lt;br /&gt;2)      Connecting them with a boarder user base – we will fine  users for developers and feed developers with ideas and usability  feedback.&lt;br /&gt;&lt;br /&gt;3)      Connecting them with developers community – discuss and  share technologies and experience.&lt;br /&gt;&lt;br /&gt;4)      Fee: free for developers to publish apps for now. Take  advantage of the current promotion.&lt;br /&gt;&lt;br /&gt;5)      Management function: Functions for developers to manage  their applications, updates and order history.&lt;br /&gt;&lt;br /&gt;6)      Service: Translation - help and partner with them to  translate the product into different languages.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We are looking forward to hear from you and we are hoping us all  together, with our Win-Win-Win strategy, to achieve all success.&lt;br /&gt;&lt;br /&gt;Should you agree, you can follow the link Developer Registration, or  copy the URL &lt;a href="http://www.andapponline.com/developer/register" class="ot-anchor"&gt;http://www.andapponl&lt;wbr&gt;ine.com/developer/re&lt;wbr&gt;gister&lt;/a&gt;  to your browser, and follow a simple 2 minutes create-activate-publ&lt;wbr&gt;ish  process, you can have your application published and host on Android  Application Online and it is absolutely FREE.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are some information for you reference:&lt;br /&gt;&lt;br /&gt;About Us: &lt;a href="http://www.andapponline.com/company/about" class="ot-anchor"&gt;http://www.andapponl&lt;wbr&gt;ine.com/company/abou&lt;wbr&gt;t&lt;/a&gt;&lt;br /&gt;Term of Use: &lt;a href="http://www.andapponline.com/company/termOfUse" class="ot-anchor"&gt;http://www.andapponl&lt;wbr&gt;ine.com/company/term&lt;wbr&gt;OfUse&lt;/a&gt;&lt;br /&gt;Privacy Policy: &lt;a href="http://www.andapponline.com/company/policy" class="ot-anchor"&gt;http://www.andapponl&lt;wbr&gt;ine.com/company/poli&lt;wbr&gt;cy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We can be reached by &lt;a href="mailto:support@andapponline.com" class="ot-anchor"&gt;support@andapponline&lt;wbr&gt;.com&lt;/a&gt;, if you have any  questions, please do not hesitate to contact us.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Yours sincerely,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;James &amp;amp; David&lt;br /&gt;&lt;br /&gt;Entrepreneurs, Android Application Online&lt;br /&gt;Web Site: &lt;a href="http://www.andapponline.com/" class="ot-anchor"&gt;http://www.andapponl&lt;wbr&gt;ine.com&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-9100646598404723303?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/9100646598404723303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/05/welcome-to-android-application-online.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/9100646598404723303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/9100646598404723303'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/05/welcome-to-android-application-online.html' title='Welcome to Android Application Online'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-164669720504507285</id><published>2010-05-04T16:53:00.000-04:00</published><updated>2010-05-04T16:53:05.709-04:00</updated><title type='text'>Netwiser @ RISGuru: Neighbor123.com</title><content type='html'>&lt;a href="http://netwiser.blogspot.com/2010/05/neighbor123com.html"&gt;Netwiser @ RISGuru: Neighbor123.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-164669720504507285?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://netwiser.blogspot.com/2010/05/neighbor123com.html' title='Netwiser @ RISGuru: Neighbor123.com'/><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/164669720504507285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/05/netwiser-risguru-neighbor123com.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/164669720504507285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/164669720504507285'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/05/netwiser-risguru-neighbor123com.html' title='Netwiser @ RISGuru: Neighbor123.com'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8223986666670898403</id><published>2010-05-04T16:51:00.001-04:00</published><updated>2010-05-04T16:52:52.540-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tool exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='tool'/><category scheme='http://www.blogger.com/atom/ns#' term='neighbor service'/><category scheme='http://www.blogger.com/atom/ns#' term='neighbor'/><title type='text'>Neighbor123.com</title><content type='html'>&lt;div class="entry"&gt;      &lt;div class="snap_preview"&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add deal maker in cron job using quatz plug in&lt;/li&gt;&lt;li&gt;Redefine the email templates for new response and deal&lt;/li&gt;&lt;li&gt;Organize images into single image&lt;/li&gt;&lt;li&gt;Add inactivate user filter&lt;/li&gt;&lt;li&gt;Enforce SEO&lt;/li&gt;&lt;li&gt;Disable delivery in response&lt;/li&gt;&lt;li&gt;Restructure category&lt;/li&gt;&lt;li&gt;Add images to each category&lt;/li&gt;&lt;li&gt;change the home icon in show request after finish the creation&lt;/li&gt;&lt;li&gt;Change the related post to related wanted and related offer&lt;/li&gt;&lt;li&gt;In deal making, provide list of possibilities, best and worst option&lt;/li&gt;&lt;li&gt;In deal making, provide list of reply&lt;/li&gt;&lt;li&gt;Change reply to wanted or offered.&lt;/li&gt;&lt;li&gt;Add message to response as well&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Welcome to neighbor123.com, &lt;a href="http://www.neighbor123.com"&gt;http://www.neighbor123.com&lt;/a&gt;, help your  neighbors, help yourself.&lt;/p&gt; &lt;/div&gt;         &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8223986666670898403?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8223986666670898403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/05/neighbor123com.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8223986666670898403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8223986666670898403'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/05/neighbor123com.html' title='Neighbor123.com'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-9190500997284606391</id><published>2010-04-22T23:41:00.000-04:00</published><updated>2010-04-22T23:42:03.106-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android application'/><title type='text'>Andapponline.com has deployed a new release with enhancement and bug fixes.</title><content type='html'>&lt;span class="It"&gt;&lt;/span&gt;&lt;div class="YJ"&gt;&lt;span class="z19Dle" id="col-z13oedfrsszdetto304cexsrjmfmwjmytuw0k"&gt;&lt;span class="zo"&gt;Andapponline.com has deployed a new release with enhancement and bug fixes.&lt;/span&gt;&lt;/span&gt;&lt;span class="Ia dm2Ocf"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="nH zm"&gt;&lt;div pressed="false" class="O-L"&gt;&lt;br /&gt;&lt;div class="O-L-Jm"&gt;&lt;p class="O-L-Jm-K0"&gt;&lt;a href="http://www.andapponline.com/" class="zn" target="_blank"&gt;Android Application Online - Welcome to Android Application Store&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="O-L-JC"&gt;&lt;p class="O-L-JC-K0"&gt;Android Application Online, dedicated Android application platform and store, for Android developers to publish, host and sell and for Android end-users to purchase and download Android Applications&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-9190500997284606391?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/9190500997284606391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/04/andapponlinecom-has-deployed-new.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/9190500997284606391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/9190500997284606391'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/04/andapponlinecom-has-deployed-new.html' title='Andapponline.com has deployed a new release with enhancement and bug fixes.'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7178753330307011483</id><published>2010-03-05T16:32:00.001-05:00</published><updated>2010-03-05T16:34:35.377-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='android application'/><title type='text'>Android application online performance boost</title><content type='html'>&lt;div class="posttitle"&gt;March 5, 2010 by &lt;a href="http://netwiser.wordpress.com/author/netwiser/" title="Posts by netwiser"&gt;netwiser&lt;/a&gt;     &lt;/div&gt;          &lt;div class="entry"&gt;      &lt;div class="snap_preview"&gt;&lt;p&gt;Android application online is releasing her version1.5. After a series&lt;br /&gt;of serious optimization and enhancement including UI optimization,&lt;br /&gt;caching, pooling, multiple-threading, asynchronous processing,&lt;br /&gt;compressing, code refactoring and polishing, the performance has a&lt;br /&gt;significant boost, from 1.0 release average 15.2 seconds page load to&lt;br /&gt;now 1.91 seconds(benchmark by google) on the same hardware resources.&lt;br /&gt;Plus, lot of new web 2.0 technologies are in place.&lt;/p&gt; &lt;p&gt;I am glad to see that within 2 months after lauch, the visitor and&lt;br /&gt;page view per day raise up from 0 to now 50 visitors and 3000 page&lt;br /&gt;views per day. Lot of nice developers have published their android&lt;br /&gt;applications on site, also, they deliver constructive helpful idea and&lt;br /&gt;opinion to improve the site.&lt;br /&gt;Wanna check it out? &lt;a href="Http://www.andapponline.com"&gt;Http://www.andapponline.com&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;New features such as Android client, mobile version, jquery ui/flash&lt;br /&gt;ui and web service Apis are rolling out for development, sit tight,&lt;br /&gt;you will see more and more amazing…&lt;/p&gt; &lt;p&gt;Your opinion is highly appreciated.&lt;/p&gt; &lt;p&gt;James Zhang&lt;br /&gt;Entrepreneur, Android application online&lt;/p&gt; &lt;p&gt;&lt;a href="Http://www.andapponline.com"&gt;Http://www.andapponline.com&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;         &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-7178753330307011483?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/7178753330307011483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/03/android-application-online-performance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7178753330307011483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7178753330307011483'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/03/android-application-online-performance.html' title='Android application online performance boost'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-996587940625317569</id><published>2010-02-12T17:00:00.003-05:00</published><updated>2010-02-12T17:05:12.986-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tool'/><category scheme='http://www.blogger.com/atom/ns#' term='share'/><category scheme='http://www.blogger.com/atom/ns#' term='exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='Service'/><category scheme='http://www.blogger.com/atom/ns#' term='neighbor'/><title type='text'>Gopalgo, Your neighborhood expert!</title><content type='html'>I am working on a new site, Gopalgo, the neighborhood expert.&lt;br /&gt;&lt;br /&gt;This new site is targeting at everything around neighbor, tools, services, events, planning, fun, media, lost and found, etc, that you can find it will be handy for you in your daily routine.&lt;br /&gt;&lt;br /&gt;For instance, if you have transportation capacity and would like to help other person nearby, you can post your carpool information easily and wait for someone to give you a sound...&lt;br /&gt;&lt;br /&gt;This site is expected to launch in March, sit tight and see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-996587940625317569?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/996587940625317569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/02/gopalgo-your-neighborhood-expert.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/996587940625317569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/996587940625317569'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/02/gopalgo-your-neighborhood-expert.html' title='Gopalgo, Your neighborhood expert!'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-3117737800623321315</id><published>2010-02-11T12:52:00.001-05:00</published><updated>2010-02-11T12:52:47.129-05:00</updated><title type='text'>Android application online release 1.2</title><content type='html'>&amp;lt;a href=&amp;quot;&lt;a href="http://www.andapponline.com"&gt;http://www.andapponline.com&lt;/a&gt;&amp;quot;&amp;gt;Android Application Online&amp;lt;/a&amp;gt;  &lt;br&gt;now is 1.2. We are expecting to implement lot more management  &lt;br&gt;functions for developers in next release.&lt;p&gt;Android application online, your dedicated Android application market.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-3117737800623321315?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/3117737800623321315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2010/02/android-application-online-release-12.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3117737800623321315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3117737800623321315'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2010/02/android-application-online-release-12.html' title='Android application online release 1.2'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-6839855094837370637</id><published>2009-12-13T08:37:00.002-05:00</published><updated>2009-12-13T08:47:23.050-05:00</updated><title type='text'>Android Applications Online</title><content type='html'>I am glad to find that Android Application Online is ready to launch. It is targeting to provide dedicated platform for Android Application Developers and Users to publish, version, download, purchase and subscribe Applications running on Android hand-held devices. It is also targeting to establishing a social community for Android Application Developers and Users to share, exchange and brainstorming ideas in developing brilliant  Android Applications.&lt;br /&gt; &lt;br /&gt;Here is our Android Application Online : &lt;a href="http://www.andapponline.com"&gt;http://www.andapponline.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-6839855094837370637?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/6839855094837370637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2009/12/android-applications-online.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6839855094837370637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6839855094837370637'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2009/12/android-applications-online.html' title='Android Applications Online'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-827735325549029602</id><published>2009-06-19T11:10:00.001-04:00</published><updated>2009-06-19T11:10:09.983-04:00</updated><title type='text'>Grab from Groovy</title><content type='html'>&lt;p&gt;Imagine you want to get the links of all the PDF documents referenced by the Java 5 documentation. You want to parse the HTML page as if it were an XML-compliant document (which it is not) with the Groovy &lt;code&gt;XmlParser&lt;/code&gt;, so you can use the TagSoup SAX-compliant parser which transforms HTML into well-formed valid XML. You don&amp;#39;t even have to mess up with your classpath when running your script, just &lt;i&gt;grab&lt;/i&gt; the TagSoup library through Grape:&lt;/p&gt; &lt;pre&gt;&lt;b&gt;import&lt;/b&gt; org.ccil.cowan.tagsoup.Parser&lt;br&gt;&lt;br&gt;&lt;br&gt;// find the PDF links in the Java 1.5.0 documentation&lt;br&gt;@Grab(group=&amp;#39;org.ccil.cowan.tagsoup&amp;#39;, module=&amp;#39;tagsoup&amp;#39;, version=&amp;#39;0.9.7&amp;#39;)&lt;br&gt;&lt;b&gt;def&lt;/b&gt; getHtml() {&lt;br&gt;     &lt;b&gt;def&lt;/b&gt; tagsoupParser = &lt;b&gt;new&lt;/b&gt; Parser()&lt;br&gt;    &lt;b&gt;def&lt;/b&gt; parser = &lt;b&gt;new&lt;/b&gt; XmlParser(tagsoupParser)&lt;br&gt;    parser.parse(&amp;quot;&lt;a href="http://java.sun.com/j2se/1.5.0/download-pdf.html"&gt;http://java.sun.com/j2se/1.5.0/download-pdf.html&lt;/a&gt;&amp;quot;)&lt;br&gt; }&lt;br&gt;&lt;br&gt;html.body.&amp;#39;**&amp;#39;.a.@href.grep(~/.*\.pdf/).each{ println it }&lt;br&gt;&lt;/pre&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-827735325549029602?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/827735325549029602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2009/06/grab-from-groovy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/827735325549029602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/827735325549029602'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2009/06/grab-from-groovy.html' title='Grab from Groovy'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-5415838281633438565</id><published>2009-06-18T12:28:00.001-04:00</published><updated>2009-06-18T12:28:45.896-04:00</updated><title type='text'>Groovy 1.6 Mixin</title><content type='html'>&lt;p&gt;&lt;font size="4"&gt;Now, pair &lt;code&gt;@Category&lt;/code&gt; extensions to the &lt;code&gt;@Mixin&lt;/code&gt; transformation,     and you can mix in various behavior in a class, with an approach similar to multiple inheritance:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;font size="4"&gt;@Category(Vehicle) &lt;b&gt;class&lt;/b&gt; FlyingAbility {&lt;br&gt;    &lt;b&gt;def&lt;/b&gt; fly() { &amp;quot;I&amp;#39;m the ${name} and I fly!&amp;quot; }&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;@Category(Vehicle) &lt;b&gt;class&lt;/b&gt; DivingAbility {&lt;br&gt;    &lt;b&gt;def&lt;/b&gt; dive() { &amp;quot;I&amp;#39;m the ${name} and I dive!&amp;quot; }&lt;br&gt; }&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;interface&lt;/b&gt; Vehicle {&lt;br&gt;    String getName()&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;@Mixin(DivingAbility)&lt;br&gt;&lt;b&gt;class&lt;/b&gt; Submarine &lt;b&gt;implements&lt;/b&gt; Vehicle {&lt;br&gt;    String getName() { &amp;quot;Yellow Submarine&amp;quot; }&lt;br&gt;}&lt;br&gt; &lt;br&gt;&lt;br&gt;@Mixin(FlyingAbility)&lt;br&gt;&lt;b&gt;class&lt;/b&gt; Plane &lt;b&gt;implements&lt;/b&gt; Vehicle {&lt;br&gt;    String getName() { &amp;quot;Concorde&amp;quot; }&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;@Mixin([DivingAbility, FlyingAbility])&lt;br&gt;&lt;b&gt;class&lt;/b&gt; JamesBondVehicle &lt;b&gt;implements&lt;/b&gt; Vehicle {&lt;br&gt;     String getName() { &amp;quot;James Bond&amp;#39;s vehicle&amp;quot; }&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;assert&lt;/b&gt; &lt;b&gt;new&lt;/b&gt; Plane().fly() ==&lt;br&gt;       &amp;quot;I&amp;#39;m the Concorde and I fly!&amp;quot;&lt;br&gt;&lt;b&gt;assert&lt;/b&gt; &lt;b&gt;new&lt;/b&gt; Submarine().dive() ==&lt;br&gt;        &amp;quot;I&amp;#39;m the Yellow Submarine and I dive!&amp;quot;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;assert new&lt;/b&gt; JamesBondVehicle().fly() ==&lt;br&gt;       &amp;quot;I&amp;#39;m the James Bond&amp;#39;s vehicle and I fly!&amp;quot;&lt;br&gt;&lt;b&gt;assert new&lt;/b&gt; JamesBondVehicle().dive() ==&lt;br&gt;        &amp;quot;I&amp;#39;m the James Bond&amp;#39;s vehicle and I dive!&amp;quot;&lt;br&gt;&lt;/font&gt;&lt;/pre&gt; &lt;p&gt;&lt;font size="4"&gt;You don&amp;#39;t inherit from various interfaces and inject the same behavior in each subclass, instead you mixin the categories into your class. Here, our marvelous James Bond vehicle gets the flying and diving capabilities through mixins.&lt;/font&gt;&lt;/p&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-5415838281633438565?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/5415838281633438565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2009/06/groovy-16-mixin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5415838281633438565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5415838281633438565'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2009/06/groovy-16-mixin.html' title='Groovy 1.6 Mixin'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-4288323469540459559</id><published>2009-04-21T09:56:00.001-04:00</published><updated>2009-04-21T09:56:22.310-04:00</updated><title type='text'>Grails GORM Validation</title><content type='html'>Page &lt;a href="http://grails.org/Validation+Reference" target="_blank"&gt;Validation Reference&lt;/a&gt;&lt;a target="_blank"&gt; &lt;br&gt;&lt;br&gt;&lt;/a&gt;&lt;div style="color: black;"&gt;&lt;a target="_blank"&gt;&lt;br&gt;&lt;br&gt;Edited by &lt;b&gt;ackounts&lt;/b&gt;. &lt;/a&gt;&lt;a href="http://grails.org/previous/Validation+Reference/8" target="_blank"&gt;View change&lt;/a&gt; &lt;br&gt; &lt;br&gt;&lt;/div&gt;&lt;a name="Domain Class Validation" target="_blank"&gt;&lt;/a&gt;&lt;h2&gt;Domain Class Validation&lt;/h2&gt; &lt;ul class="EC_star"&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#Example" class="EC_pageLink"&gt;#Example&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#Reference" class="EC_pageLink"&gt;#Reference&lt;/a&gt;&lt;/li&gt; &lt;ul class="EC_star"&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#blank" class="EC_pageLink"&gt;#blank&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#creditCard" class="EC_pageLink"&gt;#creditCard&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#email" class="EC_pageLink"&gt;#email&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#password" class="EC_pageLink"&gt;#password&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#inList" class="EC_pageLink"&gt;#inList&lt;/a&gt;&lt;/li&gt;&lt;li&gt;-&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#length" class="EC_pageLink"&gt;#length&lt;/a&gt;-&lt;/li&gt; &lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#matches" class="EC_pageLink"&gt;#matches&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#max" class="EC_pageLink"&gt;#max&lt;/a&gt;&lt;/li&gt; &lt;li&gt;-&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#maxLength" class="EC_pageLink"&gt;#maxLength&lt;/a&gt;-&lt;/li&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#maxSize" class="EC_pageLink"&gt;#maxSize&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#min" class="EC_pageLink"&gt;#min&lt;/a&gt;&lt;/li&gt;&lt;li&gt;-&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#minLength" class="EC_pageLink"&gt;#minLength&lt;/a&gt;-&lt;/li&gt; &lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#minSize" class="EC_pageLink"&gt;#minSize&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#notEqual" class="EC_pageLink"&gt;#notEqual&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#nullable" class="EC_pageLink"&gt;#nullable&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#range" class="EC_pageLink"&gt;#range&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#scale" class="EC_pageLink"&gt;#scale&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#size" class="EC_pageLink"&gt;#size&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#unique" class="EC_pageLink"&gt;#unique&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#url" class="EC_pageLink"&gt;#url&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#validator" class="EC_pageLink"&gt;#validator&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;a name="Example" target="_blank"&gt;&lt;/a&gt;&lt;h3&gt;Example&lt;/h3&gt;&lt;div class="code"&gt;&lt;pre&gt;class User {&lt;br&gt;    &lt;span class="EC_java-object"&gt;String&lt;/span&gt; login&lt;br&gt;   &lt;span class="EC_java-object"&gt;String&lt;/span&gt; password&lt;br&gt;   &lt;span class="EC_java-keyword"&gt;static&lt;/span&gt; constraints = {&lt;br&gt;          login(size:5..15,blank:&lt;span class="EC_java-keyword"&gt;false&lt;/span&gt;,unique:&lt;span class="EC_java-keyword"&gt;true&lt;/span&gt;)&lt;br&gt;           password(size:5..15,blank:&lt;span class="EC_java-keyword"&gt;false&lt;/span&gt;)&lt;br&gt;   }&lt;br&gt;}&lt;/pre&gt;&lt;/div&gt; In the reference that follows, &lt;em class="EC_italic"&gt;className.propertyName.validationConstraint&lt;/em&gt; refers to the error message codes defined in _grails-app/i18n/message.properties_.&lt;p class="EC_paragraph"&gt;For example, referring to the above class, the error message might be defined as: _user.login.blank=Please enter a login_&lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;strong class="EC_bold"&gt;{_}Since 0.5. You could use common pattern &amp;quot;className.propertyName.constraintName.error&amp;quot; for all constraints, example: &amp;quot;user.login.blank.error=Please enter a login&amp;quot;._&lt;/strong&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="Validation Constraint Reference" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;Validation Constraint Reference&lt;/h3&gt;&lt;p class="EC_paragraph"&gt;  &lt;a name="blank" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;blank&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: set to false if a string value cannot be blank &lt;br&gt; &lt;strong class="EC_bold"&gt;Note: an empty form field will appear in the request parameters as an empty string, not as null. Keep this in mind when setting domain fields directly form request parameters&lt;/strong&gt; &lt;br&gt; Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;login(blank:&lt;span class="EC_java-keyword"&gt;false&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.blank &lt;br&gt; &lt;br&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="creditCard" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;creditCard&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: set to true if a string should be a credit card number Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;cardNumber(creditCard:&lt;span class="EC_java-keyword"&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.creditCard.invalid &lt;br&gt; &lt;br&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="email" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;email&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: set to true if a string value is an email address Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;contactEmail(email:&lt;span class="EC_java-keyword"&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.email.invalid &lt;br&gt; &lt;br&gt;&lt;p class="EC_paragraph"&gt; &lt;a name="password" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;password&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: set to true if a string value is a password Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;password(password:&lt;span class="EC_java-keyword"&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.password.invalid &lt;br&gt; &lt;br&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="inList" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;inList&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: constrains a value so that it must be contained within the given list Example 1: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;name(inList:[&lt;span class="EC_java-quote"&gt;&amp;quot;Joe&amp;quot;&lt;/span&gt;, &lt;span class="EC_java-quote"&gt;&amp;quot;Fred&amp;quot;&lt;/span&gt;, &lt;span class="EC_java-quote"&gt;&amp;quot;Bob&amp;quot;&lt;/span&gt;] )&lt;/pre&gt;&lt;/div&gt;&lt;p class="EC_paragraph"&gt; Example 2: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;name(inList:[1 as &lt;span class="EC_java-object"&gt;Short&lt;/span&gt;, 2 as &lt;span class="EC_java-object"&gt;Short&lt;/span&gt;, 3 as &lt;span class="EC_java-object"&gt;Short&lt;/span&gt;] ) // &lt;span class="EC_java-object"&gt;Short&lt;/span&gt; could be switched to &lt;span class="EC_java-object"&gt;Double&lt;/span&gt; etc&lt;/pre&gt; &lt;/div&gt;&lt;p class="EC_paragraph"&gt;Error message code: className.propertyName.not.inList&lt;/p&gt;&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;. &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="length" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;length&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;{color:red}Deprecated in 0.4.  Removed in 0.5.  Use{color} {color:red}&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#size" class="EC_pageLink"&gt;#size&lt;/a&gt;{color} {color:red}instead.{color}&lt;/p&gt; &lt;p class="EC_paragraph"&gt;Usage: Uses a Groovy range to restrict the length of a string or array Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;login(length:5..15)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.length.toolong, className.propertyName.length.tooshort&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;. &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="matches" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;matches&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: Applies a regular expression against a string value Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;login(matches:&lt;span class="EC_java-quote"&gt;&amp;quot;[a-zA-Z]+&amp;quot;&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.matches.invalid &lt;br&gt; &lt;br&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="max" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;max&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: sets the maximum value of a class that implements java.lang.Comparable. The same type needs to be used as the property itself. Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;age(max:&lt;span class="EC_java-keyword"&gt;new&lt;/span&gt; Date())&lt;br&gt;price(max:999F)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.max.exceeded&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;. &lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="maxLength" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;maxLength&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;{color:red}Deprecated in 0.4.  Removed in 0.5.  Use{color} {color:red}&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#maxSize" class="EC_pageLink"&gt;#maxSize&lt;/a&gt;{color} {color:red}instead.{color}&lt;/p&gt; &lt;p class="EC_paragraph"&gt;Usage: sets the maximum length of a string or array property Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;login(maxLength:5)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.maxLength.exceeded&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;. &lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="maxSize" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;maxSize&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: sets the maximum size of a collection or number property&lt;/p&gt;&lt;p class="EC_paragraph"&gt;{color:red}Deprecated in 0.5 for number properties. Use{color} {color:red}&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#max" class="EC_pageLink"&gt;#max&lt;/a&gt;{color} {color:red}instead{color}&lt;/p&gt; &lt;p class="EC_paragraph"&gt;Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;children(maxSize:25)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.maxSize.exceeded&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;. &lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="min" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;min&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: sets the minimum value of a class that implements java.lang.Comparable. The same type needs to be used as the property itself. Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;age(min:&lt;span class="EC_java-keyword"&gt;new&lt;/span&gt; Date())&lt;br&gt;price(min:0F) // or price(min:0.0 as &lt;span class="EC_java-object"&gt;Double&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.min.notmet&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;. &lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="minLength" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;minLength&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;{color:red}Deprecated in 0.4.  Removed in 0.5.  Use{color} {color:red}&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#minSize" class="EC_pageLink"&gt;#minSize&lt;/a&gt;{color} {color:red}instead.{color}&lt;/p&gt; &lt;p class="EC_paragraph"&gt;Usage: sets the minimum length of a string or array property Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;login(minLength:5)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.minLength.notmet&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;. &lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="minSize" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;minSize&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: sets the minimum size of a collection or number property&lt;/p&gt;&lt;p class="EC_paragraph"&gt;{color:red}Deprecated in 0.5 for number properties. Use{color} {color:red}&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#min" class="EC_pageLink"&gt;#min&lt;/a&gt;{color} {color:red}instead{color}&lt;/p&gt; &lt;p class="EC_paragraph"&gt;Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;children(minSize:5)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.minSize.notmet&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;. &lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="notEqual" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;notEqual&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: validates that a property is not equal to the specified value Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;login(notEqual:&lt;span class="EC_java-quote"&gt;&amp;quot;Bob&amp;quot;&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.notEqual &lt;br&gt; &lt;br&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="nullable" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;nullable&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: set to false if the property value cannot be null &lt;br&gt; &lt;strong class="EC_bold"&gt;Note: an empty form field will appear in the request parameters as an empty string, not as null. Keep this in mind when setting domain fields directly form request parameters&lt;/strong&gt; &lt;br&gt; Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;age(nullable:&lt;span class="EC_java-keyword"&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.nullable &lt;br&gt; &lt;br&gt; Default: By default, all fields are not nullable (required).&lt;p class="EC_paragraph"&gt;&lt;a name="range" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;range&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: Uses a Groovy range to ensure that a property&amp;#39;s value occurs within a specified range Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;age(range:minAge..maxAge)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.range.toosmall or className.propertyName.range.toobig&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;. &lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="scale" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;scale&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;_Since: 0.4_ Usage: Set to the desired scale for floating point numbers (i.e., the number of digits to the right of the decimal point). This constraint is applicable for properties of the following types: java.lang.Float, java.lang.Double, and java.math.BigDecimal (and its subclasses). When validation is invoked, this constraint determines if the number includes more nonzero decimal places than the scale permits. If so, it automatically rounds the number to the maximum number of decimal places allowed by the scale. This constraint does &lt;em class="EC_italic"&gt;not&lt;/em&gt; generate validation error messages. Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;salary(scale:2)&lt;/pre&gt;&lt;/div&gt; Error message code: N/A&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;. &lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="size" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;size&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: Uses a Groovy range to restrict the size of a collection or number or the length of a &lt;strong class="EC_bold"&gt;String&lt;/strong&gt;&lt;/p&gt; &lt;p class="EC_paragraph"&gt;{color:red}Deprecated in 0.5 for{color} {color:red}{&lt;strong class="EC_bold"&gt;}number{&lt;/strong&gt;}{color} {color:red}properties. Use{color} {color:red}&lt;a href="http://by104w.bay104.mail.live.com/mail/InboxLight.aspx?n=1272443049#range" class="EC_pageLink"&gt;#range&lt;/a&gt;{color} {color:red}instead{color}&lt;/p&gt; &lt;p class="EC_paragraph"&gt;Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;children(size:5..15)&lt;/pre&gt;&lt;/div&gt; Note: currently it could not be used in addition to blank:true or nullable:true contraints, a custom validator may be added to perform this kind of constraints (if not null then...) &lt;br&gt; &lt;br&gt; Error message code: className.propertyName.size.toosmall or className.propertyName.size.toobig&lt;p class="EC_paragraph"&gt;This constraint &lt;a href="http://constraints+influencing+schema+generation/" class="EC_pageLink" target="_blank"&gt;influences schema generation&lt;/a&gt;.&lt;/p&gt; &lt;p class="EC_paragraph"&gt;&lt;a name="unique" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;unique&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: set to true if the property must be unique (this is a persistent call and will query the database) Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;login(unique:&lt;span class="EC_java-keyword"&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;Note: be aware that it&amp;#39;s possible (though uncommon in practice) for a uniqueness constraint validation to pass but a subsequent save of the data to fail due to a uniqueness constraint enforced at the database level. The only way to prevent this would be to use the SERIALIZABLE transaction isolation level (bad for performance) or just be prepared to get an exception to this effect at some point. &lt;strong class="EC_bold"&gt;[&lt;/strong&gt;{&lt;strong class="EC_bold"&gt;}Since 0.5]&lt;/strong&gt; Scope of unique constraint can be specified. &amp;quot;Scope&amp;quot; - is a name of another property of the same class, or list of such names. Semantic in these cases is: pair of constrained property value and scope property value must be unique (or combination of constrained property value and all scope property values must be unique).&lt;p class="EC_paragraph"&gt;Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;group(unique:&amp;#39;department&amp;#39;)&lt;/pre&gt;&lt;/div&gt; In the above example group name must be unique in one department but there might be groups with same name in different departments.&lt;p class="EC_paragraph"&gt;Another example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;login(unique:[&amp;#39;group&amp;#39;,&amp;#39;department&amp;#39;])&lt;/pre&gt;&lt;/div&gt; In this example login must be unique in group and department. There might be same logins in different groups or different departments.&lt;p class="EC_paragraph"&gt;Error message code: className.propertyName.unique &lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="url" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;url&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: set to true if a string value is a URL address Example: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;homePage(url:&lt;span class="EC_java-keyword"&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt; Error message code: className.propertyName.url.invalid &lt;br&gt; &lt;br&gt;&lt;p class="EC_paragraph"&gt;&lt;a name="validator" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;validator&lt;/h4&gt;&lt;p class="EC_paragraph"&gt;Usage: set to a Closure to use custom validation. A single or no parameter Closure receives the value, a two-parameter Closure receives the value and object reference.&lt;/p&gt;&lt;p class="EC_paragraph"&gt;Since 0.5.5 a three-parameter Closure receives the value, object reference and the &lt;a href="http://www.springframework.org/docs/api/org/springframework/validation/Errors.html" class="EC_pageLink" target="_blank"&gt;errors&lt;/a&gt; object.&lt;/p&gt; &lt;p class="EC_paragraph"&gt;The closure can return: &lt;/p&gt;&lt;ul class="EC_star"&gt;&lt;li&gt;null or true to indicate that the value is valid&lt;/li&gt;&lt;li&gt;false to indicate an invalid value and use the default message code&lt;/li&gt;&lt;li&gt;a string to indicate the error code to append to the &amp;quot;classname.propertName.&amp;quot; string to display an error&lt;/li&gt; &lt;li&gt;a list containing a string as above, and then any number of arguments following it, which can be used as formatted message arguments indexed at 3 onwards. See &lt;em class="EC_italic"&gt;grails-app/i18n/message.properties&lt;/em&gt; to see how the default error message codes use the arguments.&lt;/li&gt;&lt;/ul&gt;If the closure is a three-parameter closure the return value is ignored and the closure is expected to populate the errors object.&lt;p class="EC_paragraph"&gt;Examples: &lt;br&gt; &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;even( validator: {&lt;br&gt;   &lt;span class="EC_java-keyword"&gt;return&lt;/span&gt; (it % 2) == 0&lt;br&gt;})&lt;p class="EC_paragraph"&gt;password1( validator: {&lt;br&gt;   val, obj -&amp;gt;&lt;br&gt;      obj.properties[&amp;#39;password2&amp;#39;] == val&lt;br&gt; })&lt;/p&gt;&lt;p class="EC_paragraph"&gt;magicNumber( validator:&lt;br&gt;   someClosureWithTwoParameters)&lt;/p&gt;&lt;p class="EC_paragraph"&gt;// This one assumes you have an error message defined like:&lt;br&gt;// classname.propertyName.custom.error=My error shows arguments {3} and {4} &lt;span class="EC_java-keyword"&gt;for&lt;/span&gt; value {0}&lt;br&gt; otherProperty( validator: { &lt;span class="EC_java-keyword"&gt;return&lt;/span&gt; [&amp;#39;custom.error&amp;#39;, arg1, arg2] } )&lt;/p&gt;&lt;p class="EC_paragraph"&gt;// The following example does not use custom validation.&lt;br&gt;// A custom message may be defined in messages.properties:&lt;br&gt; // user.login.blank=Please enter a login&lt;br&gt;// which will be used instead of &lt;span class="EC_java-keyword"&gt;default&lt;/span&gt;.blank.message&lt;br&gt;class User {&lt;br&gt;    &lt;span class="EC_java-object"&gt;String&lt;/span&gt; login&lt;br&gt;    &lt;span class="EC_java-keyword"&gt;static&lt;/span&gt; constraints = {&lt;br&gt;         login(blank:&lt;span class="EC_java-keyword"&gt;false&lt;/span&gt;)&lt;br&gt;    }&lt;br&gt;}&lt;/p&gt;&lt;p class="EC_paragraph"&gt;// In the following example, custom validation is used:&lt;br&gt;// user.login.validator.invalid=Please enter a login&lt;br&gt;class User {&lt;br&gt;    &lt;span class="EC_java-object"&gt;String&lt;/span&gt; login&lt;br&gt;    &lt;span class="EC_java-keyword"&gt;static&lt;/span&gt; constraints = {&lt;br&gt;        login(validator: {&lt;br&gt;            &lt;span class="EC_java-keyword"&gt;return&lt;/span&gt; (it.length != 0)&lt;br&gt;     	})&lt;br&gt;    }&lt;br&gt;}&lt;/p&gt;&lt;p class="EC_paragraph"&gt;// The following might define the error message as:&lt;br&gt;// user.login.invalid.bountyhunter=Invalid bounty hunter ({2}) tried to log in.  (&lt;span class="EC_java-object"&gt;Class&lt;/span&gt; name = {1}.  Property name = {0})&lt;br&gt; class User {&lt;br&gt;    &lt;span class="EC_java-object"&gt;String&lt;/span&gt; login&lt;br&gt;    &lt;span class="EC_java-keyword"&gt;static&lt;/span&gt; constraints = {&lt;br&gt;        login(validator: {&lt;br&gt;            &lt;span class="EC_java-keyword"&gt;if&lt;/span&gt; (!it.startsWith(&amp;#39;boba&amp;#39;)) &lt;span class="EC_java-keyword"&gt;return&lt;/span&gt; [&amp;#39;invalid.bountyhunter&amp;#39;]&lt;br&gt;         })&lt;br&gt;    }&lt;br&gt;}&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt; Error message code (default): className.propertyName.validator.invalid&lt;p class="EC_paragraph"&gt;&lt;br&gt;&lt;/p&gt;&lt;p class="EC_paragraph"&gt;For custom error messages, you can also return a custom value to be displayed in the error message. This is usually parameter number 3.&lt;/p&gt;&lt;p class="EC_paragraph"&gt;For instance, in messages.properties: source.reportName.invalid=For source type {3}, report name must be specified.&lt;/p&gt;&lt;p class="EC_paragraph"&gt;And in the custom validator: &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;reportName(maxSize:255, nullable: &lt;span class="EC_java-keyword"&gt;true&lt;/span&gt;, validator: { val, obj -&amp;gt;&lt;br&gt;  &lt;span class="EC_java-keyword"&gt;if&lt;/span&gt;(obj.reportName == &lt;span class="EC_java-keyword"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; (obj.sourceName == &amp;#39;Buddecom Report&amp;#39;)){&lt;br&gt;       &lt;span class="EC_java-keyword"&gt;return&lt;/span&gt; [&amp;#39;source.reportName.invalid&amp;#39;, obj.sourceName]&lt;br&gt;  }	        &lt;br&gt;})&lt;/pre&gt;&lt;/div&gt; &lt;br&gt; &lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-4288323469540459559?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/4288323469540459559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2009/04/grails-gorm-validation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4288323469540459559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4288323469540459559'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2009/04/grails-gorm-validation.html' title='Grails GORM Validation'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7293487530249743102</id><published>2008-12-31T21:50:00.001-05:00</published><updated>2008-12-31T21:50:18.930-05:00</updated><title type='text'>Happy New Year</title><content type='html'>Happy New Year to All,&lt;br&gt;&lt;br&gt;Wish 2009 is a better year, no more recession. &lt;br&gt;&lt;br&gt;&lt;br&gt;All the Bests,&lt;br&gt;&lt;br&gt;James&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-7293487530249743102?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/7293487530249743102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2008/12/happy-new-year.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7293487530249743102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7293487530249743102'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2008/12/happy-new-year.html' title='Happy New Year'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8872915328603685076</id><published>2008-12-22T12:38:00.001-05:00</published><updated>2008-12-22T12:38:34.651-05:00</updated><title type='text'>XA Exception in WAS 6.0</title><content type='html'>&lt;font size="2" face="Verdana, Arial"&gt;&lt;b&gt;Exception:&lt;/b&gt;&lt;br&gt;Implementation class name of &amp;quot;Oracle JDBC Driver&amp;quot; : oracle.jdbc.xa.client.OracleXADataSource&lt;br&gt; &lt;br&gt;DSRA0304E:  XAException occurred. XAException contents and details are: The cause is               : null.&lt;br&gt; DSRA0302E:  XAException occurred.  Error code is: XAER_RMERR (-3).  Exception is: &amp;lt;null&amp;gt;&lt;br&gt;WTRN0037W: The transaction service encountered an error on an xa_recover operation. The resource was com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@29bdd791. The error code was XAER_RMERR. The exception stack trace follows: javax.transaction.xa.XAException&lt;br&gt;	at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java(Compiled Code))&lt;br&gt;	at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java(Compiled Code))&lt;br&gt; 	at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java(Compiled Code))&lt;br&gt;	at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java(Compiled Code))&lt;br&gt;	at com.ibm.ws.Transaction.JTA.PartnerLogTable.recover(PartnerLogTable.java(Compiled Code))&lt;br&gt; 	at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java(Compiled Code))&lt;br&gt;	at com.ibm.ws.Transaction.JTA.RecoveryManager.run(RecoveryManager.java:2394)&lt;br&gt;	at java.lang.Thread.run(Thread.java:570)&lt;br&gt;&lt;br&gt; &lt;b&gt;Solution:&lt;/b&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2" face="Verdana, Arial"&gt;The application server is trying to recover certain transactions that were in prepared state or heuristically complete. Typically these transactions were not committed/rollbacked when the application server crashed. So as a part of startup, the application server tries to recover these transactions. Unfortunately the transaction are no longer available as the datasource has taken a heuristic decision to commit/rollback. &lt;br&gt; &lt;br&gt;The only way to fix this is to search for log files named trans*.log and delete them. Basically, these log files are under &lt;/font&gt;\profiles\AppSrv01\tranlog.&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;br&gt;Reference:&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0407_woolf/0407_woolf.html"&gt;http://www.ibm.com/developerworks/websphere/library/techarticles/0407_woolf/0407_woolf.html&lt;/a&gt;&lt;br clear="all"&gt; &lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8872915328603685076?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8872915328603685076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2008/12/xa-exception-in-was-60.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8872915328603685076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8872915328603685076'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2008/12/xa-exception-in-was-60.html' title='XA Exception in WAS 6.0'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-4205511112523405610</id><published>2008-10-03T14:25:00.001-04:00</published><updated>2008-10-03T14:25:42.661-04:00</updated><title type='text'>SOA Definition</title><content type='html'>&lt;div dir="ltr"&gt;&lt;span class="docEmphStrong"&gt;&lt;a name="A service"&gt;&lt;/a&gt;A service-oriented  architecture is a framework for integrating business processes and supporting IT  infrastructure as secure, standardized components—services—that can be reused  and combined to address changing business priorities.&lt;/span&gt;&lt;br clear="all"&gt;&lt;br&gt;&lt;br&gt; &lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-4205511112523405610?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/4205511112523405610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2008/10/soa-definition.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4205511112523405610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4205511112523405610'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2008/10/soa-definition.html' title='SOA Definition'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8600100466093968773</id><published>2008-08-28T11:07:00.001-04:00</published><updated>2008-08-28T11:07:26.977-04:00</updated><title type='text'>Using Groovy and Google Maps API to calculate distance</title><content type='html'>&lt;div dir="ltr"&gt;package com.risguru.gopalgo.utility&lt;br&gt;&lt;br&gt;import org.apache.commons.httpclient.HttpClient;&lt;br&gt;import org.apache.commons.httpclient.UsernamePasswordCredentials;&lt;br&gt;import org.apache.commons.httpclient.methods.GetMethod;&lt;br&gt; &lt;br&gt;import static java.lang.Math.*&lt;br&gt;&lt;br&gt;public class CoordinatesHelper{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static final String KEY = &amp;#39;---KEY---&amp;#39; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static final String URL = &amp;#39;&lt;a href="http://maps.google.com/maps/geo?key="&gt;http://maps.google.com/maps/geo?key=&lt;/a&gt;&amp;#39; + KEY + &amp;#39;&amp;amp;output=csv&amp;amp;q=&amp;#39;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; private static final double FACTOR = 60 * 1.1515 * 1.609344&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def static getCoordinates(postalCode) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def client = new HttpClient()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def get = new GetMethod(URL + postalCode)&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get.setRequestHeader(&amp;quot;Accept&amp;quot;, &amp;quot;text/xml&amp;quot;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; client.executeMethod(get)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (get.getStatusCode() != 200){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Do something here&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return null&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def string = get.getResponseBodyAsString()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def stringArray = string.split(&amp;#39;,&amp;#39;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return [&amp;#39;Lat&amp;#39;:stringArray[2], &amp;#39;Lng&amp;#39;:stringArray[3]]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def static calculateDistance(dist1, dist2){&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def kms = toDegrees(acos(sin(toRadians(dist1[&amp;#39;Lat&amp;#39;])) * sin(toRadians(dist2[&amp;#39;Lat&amp;#39;])) +&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cos(toRadians(dist1[&amp;#39;Lat&amp;#39;])) * cos(toRadians(dist2[&amp;#39;Lat&amp;#39;])) *&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cos(toRadians(dist1[&amp;#39;Lng&amp;#39;] - dist2[&amp;#39;Lng&amp;#39;])))) * FACTOR&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;br&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8600100466093968773?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8600100466093968773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2008/08/using-groovy-and-google-maps-api-to.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8600100466093968773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8600100466093968773'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2008/08/using-groovy-and-google-maps-api-to.html' title='Using Groovy and Google Maps API to calculate distance'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-1936437755478486067</id><published>2008-07-28T17:02:00.001-04:00</published><updated>2008-07-28T17:02:43.301-04:00</updated><title type='text'>Groovy Inject closure</title><content type='html'>&lt;div dir="ltr"&gt;&lt;span style="color: rgb(102, 102, 0);"&gt;lst = [&amp;#39;Programming&amp;#39; , &amp;#39;In&amp;#39; , &amp;#39;Groovy&amp;#39; ]&lt;/span&gt;&lt;br style="color: rgb(102, 102, 0);"&gt;&lt;br style="color: rgb(102, 102, 0);"&gt;&lt;span style="color: rgb(102, 102, 0);"&gt;println lst.inject(0) { carryOver, element -&amp;gt; carryOver + element.size() }&lt;/span&gt;&lt;br&gt; &lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;inject( ) calls the closure for each element of the collection. The element &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;is represented, in this example, by the element parameter. inject( ) takes &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;as a parameter an initial value that it will inject, through the carryOver&lt;/span&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;parameter, into the first call to the closure. It then injects the result &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;from the closure into the subsequent call to the closure. You'll prefer &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;the inject( ) method over the collect( ) method if you want a cumulative&lt;/span&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;result of applying a computation on each element of a collection.&lt;/span&gt;&lt;/b&gt;&lt;br clear="all"&gt; &lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist!&lt;br&gt; &lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-1936437755478486067?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/1936437755478486067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2008/07/groovy-inject-closure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1936437755478486067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1936437755478486067'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2008/07/groovy-inject-closure.html' title='Groovy Inject closure'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-6290718873875495212</id><published>2008-07-08T11:13:00.001-04:00</published><updated>2008-07-08T11:13:27.218-04:00</updated><title type='text'>Five Things You Should Never Tell Your Boss</title><content type='html'>&lt;div id="header"&gt; 	&lt;div id="headerleft"&gt;&lt;a style="" href="http://www.globalknowledge.com/"&gt;&lt;img src="http://images.globalknowledge.com/wwwimages/gk_logo.gif" alt="Global Knowledge" longdesc="Global Knowledge" width="165" align="left" border="0" height="90"&gt;&lt;/a&gt;   	&lt;/div&gt; 	&lt;div id="searchtext"&gt; 	SEARCH 	&lt;/div&gt; 	&lt;div id="searchbox"&gt; 	&lt;form id="searchform" name="searchform" action="wwwsearch.asp" method="get"&gt; 	&lt;input name="country" value="United States" type="hidden"&gt; 	&lt;input name="keyword" class="mainsearch" type="text"&gt; &lt;a href="http://www.globalknowledge.com/training/generic.asp?pageid=2164&amp;amp;country=United+States#" onclick="document.searchform.submit();"&gt;&lt;img src="http://images.globalknowledge.com/wwwimages/searchbtn.gif" alt="Search" width="17" align="absmiddle" border="0" height="17"&gt;&lt;/a&gt; 	&lt;/form&gt;   &lt;/div&gt; &lt;/div&gt;    	 		&lt;div id="headerimage"&gt; 			&lt;img src="http://images.globalknowledge.com/wwwimages/h_blank.jpg" alt="Five Things You Should Never Tell Your Boss" width="775" height="98"&gt; 		&lt;/div&gt; 		&lt;div id="nobreadcrumb"&gt;&amp;nbsp;&lt;/div&gt; 		 		  		  		 			                                             &lt;h1&gt;Five Things You Should Never Tell Your Boss&lt;/h1&gt; &lt;p&gt;&lt;b&gt;There are some things your CIO definitely doesn&amp;#39;t want to hear.&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Mary K. Pratt&lt;/p&gt; &lt;p&gt;June 20, 2008&lt;/p&gt; &lt;p&gt;In the information biz, more isn&amp;#39;t necessarily better. Though full disclosure and transparency are buzzwords today, that doesn&amp;#39;t mean your boss wants to hear about everything going on in the office. In fact, there are some things your CIO definitely doesn&amp;#39;t want to hear, and if your career is going to thrive, you&amp;#39;d better know what they are.&lt;/p&gt; &lt;p&gt;We asked a group of Computerworld&amp;#39;s 2008 Premier 100 IT Leaders to talk about the kinds of messages they never want to hear from their staffers. Here&amp;#39;s what they said.&lt;/p&gt; &lt;p&gt;&lt;b&gt;1. All about the technology -- and nothing about the business.&lt;/b&gt; Acting like the business is terra incognita is a no-no. &amp;quot;Never tell me you don&amp;#39;t know what the business wants but you&amp;#39;ll build it when they decide,&amp;quot; says James E. Schinski, CIO and vice president of Midwest Independent Transmission System Operator in Carmel, Ind.&lt;/p&gt; &lt;p&gt;Joseph J. Tufano,vice president and CIO at St. John&amp;#39;s University in New York, agrees, saying IT workers need to tell him how technology can help the organization and its staff do their jobs better. &amp;quot;You bring so much more credibility to the discussion when you&amp;#39;re presenting technology in the context of business,&amp;quot; he says.&lt;/p&gt; &lt;p&gt;&lt;b&gt;2. There&amp;#39;s only one solution.&lt;/b&gt; &amp;quot;People can sometimes develop a fondness for a certain technology or programming language or manufacturer into almost a religion, but it&amp;#39;s never the case that one type of solution is the proper one for all situations,&amp;quot; says Neal Puff, CIO for Arizona&amp;#39;s Yuma County. &amp;quot;And when you develop an attitude like this, you&amp;#39;re viewed as an obstacle or a roadblock. People will assume you&amp;#39;re just going to like it this way and you&amp;#39;re not going to like it any other way.&amp;quot;&lt;/p&gt; &lt;p&gt;&lt;b&gt;3. Bad opinions about your colleagues. &lt;/b&gt;It&amp;#39;s a simple rule that can get overlooked when your team is struggling with a missed deadline or a failing project, but think before you point a finger, because bosses generally don&amp;#39;t want to hear about it -- especially if you haven&amp;#39;t tried to work it out on your own.&lt;/p&gt; &lt;p&gt;&amp;quot;I want a team that works together and not one that&amp;#39;s political, and if I see it happening, then I think people are trying to score points,&amp;quot; says Kumud Kalia, CIO and executive vice president of customer operations for Toronto-based Direct Energy, an integrated energy company and part of Centrica PLC.&lt;/p&gt; &lt;p&gt;Of course, there are times when you need to discuss personnel issues with your boss. For example, Kalia wants to know from managers when workers are thinking of leaving. Just be sure the boss really needs to know about the situation; then be discreet and objective.&lt;/p&gt; &lt;table width="100%" border="1" cellpadding="20"&gt;   &lt;tbody&gt;&lt;tr&gt;     &lt;td width="100%"&gt;&lt;b&gt;Editor&amp;#39;s Note: &lt;/b&gt;When it comes to talking with the       boss, knowing what to say, when to say it and how to put it can still be       tricky for some people. Learn how the person in charge can encourage the       right conversations in the office.&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;b&gt;4. There&amp;#39;s no way. &lt;/b&gt;Robert Strickland, senior vice president and CIO of T-Mobile USA Inc. in Bellevue, Wash., makes his position very clear: Everything is possible.&lt;/p&gt; &lt;p&gt;&amp;quot;It may be impossible to deliver the exact goal, or it may be impossible to deliver the goal in the way it has been outlined, but before you say it is impossible, tell me some of the challenges you may face, and we can have a conversation about overcoming those challenges,&amp;quot; he says. &amp;quot;You may be surprised by what you can accomplish if you let go of your biases.&amp;quot;&lt;/p&gt; &lt;p&gt;&lt;b&gt;5. A surprise. &lt;/b&gt;CIOs almost universally say they don&amp;#39;t like surprises -- particularly unpleasant ones. Ian S. Patterson, CIO at Scottrade Inc., a St. Louis-based online brokerage firm, says he always prefers to hear news -- good and bad -- directly from his workers. So when someone comes by and starts with &amp;quot;I want to give you a heads up,&amp;quot; it really catches his attention.&lt;/p&gt; &lt;p&gt;Moreover, it&amp;#39;s a good bet that your boss prefers to hear that news sooner rather than later, says Gregory B. Morrison, CIO of Cox Enterprises Inc., an Atlanta-based media company and provider of automotive services. &amp;quot;Getting help early could help keep a small problem from turning into a disaster,&amp;quot; he says.&lt;/p&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-6290718873875495212?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/6290718873875495212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2008/07/five-things-you-should-never-tell-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6290718873875495212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6290718873875495212'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2008/07/five-things-you-should-never-tell-your.html' title='Five Things You Should Never Tell Your Boss'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-6286829493051127001</id><published>2008-06-11T00:02:00.001-04:00</published><updated>2008-06-11T00:02:34.204-04:00</updated><title type='text'>生活妙招：蚂蚁怕酸 蚊子怕辣 蟑螂怕香</title><content type='html'> 			蚂蚁怕酸味？ &lt;br&gt; &lt;br&gt; 家里的甜食摆没几分钟，蚂蚁大军立即来袭，让人又气又厌！ &lt;br&gt; &lt;br&gt; 献给各位一项无毒无污染又安全有效 的妙招――整粒的新鲜柠檬，对切成两半，在看得到蚂蚁的地方及其动线，挤出柠檬汁，并拿着切半有果肉的那一面，沿途涂抹，神奇效果让您再一次验证大自然的奥妙！ &lt;br&gt; &lt;br&gt; 蚊子怕辣味？ &lt;br&gt; &lt;br&gt; 院子百花争艳，诱使人们常流连其中不忍离去， 然而花多蚊子也多，叮咬得肿包累累。 &lt;br&gt; &lt;br&gt; 将蒜头分植于花坛四周，其特殊的辛辣味隐隐飘散。令人讶异的是，平日凶猛的蚊子不见了，连下雨过后会出现的超大只蚊子，也销声匿迹了！所以，驱蚊除了打扫环境、清除枯枝烂叶，试植蒜头绝对是上上之策！ &lt;br&gt; &lt;br&gt; 蟑螂怕香味？ &lt;br&gt; &lt;br&gt; 神出鬼没的蟑螂，最爱隐身于掌管厨房里。 面对"打不死的蟑螂"，办法是，将一块浴用香皂切成 数小块，置于容器内注入清水，摆放在蟑螂出没的橱柜内，不出数日，打开橱柜将令您讶异于蟑螂的无影无踪，橱柜内还多了怡人的香味。想要效果持续，仅须定期补充香皂容器内的清水。 			&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Live Instead Of Exist! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-6286829493051127001?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/6286829493051127001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2008/06/blog-post.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6286829493051127001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6286829493051127001'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2008/06/blog-post.html' title='生活妙招：蚂蚁怕酸 蚊子怕辣 蟑螂怕香'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-3482075273630755030</id><published>2007-11-22T14:28:00.001-05:00</published><updated>2007-11-22T14:28:24.175-05:00</updated><title type='text'>com.ibm.jsse2.util.h: No trusted certificate found.</title><content type='html'>In Portal Server 6.0, start the portal server from RSA 7 with RMI/ORB&lt;br&gt;connector, the portal server will prompt back an exception&lt;p&gt;com.ibm.jsse2.util.h: No trusted certificate found.&lt;p&gt;Anyway, the solution to my problem was to edit the&lt;br&gt;DeploymentService.properties from&lt;br&gt;/WPS_HOME/shared/app/config/properties/ (in WPS5.1&lt;br&gt;/WPS_HOME/shared/app/config/services/) and change following property :&lt;br&gt;From : was.admin.host = localhost (this is hashed out if no earlier&lt;br&gt;modifications has been done).&lt;br&gt;To: was.admin.host = actual_machine_hostname (un-hash it also)&lt;p&gt;Re-start the portal server that would resolve portlet deploy issue if&lt;br&gt;customer is getting above exception .&lt;p&gt;Here&amp;#39;s a link which addresses this issue:&lt;br&gt;&lt;a href="http://www-1.ibm.com/support/docview.wss?uid=swg21221259"&gt;http://www-1.ibm.com/support/docview.wss?uid=swg21221259&lt;/a&gt;&lt;p&gt;-- &lt;br&gt;To Living Instead Of Existing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-3482075273630755030?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/3482075273630755030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/11/comibmjsse2utilh-no-trusted-certificate.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3482075273630755030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3482075273630755030'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/11/comibmjsse2utilh-no-trusted-certificate.html' title='com.ibm.jsse2.util.h: No trusted certificate found.'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-2296459374790332655</id><published>2007-10-25T10:16:00.001-04:00</published><updated>2007-10-25T10:16:39.965-04:00</updated><title type='text'>Specifying the default document editor</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;Specifying the default document editor &lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;You can configure Java to use an editing application other than the default rich text editor as the preferred document editor.  &lt;br&gt;&lt;ul&gt;&lt;li&gt;Open the Java_directory/jre/lib/content-type.properties file in a text editor. &lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Add your editing application information using the following format:&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-left: 40px;"&gt; application/vnd.application name: \&lt;br&gt;description=editing application full name;\ &lt;br&gt;file_extensions=.fileextension &lt;br&gt;&lt;br&gt;For example, an entry for Lotus WordPro would look like the following: &lt;br&gt;application/vnd.lotus-wordpro: \  &lt;br&gt;description=Lotus WordPro; \ &lt;br&gt;file_extensions=.lwp &lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Save the changes.&lt;/li&gt;&lt;/ul&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-2296459374790332655?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/2296459374790332655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/10/specifying-default-document-editor.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/2296459374790332655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/2296459374790332655'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/10/specifying-default-document-editor.html' title='Specifying the default document editor'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-2600504575752708980</id><published>2007-10-03T14:06:00.001-04:00</published><updated>2007-10-03T14:06:51.417-04:00</updated><title type='text'>UML 2.0 Diagrams</title><content type='html'>&lt;p&gt;There are three classifications of UML diagrams:&lt;/p&gt;                         &lt;ul&gt;&lt;li&gt;&lt;b&gt;Behavior diagrams&lt;/b&gt;.&amp;nbsp; A type of diagram that                            depicts behavioral features of a system or business                            process.&amp;nbsp; This includes activity, state machine, and                            use case diagrams as well as the four interaction                            diagrams.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Interaction diagrams&lt;/b&gt;.&amp;nbsp; A subset of behavior                            diagrams which emphasize object interactions.&amp;nbsp; This                            includes communication, interaction overview,                            sequence, and timing diagrams.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Structure diagrams&lt;/b&gt;.&amp;nbsp; A type of diagram that                            depicts the elements of a specification that are                            irrespective of time.&amp;nbsp; This includes class, composite                            structure, component, deployment, object, and package                            diagrams. &amp;nbsp;&lt;/li&gt;&lt;/ul&gt;                         &lt;p&gt;&lt;a href="http://www.agilemodeling.com/essays/umlDiagrams.htm#Table1"&gt;Table 1&lt;/a&gt;                          summarizes the thirteen, up from nine in UML 1.x,                          diagram types of UML 2.x.&amp;nbsp; In the diagram column                          the links will take you to description pages for the                          artifact.&amp;nbsp; The learning priority column indicates                          how important it is for a business application developer                          to learn the artifact (IMHO).&lt;/p&gt;                         &lt;p&gt;&lt;b&gt;&lt;a name="Table1"&gt;Table 1.&amp;nbsp; The diagrams of                          UML 2.&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;                         &lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;                           &lt;tbody&gt;&lt;tr&gt;                             &lt;td style="border: 1pt solid windowtext; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;&lt;b&gt;Diagram&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;b&gt;Learning Priority&lt;/b&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/activityDiagram.htm"&gt;Activity Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Depicts high-level business                              processes, including data flow, or to model the                              logic of complex logic within a system.&amp;nbsp; See  							&lt;/font&gt;  							&lt;a href="http://www.agilemodeling.com/style/activityDiagram.htm"&gt;UML Activity diagram guidelines&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;High&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/classDiagram.htm"&gt;Class Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Shows a collection of static                              model elements such as classes and types, their                              contents, and their relationships.&amp;nbsp; See &lt;/font&gt;  							&lt;a href="http://www.agilemodeling.com/style/classDiagram.htm"&gt;UML Class diagram guidelines&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;High&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/communicationDiagram.htm"&gt;Communication Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Shows instances of classes,                              their interrelationships, and the message flow                              between them. Communication diagrams typically focus                              on the structural organization of objects that send                              and receive messages.&amp;nbsp; Formerly called a                              Collaboration Diagram.&amp;nbsp; See &lt;/font&gt;  							&lt;a href="http://www.agilemodeling.com/style/collaborationDiagram.htm"&gt;UML Collaboration diagram guidelines&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;Low&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/componentDiagram.htm"&gt;Component Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Depicts the components that                              compose an application, system, or enterprise. The                              components, their interrelationships, interactions,                              and their public interfaces are depicted.&amp;nbsp; See  							&lt;/font&gt;  							&lt;a href="http://www.agilemodeling.com/style/componentDiagram.htm"&gt;UML Component diagram guidelines&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;Medium&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/compositeStructureDiagram.htm"&gt;Composite Structure Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Depicts the internal structure                              of a classifier (such as a class, component, or use                              case), including the interaction points of the                              classifier to other parts of the system.&amp;nbsp;&amp;nbsp;&amp;nbsp;  							&lt;/font&gt; &lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;Low&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/deploymentDiagram.htm"&gt;Deployment Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Shows the execution                              architecture of systems.&amp;nbsp; This includes nodes,                              either hardware or software execution environments,                              as well as the middleware connecting them.&amp;nbsp; See  							&lt;/font&gt;  							&lt;a href="http://www.agilemodeling.com/style/deploymentDiagram.htm"&gt;UML Deployment diagram guidelines&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;Medium&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/interactionOverviewDiagram.htm"&gt;Interaction Overview Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;A variant of an activity                              diagram which overviews the control flow within a                              system or business process.&amp;nbsp;&amp;nbsp; Each                              node/activity within the diagram can represent                              another interaction diagram.&amp;nbsp; &amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;Low&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/objectDiagram.htm"&gt;Object Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Depicts objects and their                              relationships at a point in time, typically a                              special case of either a class diagram or a                              communication diagram.&amp;nbsp; &lt;/font&gt; &lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;Low&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/packageDiagram.htm"&gt;Package Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Shows how model elements are                              organized into packages as well as the dependencies                              between packages.&amp;nbsp; See &lt;/font&gt;  							&lt;a href="http://www.agilemodeling.com/style/packageDiagram.htm"&gt;Package     diagram guidelines&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;Low&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/sequenceDiagram.htm"&gt;Sequence Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Models the sequential logic, in                              effect the time ordering of messages between                              classifiers.&amp;nbsp; See &lt;/font&gt;  							&lt;a href="http://www.agilemodeling.com/style/sequenceDiagram.htm"&gt;UML Sequence diagram guidelines&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;High&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/stateMachineDiagram.htm"&gt;State Machine Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Describes the states an object                              or interaction may be in, as well as the transitions                              between states. Formerly referred to as a state                              diagram, state chart diagram, or a state-transition                              diagram.&amp;nbsp; See &lt;/font&gt;  							&lt;a href="http://www.agilemodeling.com/style/stateChartDiagram.htm"&gt;UML State chart diagram guidelines&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;Medium&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/timingDiagram.htm"&gt;Timing Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Depicts the change in state or                              condition of a classifier instance or role over                              time.&amp;nbsp; Typically used to show the change in                              state of an object over time in response to external                              events.&amp;nbsp; &lt;/font&gt; &lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;Low&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                           &lt;tr&gt;                             &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt;" valign="top"&gt;                             &lt;p class="MsoNormal"&gt;                             &lt;a href="http://www.agilemodeling.com/artifacts/useCaseDiagram.htm"&gt;Use Case Diagram&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;Shows use cases, actors, and                              their interrelationships.&amp;nbsp; See &lt;/font&gt;  							&lt;a href="http://www.agilemodeling.com/style/useCaseDiagram.htm"&gt;UML Use case diagram guidelines&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;                             &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;" valign="top"&gt;                              &lt;font size="2"&gt;Medium&lt;/font&gt;&lt;/td&gt;                           &lt;/tr&gt;                         &lt;/tbody&gt;&lt;/table&gt;                         &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-2600504575752708980?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/2600504575752708980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/10/uml-20-diagrams.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/2600504575752708980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/2600504575752708980'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/10/uml-20-diagrams.html' title='UML 2.0 Diagrams'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-4314530167721535616</id><published>2007-08-31T10:29:00.001-04:00</published><updated>2007-08-31T10:29:35.752-04:00</updated><title type='text'>Java Heap Size</title><content type='html'>The size of the heap, amount of available RAM and other JVM configuration options affects both capacity and performance (too small a heap will result in execess garbage collection, similarly not enough RAM will causes performance degredation). The following guidelines are suggested:   &lt;ul&gt;&lt;li&gt;  &lt;p&gt;Using &lt;code&gt;java -Xmx&lt;/code&gt; can be used to increase the fairly small default JVM heap size. For example invoking using the: (&lt;code&gt;java -Xmx512m&lt;/code&gt;...) command line argument will allocate half a gigabyte of RAM to the JVM heap.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;  &lt;p&gt;Performance is poor if there isn&amp;#39;t enough RAM available to support the requested JVM heap size. Using disk based swapping to support the heap exhibited significant slow downs. We suggest ensuring that the heap size specified with the &lt;code&gt;java -Xmx&lt;/code&gt; argument is available as free RAM.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;  &lt;p&gt;The J2SE server JVM can provide much better performance than the client JVM (in some cases twice as fast), but at the expense of increased memory consumption. If enough RAM is available, adding: &lt;code&gt;java -server&lt;/code&gt; ... is recommended for best performance.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;  &lt;p&gt;32 bit Operating Systems and processors can limit the process virtual address space and thus the amount of memory that you can dedicate to JVM heap usage. Some Operating Systems divide the 32 bit process address space into space for system/kernel and space for user code. For example, Windows™, Linux™ (most distributions/kernels) and MacOSX™ do a 50/50 split, leaving on a 32 bit machine around 2GBytes of space available for the Java heap, even on machines which have larger amounts of RAM installed. 32 bit processes on Solaris Sparc™ (7, 8 &amp;amp; 9) avoid the 50/50 split and make most of the 4Gbytes available to the java heap, for example java -Xmx3900m is possible.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;  &lt;p&gt;To exceed the 2 or 4GByte Java heap size limits, a 64 bit JVM is usually required. However, for this to work usefully and to see benefits, 64 bit processors, corresponding Operating System support (some Operating Systems available for 64 bit processors only support a 32 bit address space, for example MacOSX™ 10.3) and more than 4 GBytes of RAM will be needed.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;  &lt;p&gt;The use of Multiple Page Size Suppport&lt;/p&gt;   &lt;p&gt; &lt;code&gt;java -XX:+UseMPSS&lt;/code&gt; ... on Solaris provided a 5% runtime improvement in testing, with no measurable memory overhead.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;  &lt;p&gt;Using the incremental garbage collector&amp;nbsp; (&lt;code&gt;java -Xincgc ...&lt;/code&gt;) showed no benefit when tested.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;  &lt;p&gt;It was hoped the use of the Parallel Garbage collector (&lt;code&gt;java -XX:+UseParallelGC ...&lt;/code&gt;) would provide improved run times on multiprocessors as garbage collection could occur concurrently on a separate CPU. It actually had the opposite effect, doubling the elapsed runtime and trebling the CPU time consumed.&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-4314530167721535616?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/4314530167721535616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/08/java-heap-size.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4314530167721535616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4314530167721535616'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/08/java-heap-size.html' title='Java Heap Size'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-5895454773825686181</id><published>2007-08-30T11:54:00.001-04:00</published><updated>2007-08-30T12:10:22.218-04:00</updated><title type='text'>SAX</title><content type='html'>Simple API for XML (SAX), an event-driven, serial-access mechanism for accessing XML documents. This protocol is frequently used by servlets and network-oriented programs that need to transmit and receive XML documents, because it's the fastest and least memory-intensive mechanism that is currently available for dealing with XML documents, other than StAX.  &lt;hr /&gt; &lt;a name="wp98989"&gt; &lt;/a&gt; Note: In a nutshell, SAX is oriented towards &lt;span style="font-style: italic;"&gt;state independent&lt;/span&gt; processing, where the handling of an element does not depend on the elements that came before. StAX, on the other hand, is oriented towards &lt;span style="font-style: italic;"&gt;state dependent&lt;/span&gt; processing.&lt;br /&gt;&lt;br /&gt;&lt;p class="pBody"&gt; Setting up a program to use SAX requires a bit more work than setting up to use the Document Object Model (DOM). SAX is an event-driven model (you provide the callback methods, and the parser invokes them as it reads the XML data), and that makes it harder to visualize. Finally, you can't "back up" to an earlier part of the document, or rearrange it, any more than you can back up a serial data stream or rearrange characters you have read from that stream. &lt;/p&gt; &lt;a name="wp64006"&gt; &lt;/a&gt;For those reasons, developers who are writing a user-oriented application that displays an XML document and possibly modifies it will want to use the DOM mechanism.&lt;br /&gt;&lt;br /&gt;SAX is fast and efficient, but its event model makes it most useful for such state-independent filtering. For example, a SAX parser calls one method in your application when an element tag is encountered and calls a different method when text is found. If the processing you're doing is state-independent (meaning that it does not depend on the elements have come before), then SAX works fine.&lt;br /&gt;&lt;br /&gt;On the other hand, for state-dependent processing, where the program needs to do one thing with the data under element A but something different with the data under element B, then a &lt;span style="font-style: italic;"&gt;pull parser&lt;/span&gt; such as the Streaming API for XML (StAX) would be a better choice. With a pull parser, you get the next node, whatever it happens to be, at any point in the code that you ask for it. So it's easy to vary the way you process text (for example), because you can process it multiple places in the program.&lt;br /&gt;&lt;br /&gt;Pull parsers and the SAX API both act like a serial I/O stream. You see the data as it streams in, but you can't go back to an earlier position or leap ahead to a different position. In general, such parsers work well when you simply want to read data and have the application act on it.&lt;br /&gt;--&lt;br /&gt;To Living Instead Of Existing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-5895454773825686181?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/5895454773825686181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/08/sax.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5895454773825686181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5895454773825686181'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/08/sax.html' title='SAX'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-1604813324828766903</id><published>2007-07-31T10:51:00.001-04:00</published><updated>2007-07-31T10:51:24.647-04:00</updated><title type='text'>Web Service Binging type and Use style -- From IBM (Russell Butek)</title><content type='html'>&lt;blockquote&gt;A Web Services Description Language (WSDL) binding style can be RPC or document. The use can be encoded or literal. How do you determine which combination of style and use to use? The author describes the WSDL and SOAP messages for each combination to help you decide.&lt;/blockquote&gt;			&lt;p&gt;&lt;a name="N10041"&gt;&lt;span class="atitle"&gt;Introduction&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;A WSDL document describes a Web service. A WSDL binding describes how the service is bound to a messaging protocol, particularly the SOAP messaging protocol. A WSDL SOAP binding can be either a Remote Procedure Call (RPC) style binding or a document style binding. A SOAP binding can also have an encoded use or a literal use. This gives you four style/use models:&lt;/p&gt; 			&lt;ol&gt;&lt;li&gt;RPC/encoded&lt;/li&gt;&lt;li&gt;RPC/literal&lt;/li&gt;&lt;li&gt;Document/encoded&lt;/li&gt;&lt;li&gt;Document/literal&lt;/li&gt;&lt;/ol&gt; 			&lt;p&gt;Add to this collection a pattern which is commonly called the document/literal wrapped pattern and you have five binding styles to choose from when creating a WSDL file. Which one should you choose?&lt;/p&gt; 			&lt;p&gt;Before I go any further, let me clear up some confusion that many of us have stumbled over. The terminology here is very unfortunate: RPC versus document. These terms imply that the RPC style should be used for RPC programming models and that the document style should be used for document or messaging programming models. That is &lt;i&gt;not&lt;/i&gt; the case at all. The style has nothing to do with a programming model. It merely dictates how to translate a WSDL binding to a SOAP message. Nothing more. You can use either style with any programming model.&lt;/p&gt; 			&lt;p&gt;Likewise, the terms &lt;i&gt;encoded&lt;/i&gt; and &lt;i&gt;literal&lt;/i&gt; are only meaningful for the WSDL-to-SOAP mapping, though, at least here, the traditional meanings of the words make a bit more sense.&lt;/p&gt; 			&lt;p&gt;For this discussion, let&amp;#39;s start with the Java method in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing1"&gt;Listing 1&lt;/a&gt; and apply the JAX-RPC Java-to-WSDL rules to it (see  &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#resources"&gt;Resources&lt;/a&gt; for the JAX-RPC 1.1 specification).&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing1"&gt;&lt;b&gt;Listing 1. Java method&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;public void myMethod(int x, float y);&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;br&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;br&gt;&lt;/td&gt;&lt;td align="right" valign="top"&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;a name="N10080"&gt; &lt;span class="atitle"&gt;RPC/encoded&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;Take the method in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing1"&gt;Listing 1&lt;/a&gt; and run it through your favorite Java-to-WSDL tool, specifying that you want it to generate RPC/encoded WSDL. You should end up with something like the WSDL snippet in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing2"&gt;Listing 2&lt;/a&gt;.&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing2"&gt;&lt;b&gt;Listing 2. RPC/encoded WSDL for myMethod&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;message name=&amp;quot;myMethodRequest&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;part name=&amp;quot;x&amp;quot; type=&amp;quot;xsd:int&amp;quot;/&amp;gt; &lt;br&gt;    &amp;lt;part name=&amp;quot;y&amp;quot; type=&amp;quot;xsd:float&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;/message&amp;gt;&lt;br&gt;&amp;lt;message name=&amp;quot;empty&amp;quot;/&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;portType name=&amp;quot;PT&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;operation name=&amp;quot;myMethod&amp;quot;&amp;gt; &lt;br&gt;        &amp;lt;input message=&amp;quot;myMethodRequest&amp;quot;/&amp;gt;&lt;br&gt;        &amp;lt;output message=&amp;quot;empty&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;/operation&amp;gt;&lt;br&gt;&amp;lt;/portType&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;binding .../&amp;gt;  &lt;br&gt;&amp;lt;!-- I won&amp;#39;t bother with the details, just assume it&amp;#39;s RPC/encoded. --&amp;gt; &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;p&gt;Now invoke this method with &amp;quot;5&amp;quot; as the value for parameter &lt;code&gt;x&lt;/code&gt; and &amp;quot;5.0&amp;quot; for parameter &lt;code&gt;y&lt;/code&gt;.  That sends a SOAP message which looks something like &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing3"&gt; Listing 3&lt;/a&gt;.&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing3"&gt;&lt;b&gt;Listing 3. RPC/encoded SOAP message for myMethod&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;soap:envelope&amp;gt;&lt;br&gt;    &amp;lt;soap:body&amp;gt;&lt;br&gt;        &amp;lt;myMethod&amp;gt;&lt;br&gt;            &amp;lt;x xsi:type=&amp;quot;xsd:int&amp;quot;&amp;gt;5&amp;lt;/x&amp;gt; &lt;br&gt;            &amp;lt;y xsi:type=&amp;quot;xsd:float&amp;quot;&amp;gt;5.0&amp;lt;/y&amp;gt;&lt;br&gt;        &amp;lt;/myMethod&amp;gt;&lt;br&gt;    &amp;lt;/soap:body&amp;gt;&lt;br&gt;&amp;lt;/soap:envelope&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;table align="right" border="0" cellpadding="0" cellspacing="0" width="40%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="10"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10"&gt;&lt;/td&gt;&lt;td&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#eeeeee"&gt; 				&lt;a name="N100B6"&gt;&lt;b&gt;A note about prefixes and namespaces&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 				&lt;p&gt;For the most part, for brevity, I ignore namespaces and prefixes in the listings in this article. I do use a few prefixes that you can assume are defined with the following namespaces:&lt;/p&gt; 				&lt;ul&gt;&lt;li&gt;xmlns:xsd=&amp;quot;&lt;a href="http://www.w3.org/2001/XMLSchema"&gt;http://www.w3.org/2001/XMLSchema&lt;/a&gt;&amp;quot;&lt;/li&gt;&lt;li&gt;xmlns:xsi=&amp;quot;&lt;a href="http://www.w3.org/2001/XMLSchema-instance"&gt;http://www.w3.org/2001/XMLSchema-instance &lt;/a&gt;&amp;quot;&lt;/li&gt;&lt;li&gt;xmlns:soap=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/soap/envelope/"&gt;http://schemas.xmlsoap.org/soap/envelope/&lt;/a&gt;&amp;quot;&lt;/li&gt;&lt;/ul&gt; 				&lt;p&gt;For a discussion about namespaces and the WSDL-to-SOAP mapping, see paper &amp;quot;Handle namespaces in SOAP messages you create by hand&amp;quot; (see &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#resources"&gt;Resources&lt;/a&gt;).&lt;/p&gt; 			&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; 			&lt;p&gt;There are a number of things to notice about the WSDL and SOAP message for this RPC/encoded example:&lt;/p&gt; 			&lt;p&gt;&lt;a name="N100D6"&gt;&lt;span class="smalltitle"&gt;Strengths&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;ul&gt;&lt;li&gt;The WSDL is about as straightforward as it&amp;#39;s possible for WSDL to be.&lt;/li&gt;&lt;li&gt;The operation name appears in the message, so the receiver has an easy time dispatching this message to the implementation of the operation.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; 			&lt;p&gt;&lt;a name="N100E8"&gt;&lt;span class="smalltitle"&gt;Weaknesses&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;table align="right" border="0" cellpadding="0" cellspacing="0" width="40%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="10"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10"&gt;&lt;/td&gt;&lt;td&gt;&lt;table style="width: 404px; height: 183px;" border="1" cellpadding="5" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#eeeeee"&gt; 					&lt;a name="N100F0"&gt;&lt;b&gt;WS-I compliance&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 					&lt;p&gt;The various Web services specifications are sometimes inconsistent and unclear. The WS-I organization was formed to clear up the issues with the specs. It has defined a number of profiles which dictate how you should write your Web services to be interoperable. For more information on WS-I, see the WS-I links in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#resources"&gt;Resources&lt;/a&gt;.&lt;/p&gt; 				&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; 			&lt;ul&gt;&lt;li&gt;The type encoding info (such as &lt;code&gt;xsi:type=&amp;quot;xsd:int&amp;quot;&lt;/code&gt;) is usually just overhead which degrades throughput performance.&lt;/li&gt;&lt;li&gt;You cannot easily validate this message since only the &lt;code&gt;&amp;lt;x ...&amp;gt;5&amp;lt;/x&amp;gt; &lt;/code&gt; and &lt;code&gt;&amp;lt;y ...&amp;gt;5.0&amp;lt;/y&amp;gt;&lt;/code&gt; lines contain things defined in a schema; the rest of the &lt;code&gt;soap:body&lt;/code&gt; contents comes from WSDL definitions.&lt;/li&gt;&lt;li&gt;Although it is legal WSDL, RPC/encoded is not WS-I compliant. &lt;/li&gt;&lt;/ul&gt; 			 			&lt;p&gt;Is there a way to keep the strengths and remove the weaknesses? Possibly. Let&amp;#39;s look at the RPC/literal style.&lt;/p&gt; 			 			&lt;br&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;br&gt;&lt;/td&gt;&lt;td align="right" valign="top"&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;a name="N1011D"&gt; &lt;span class="atitle"&gt;RPC/literal&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;The RPC/literal WSDL for this method looks almost the same as the RPC/encoded WSDL (see &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing4"&gt;Listing 4&lt;/a&gt;). The use in the binding is changed from  &lt;i&gt;encoded&lt;/i&gt; to &lt;i&gt;literal&lt;/i&gt;.  That&amp;#39;s it.&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing4"&gt;&lt;b&gt;Listing 4. RPC/literal WSDL for myMethod&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;message name=&amp;quot;myMethodRequest&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;part name=&amp;quot;x&amp;quot; type=&amp;quot;xsd:int&amp;quot;/&amp;gt; &lt;br&gt;    &amp;lt;part name=&amp;quot;y&amp;quot; type=&amp;quot;xsd:float&amp;quot;/%gt;&lt;br&gt;&amp;lt;/message&amp;gt;&lt;br&gt;&amp;lt;message name=&amp;quot;empty&amp;quot;/&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;portType name=&amp;quot;PT&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;operation name=&amp;quot;myMethod&amp;quot;&amp;gt; &lt;br&gt;        &amp;lt;input message=&amp;quot;myMethodRequest&amp;quot;/&amp;gt;&lt;br&gt;        &amp;lt;output message=&amp;quot;empty&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;/operation&amp;gt;&lt;br&gt;&amp;lt;/portType&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;binding .../&amp;gt;  &lt;br&gt;&amp;lt;!-- I won&amp;#39;t bother with the details, just assume it&amp;#39;s RPC/ &lt;span class="boldcode"&gt;literal&lt;/span&gt;. --&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;p&gt;What about the SOAP message for RPC/literal (see &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing5"&gt;Listing 5&lt;/a&gt;)?  Here there is a bit more of a change.  The type encodings have been removed. &lt;/p&gt; 			&lt;br&gt;&lt;a name="listing5"&gt;&lt;b&gt;Listing 5. RPC/literal SOAP message for myMethod&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;soap:envelope&amp;gt;&lt;br&gt;    &amp;lt;soap:body&amp;gt;&lt;br&gt;        &amp;lt;myMethod&amp;gt;&lt;br&gt;            &amp;lt;x&amp;gt;5&amp;lt;/x&amp;gt; &lt;br&gt;            &amp;lt;y&amp;gt;5.0&amp;lt;/y&amp;gt;&lt;br&gt;        &amp;lt;/myMethod&amp;gt;&lt;br&gt;    &amp;lt;/soap:body&amp;gt;&lt;br&gt;&amp;lt;/soap:envelope&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;table align="right" border="0" cellpadding="0" cellspacing="0" width="40%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="10"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10"&gt;&lt;/td&gt;&lt;td&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#eeeeee"&gt; 				&lt;a name="N10150"&gt;&lt;b&gt;A note about xsi:type and literal use&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 				&lt;p&gt;Although in normal circumstances &lt;code&gt;xsi:type&lt;/code&gt; does not appear in a literal WSDL&amp;#39;s SOAP message, there are still cases when type information is necessary and it will appear -- in polymorphism, for instance. If the API expects a base type and an extension instance is sent, the type of that instance must be provided for proper deserialization of the object.&lt;/p&gt; 			&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; 			&lt;p&gt;Here are the strengths and weaknesses of this approach:&lt;/p&gt; 			&lt;p&gt;&lt;a name="N10161"&gt;&lt;span class="smalltitle"&gt;Strengths&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;ul&gt;&lt;li&gt;The WSDL is still about as straightforward as it is possible for WSDL to be.&lt;/li&gt;&lt;li&gt;The operation name still appears in the message.&lt;/li&gt;&lt;li&gt;The type encoding info is eliminated.&lt;/li&gt;&lt;li&gt;RPC/literal is WS-I compliant. &lt;/li&gt;&lt;/ul&gt; 			&lt;p&gt;&lt;a name="N10176"&gt;&lt;span class="smalltitle"&gt;Weaknesses&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;ul&gt;&lt;li&gt;You still cannot easily validate this message since only the &lt;code&gt;&amp;lt;x ...&amp;gt;5&amp;lt;/x&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;y ...&amp;gt;5.0&amp;lt;/y&amp;gt;&lt;/code&gt; lines contain things defined in a schema; the rest of the &lt;code&gt;soap:body &lt;/code&gt; contents comes from WSDL definitions.&lt;/li&gt;&lt;/ul&gt; 			&lt;p&gt;What about the document styles?  Do they help overcome this weakness?&lt;/p&gt; 			&lt;br&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;br&gt;&lt;/td&gt;&lt;td align="right" valign="top"&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;a name="N10191"&gt; &lt;span class="atitle"&gt;Document/encoded&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;Nobody follows this style.  It is not WS-I compliant.  So let&amp;#39;s move on.&lt;/p&gt; 			&lt;br&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;br&gt;&lt;/td&gt;&lt;td align="right" valign="top"&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;a name="N1019A"&gt; &lt;span class="atitle"&gt;Document/literal&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;The WSDL for document/literal changes somewhat from the WSDL for RPC/literal.  The differences are highlighted in bold in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing6"&gt;Listing 6 &lt;/a&gt;.&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing6"&gt;&lt;b&gt;Listing 6. Document/literal WSDL for myMethod&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;				&lt;span class="boldcode"&gt;&amp;lt;types&amp;gt;&lt;br&gt;    &amp;lt;schema&amp;gt;&lt;br&gt;        &amp;lt;element name=&amp;quot;xElement&amp;quot; type=&amp;quot;xsd:int&amp;quot;/&amp;gt; &lt;br&gt;        &amp;lt;element name=&amp;quot;yElement&amp;quot; type=&amp;quot;xsd:float&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;/schema&amp;gt;&lt;br&gt;&amp;lt;/types&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&amp;lt;message name=&amp;quot;myMethodRequest&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;part name=&amp;quot;x&amp;quot;  &lt;span class="boldcode"&gt;element=&amp;quot;xElement&amp;quot;&lt;/span&gt;/&amp;gt;&lt;br&gt;    &amp;lt;part name=&amp;quot;y&amp;quot; &lt;span class="boldcode"&gt;element=&amp;quot;yElement&amp;quot;&lt;/span&gt;/&amp;gt;&lt;br&gt;&amp;lt;/message&amp;gt;&lt;br&gt;&amp;lt;message name=&amp;quot;empty&amp;quot;/&amp;gt; &lt;br&gt;&lt;br&gt;&amp;lt;portType name=&amp;quot;PT&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;operation name=&amp;quot;myMethod&amp;quot;&amp;gt;&lt;br&gt;        &amp;lt;input message=&amp;quot;myMethodRequest&amp;quot;/&amp;gt;&lt;br&gt;        &amp;lt;output message=&amp;quot;empty&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;/operation&amp;gt; &lt;br&gt;&amp;lt;/portType&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;binding .../&amp;gt;  &lt;br&gt;&amp;lt;!-- I won&amp;#39;t bother with the details, just assume it&amp;#39;s &lt;span class="boldcode"&gt;document&lt;/span&gt;/literal. --&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;p&gt;The SOAP message for this WSDL is in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing7"&gt;Listing 7&lt;/a&gt;:&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing7"&gt;&lt;b&gt;Listing 7. Document/literal SOAP message for myMethod&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;soap:envelope&amp;gt;&lt;br&gt;    &amp;lt;soap:body&amp;gt;&lt;br&gt;        &amp;lt;xElement&amp;gt;5&amp;lt;/xElement&amp;gt;&lt;br&gt;         &amp;lt;yElement&amp;gt;5.0&amp;lt;/yElement&amp;gt;&lt;br&gt;    &amp;lt;/soap:body&amp;gt;&lt;br&gt;&amp;lt;/soap:envelope&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;table align="right" border="0" cellpadding="0" cellspacing="0" width="40%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="10"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10"&gt;&lt;/td&gt;&lt;td&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#eeeeee"&gt; 				&lt;a name="N101D0"&gt;&lt;b&gt;A note about the message part&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 				&lt;p&gt;I could have changed only the binding, as I did from RPC/encoded to RPC/literal. It would have been legal WSDL. However, the WS-I Basic Profile dictates that document/literal message parts refer to elements rather than types, so I&amp;#39;m complying with WS-I. (And using an element part here leads well into the discussion about the document/literal wrapped pattern.)&lt;/p&gt; 			&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; 			&lt;p&gt;Here are the strengths and weaknesses of this approach:&lt;/p&gt; 			&lt;p&gt;&lt;a name="N101DD"&gt;&lt;span class="smalltitle"&gt;Strengths&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;ul&gt;&lt;li&gt;There is no type encoding info.&lt;/li&gt;&lt;li&gt;You can finally validate this message with any XML validator. Everything within the &lt;code&gt;soap:body&lt;/code&gt; is defined in a schema.&lt;/li&gt;&lt;li&gt;Document/literal is WS-I compliant, but with restrictions (see  &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#doclitweak"&gt;weaknesses&lt;/a&gt;).&lt;/li&gt;&lt;/ul&gt; 			&lt;p&gt;&lt;a name="doclitweak"&gt;&lt;span class="smalltitle"&gt;Weaknesses&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;ul&gt;&lt;li&gt;The WSDL is getting a bit more complicated. This is a very minor weakness, however, since WSDL is not meant to be read by humans.&lt;/li&gt;&lt;li&gt;The operation name in the SOAP message is lost.  Without the name, dispatching can be difficult, and sometimes impossible.&lt;/li&gt;&lt;li&gt;WS-I only allows one child of the  &lt;code&gt;soap:body&lt;/code&gt; in a SOAP message.  As you can see in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing7"&gt;Listing 7&lt;/a&gt;, this example&amp;#39;s &lt;code&gt;soap:body&lt;/code&gt; has two children. &lt;/li&gt;&lt;/ul&gt; 			&lt;p&gt;The document/literal style seems to have merely rearranged the strengths and weaknesses from the RPC/literal model. You can validate the message, but you lose the operation name. Is there anything you can do to improve upon this? Yes. It&amp;#39;s called the document/literal wrapped pattern.&lt;/p&gt; 			&lt;br&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;br&gt;&lt;/td&gt;&lt;td align="right" valign="top"&gt;&lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#main" class="fbox"&gt; &lt;b&gt;&lt;/b&gt;&lt;/a&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;a name="N10218"&gt;&lt;span class="atitle"&gt;Document/literal wrapped&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;Before I describe the rules for the document/literal wrapped pattern, let me show you the WSDL and the SOAP message in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing8"&gt;Listing 8 &lt;/a&gt; and &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing9"&gt;Listing 9&lt;/a&gt;.&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing8"&gt;&lt;b&gt;Listing 8. Document/literal wrapped WSDL for myMethod&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;types&amp;gt;&lt;br&gt;    &amp;lt;schema&amp;gt;&lt;br&gt;        &lt;span class="boldcode"&gt;&amp;lt;element name=&amp;quot;myMethod&amp;quot;&amp;gt; &lt;br&gt;            &amp;lt;complexType&amp;gt;&lt;br&gt;                &amp;lt;sequence&amp;gt;&lt;br&gt;                    &amp;lt;element name=&amp;quot;x&amp;quot; type=&amp;quot;xsd:int&amp;quot;/&amp;gt;&lt;br&gt;                    &amp;lt;element name=&amp;quot;y&amp;quot; type=&amp;quot;xsd:float&amp;quot;/&amp;gt; &lt;br&gt;                &amp;lt;/sequence&amp;gt;&lt;br&gt;            &amp;lt;/complexType&amp;gt;&lt;br&gt;        &amp;lt;/element&amp;gt;&lt;br&gt;        &amp;lt;element name=&amp;quot;myMethodResponse&amp;quot;&amp;gt;&lt;br&gt;            &amp;lt;complexType/&amp;gt;&lt;br&gt;        &amp;lt;/element&amp;gt; &lt;/span&gt;&lt;br&gt;    &amp;lt;/schema&amp;gt;&lt;br&gt;&amp;lt;/types&amp;gt;&lt;br&gt;&amp;lt;message name=&amp;quot;myMethodRequest&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;part name=&amp;quot;&lt;span class="boldcode"&gt;parameters&lt;/span&gt;&amp;quot; element=&amp;quot;&lt;span class="boldcode"&gt;myMethod&lt;/span&gt; &amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;/message&amp;gt;&lt;br&gt;&lt;span class="boldcode"&gt;&amp;lt;message name=&amp;quot;empty&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;part name=&amp;quot;parameters&amp;quot; element=&amp;quot;myMethodResponse&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;/message&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&amp;lt;portType name=&amp;quot;PT&amp;quot;&amp;gt; &lt;br&gt;    &amp;lt;operation name=&amp;quot;myMethod&amp;quot;&amp;gt;&lt;br&gt;        &amp;lt;input message=&amp;quot;myMethodRequest&amp;quot;/&amp;gt;&lt;br&gt;        &amp;lt;output message=&amp;quot;empty&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;/operation&amp;gt;&lt;br&gt;&amp;lt;/portType&amp;gt;&lt;br&gt;&lt;br&gt; &amp;lt;binding .../&amp;gt;  &lt;br&gt;&amp;lt;!-- I won&amp;#39;t bother with the details, just assume it&amp;#39;s document/literal. --&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;p&gt;The WSDL schema now has a wrapper around the parameters (see &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing9"&gt;Listing 9&lt;/a&gt;).&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing9"&gt;&lt;b&gt;Listing 9. Document/literal wrapped SOAP message for myMethod&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;soap:envelope&amp;gt;&lt;br&gt;    &amp;lt;soap:body&amp;gt;&lt;br&gt;        &amp;lt;myMethod&amp;gt;&lt;br&gt;            &amp;lt;x&amp;gt;5&amp;lt;/x&amp;gt; &lt;br&gt;            &amp;lt;y&amp;gt;5.0&amp;lt;/y&amp;gt;&lt;br&gt;        &amp;lt;/myMethod&amp;gt;&lt;br&gt;    &amp;lt;/soap:body&amp;gt;&lt;br&gt;&amp;lt;/soap:envelope&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;p&gt;Notice that this SOAP message looks remarkably like the RPC/literal SOAP message in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing5"&gt;Listing 5&lt;/a&gt;. You might say it looks exactly like the RPC/literal SOAP message, but there&amp;#39;s a subtle difference. In the RPC/literal SOAP message, the &lt;code&gt;&amp;lt;myMethod&amp;gt;&lt;/code&gt; child of &lt;code&gt;&amp;lt;soap:body&amp;gt;&lt;/code&gt; was the name of the operation.  In the document/literal wrapped SOAP message, the  &lt;code&gt;&amp;lt;myMethod&amp;gt;&lt;/code&gt; clause is the name of the wrapper element which the single input message&amp;#39;s part refers to. It just so happens that one of the characteristics of the wrapped pattern is that the name of the input element is the same as the name of the operation. This pattern is a sly way of putting the operation name back into the SOAP message.&lt;/p&gt; 			&lt;p&gt;These are the basic characteristics of the document/literal wrapped pattern:&lt;/p&gt; 			&lt;ul&gt;&lt;li&gt;The input message has a single part.&lt;/li&gt;&lt;li&gt;The part is an element.&lt;/li&gt;&lt;li&gt;The element has the same name as the operation.&lt;/li&gt;&lt;li&gt;The element&amp;#39;s complex type has no attributes.&lt;/li&gt;&lt;/ul&gt; 			&lt;p&gt;Here are the strengths and weaknesses of this approach:&lt;/p&gt; 			&lt;p&gt;&lt;a name="N10278"&gt;&lt;span class="smalltitle"&gt;Strengths&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;ul&gt;&lt;li&gt;There is no type encoding info.&lt;/li&gt;&lt;li&gt;Everything that appears in the &lt;code&gt;soap:body&lt;/code&gt; is defined by the schema, so you can easily validate this message.&lt;/li&gt;&lt;li&gt;Once again, you have the method name in the SOAP message. &lt;/li&gt;&lt;li&gt;Document/literal is WS-I compliant, &lt;i&gt;and&lt;/i&gt; the wrapped pattern meets the WS-I restriction that the SOAP message&amp;#39;s &lt;code&gt;soap:body&lt;/code&gt; has only one child.&lt;/li&gt;&lt;/ul&gt; 			&lt;p&gt;&lt;a name="N10298"&gt;&lt;span class="smalltitle"&gt;Weaknesses&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;ul&gt;&lt;li&gt;The WSDL is even more complicated.&lt;/li&gt;&lt;/ul&gt; 			&lt;p&gt;As you can see, there is still a weakness with the document/literal wrapped pattern, but it&amp;#39;s minor and far outweighed by the strengths.&lt;/p&gt; 			&lt;table align="right" border="0" cellpadding="0" cellspacing="0" width="40%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="10"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10"&gt;&lt;/td&gt;&lt;td&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#eeeeee"&gt; 				&lt;a name="N102A9"&gt;&lt;b&gt;RPC/literal wrapped?&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 				&lt;p&gt;From a WSDL point of view, there&amp;#39;s no reason the wrapped pattern is tied only to document/literal bindings. It could just as easily be applied to an RPC/literal binding. But this would be rather silly. The SOAP message would contain a &lt;code&gt;myMethod&lt;/code&gt; element for the operation and a child &lt;code&gt;myMethod&lt;/code&gt; element for the element name. Also, even though it&amp;#39;s legal WSDL, an RPC/literal part should be a type; an element part is not WS-I compliant.&lt;/p&gt; 			&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; 			&lt;p&gt;&lt;a name="N102BB"&gt;&lt;span class="smalltitle"&gt;Where is doc/lit wrapped defined?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;This wrapped style originates from Microsoft&amp;reg;. There is no specification that defines this style; so while this style is a good thing, unfortunately, the only choice right now, in order to interoperate with Microsoft&amp;#39;s and other&amp;#39;s implementations, is to make educated guesses as to how it works based on the output of the Microsoft WSDL generator. This pattern has been around for awhile, and the industry has done a good job of understanding it, but while the pattern is fairly obvious in this example, there are corner cases in which the proper thing to do is not particularly clear. Our best hope is that an independent group like the WS-I organization will help stabilize and standardize this in the future.&lt;/p&gt; 			&lt;br&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;br&gt;&lt;/td&gt;&lt;td align="right" valign="top"&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;a name="N102C6"&gt; &lt;span class="atitle"&gt;Why not use document/literal wrapped all the time?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;So far, this article has given the impression that the document/literal wrapped style is the best approach. Very often that&amp;#39;s true. But there are still cases where you&amp;#39;d be better off using another style.&lt;/p&gt; 			&lt;p&gt;&lt;a name="N102CF"&gt;&lt;span class="smalltitle"&gt;Reasons to use document/literal non-wrapped&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;If you have overloaded operations, you cannot use the document/literal wrapped style.&lt;/p&gt; 			&lt;p&gt;Imagine that, along with the method you&amp;#39;ve been using all along, you have the additional method in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing10"&gt;Listing 10&lt;/a&gt;.&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing10"&gt;&lt;b&gt;Listing 10. Problem methods for document/literal wrapped&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;public void myMethod(int x, float y);&lt;br&gt;&lt;span class="boldcode"&gt;public void myMethod(int x);&lt;/span&gt; &lt;br&gt;			&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;table align="right" border="0" cellpadding="0" cellspacing="0" width="40%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="10"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10"&gt;&lt;/td&gt;&lt;td&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#eeeeee"&gt; 				&lt;a name="N102EE"&gt;&lt;b&gt;A note about overloaded operations&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 				&lt;p&gt;WSDL 2.0 will not allow overloaded operations.  This is unfortunate for languages like the Java language which &lt;i&gt;do&lt;/i&gt; allow them. Specs like JAX-RPC will have to define a name mangling scheme to map overloaded methods to WSDL. WSDL 2.0 merely moves the problem from the WSDL-to-SOAP mapping to the WSDL-to-language mapping.&lt;/p&gt; 			&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; 			&lt;p&gt;WSDL allows overloaded operations. But when you add the wrapped pattern to WSDL, you require an element to have the same name as the operation, and you cannot have two elements with the same name in XML. So you must use the document/literal, non-wrapped style or one of the RPC styles.&lt;/p&gt; 			&lt;p&gt;&lt;a name="N102FE"&gt;&lt;span class="smalltitle"&gt;Reasons to use RPC/literal&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;Since the document/literal, non-wrapped style doesn&amp;#39;t provide the operation name, there are cases where you&amp;#39;ll need to use one of the RPC styles. For instance, say you have the set of methods in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing11"&gt;Listing 11&lt;/a&gt;.&lt;/p&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; 			&lt;br&gt;&lt;a name="listing11"&gt;&lt;b&gt;Listing 11. Problem methods for document/literal non-wrapped&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;public void myMethod(int x, float y);&lt;br&gt;public void myMethod(int x);&lt;br&gt;&lt;span class="boldcode"&gt; public void someOtherMethod(int x, float y);&lt;/span&gt;&lt;br&gt;			&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;p&gt;Now assume that your server receives the document/literal SOAP message that you saw back in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing7"&gt;Listing 7&lt;/a&gt;.  Which method should the server dispatch to?  All you know for sure is that it&amp;#39;s not  &lt;code&gt;myMethod(int x)&lt;/code&gt; because the message has two parameters and this method requires one. It could be either of the other two methods. With the document/literal style, you have no way to know which one.&lt;/p&gt; 			&lt;p&gt;Instead of the document/literal message, assume that the server receives an RPC/literal message such as the one in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing5"&gt;Listing 5&lt;/a&gt; .  With this message it&amp;#39;s fairly easy for a server to decide which method to dispatch to.  You know the operation name is &lt;i&gt;myMethod&lt;/i&gt;, and you know you have two parameters, so it must be &lt;code&gt;myMethod(int x, float y) &lt;/code&gt;.&lt;/p&gt; 			&lt;p&gt;&lt;a name="N10335"&gt;&lt;span class="smalltitle"&gt;Reasons to use RPC/encoded&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;The primary reason to prefer the RPC/encoded style is for data graphs. Imagine that you have a binary tree whose nodes are defined in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing12"&gt;Listing 12&lt;/a&gt;.&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing12"&gt;&lt;b&gt;Listing 12.  Binary tree node schema&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;complexType name=&amp;quot;Node&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;sequence&amp;gt;&lt;br&gt;        &amp;lt;element name=&amp;quot;name&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt; &lt;br&gt;        &amp;lt;element name=&amp;quot;left&amp;quot; type=&amp;quot;Node&amp;quot; xsd:nillable=&amp;quot;true&amp;quot;/&amp;gt;&lt;br&gt;        &amp;lt;element name=&amp;quot;right&amp;quot; type=&amp;quot;Node&amp;quot; xsd:nillable=&amp;quot;true&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;/sequence&amp;gt; &lt;br&gt;&amp;lt;/complexType&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;p&gt;With this node definition, you could construct a tree whose root node -- A -- points to node B through both its left and right links (see &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#figure1"&gt;Figure 1&lt;/a&gt;).&lt;/p&gt; 			 				&lt;br&gt;&lt;a name="figure1"&gt;&lt;b&gt;Figure 1. Encoded tree.&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 				&lt;img alt="Encoded tree" src="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/encodedtree.jpg" height="128" width="89"&gt; 			&lt;br&gt; 			&lt;p&gt;The standard way to send data graphs is to use the href tag, which is part of the RPC/encoded style (&lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing13"&gt;Listing 13&lt;/a&gt;).&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing13"&gt;&lt;b&gt;Listing 13.  The RPC/encoded binary tree&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;A&amp;gt;&lt;br&gt;    &amp;lt;name&amp;gt;A&amp;lt;/name&amp;gt;&lt;br&gt;    &amp;lt;left href=&amp;quot;12345&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;right href=&amp;quot;12345&amp;quot;/&amp;gt; &lt;br&gt;&amp;lt;/A&amp;gt;&lt;br&gt;&amp;lt;B id=&amp;quot;12345&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;name&amp;gt;B&amp;lt;/name&amp;gt;&lt;br&gt;    &amp;lt;left xsi:nil=&amp;quot;true&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;right xsi:nil=&amp;quot;true&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;/B&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;br&gt; 			&lt;p&gt;Under any literal style, the href attribute is not available, so the graph linkage is lost (see &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing14"&gt;Listing 14&lt;/a&gt; and &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#figure2"&gt; Figure 2&lt;/a&gt;). You still have a root node, A, which points to a node B to the left and another node B to the right. These B nodes are equal, but they are not the same node. Data have been duplicated instead of being referenced twice.&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing14"&gt;&lt;b&gt;Listing 14.  The literal binary tree&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;A&amp;gt;&lt;br&gt;    &amp;lt;name&amp;gt;A&amp;lt;/name&amp;gt;&lt;br&gt;    &amp;lt;left&amp;gt;&lt;br&gt;        &amp;lt;name&amp;gt;B&amp;lt;/name&amp;gt; &lt;br&gt;        &amp;lt;left xsi:nil=&amp;quot;true&amp;quot;/&amp;gt;&lt;br&gt;        &amp;lt;right xsi:nil=&amp;quot;true&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;/left&amp;gt;&lt;br&gt;    &amp;lt;right&amp;gt;&lt;br&gt;        &amp;lt;name&amp;gt;B&amp;lt;/name&amp;gt;&lt;br&gt;        &amp;lt;left xsi:nil=&amp;quot;true&amp;quot;/&amp;gt; &lt;br&gt;        &amp;lt;right xsi:nil=&amp;quot;true&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;/right&amp;gt;&lt;br&gt;&amp;lt;/A&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			 				&lt;br&gt;&lt;a name="figure2"&gt;&lt;b&gt;Figure 2. Literal tree&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 				&lt;img alt="Literal tree" src="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/literaltree.jpg" height="128" width="194"&gt; 			&lt;br&gt; 			&lt;p&gt;There are various ways you can do graphs in literal styles, but there are no standard ways; so anything you might do would probably not interoperate with the service on the other end of the wire.&lt;/p&gt; 			&lt;br&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;br&gt;&lt;/td&gt;&lt;td align="right" valign="top"&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;a name="N1039E"&gt; &lt;span class="atitle"&gt;SOAP response messages&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;So far I have been discussing request messages. But what about response messages? What do they look like? By now it should be clear to you what the response message looks like for a document/literal message. The contents of the &lt;code&gt;soap:body&lt;/code&gt; are fully defined by a schema, so all you have to do is look at the schema to know what the response message looks like. For instance, see &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing15"&gt;Listing 15&lt;/a&gt; for the response for the WSDL in &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing8"&gt; Listing 8&lt;/a&gt;.&lt;/p&gt; 			&lt;br&gt;&lt;a name="listing15"&gt;&lt;b&gt;Listing 15. document/literal wrapped response SOAP message for myMethod&lt;/b&gt;&lt;/a&gt;&lt;br&gt; 			&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;&amp;lt;soap:envelope&amp;gt;&lt;br&gt;    &amp;lt;soap:body&amp;gt;&lt;br&gt;        &amp;lt;myMethodResponse/&amp;gt;&lt;br&gt;    &amp;lt;/soap:body&amp;gt; &lt;br&gt;&amp;lt;/soap:envelope&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt; 			&lt;p&gt;But what is the child of the &lt;code&gt;soap:body&lt;/code&gt; for the RPC style responses? The WSDL 1.1 specification is not clear. But WS-I comes to the rescue. WS-I&amp;#39;s Basic Profile dictates that in the RPC/literal response message, the name of the child of &lt;code&gt;soap:body&lt;/code&gt; is &amp;quot;... the corresponding &lt;code&gt;wsdl:operation&lt;/code&gt; name suffixed with the string &amp;#39;Response&amp;#39;.&amp;quot; Surprise! That&amp;#39;s exactly what the conventional wrapped pattern&amp;#39;s response element is called. So &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#listing15"&gt;Listing 15&lt;/a&gt; applies to the RPC/literal message as well as the document/literal wrapped message. (Since RPC/encoded is not WS-I compliant, the WS-I Basic Profile doesn&amp;#39;t mention what an RPC/encoded response looks like, but you can assume the same convention applies here that applies everywhere else.) So the contents of response messages are not so mysterious after all.&lt;/p&gt; 			&lt;br&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;br&gt;&lt;/td&gt;&lt;td align="right" valign="top"&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;a name="N103D0"&gt; &lt;span class="atitle"&gt;Summary&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; 			&lt;p&gt;There are four binding styles (there are really five, but document/encoded is meaningless). While each style has its place, under most situations the best style is document/literal wrapped.&lt;/p&gt; 		&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;a name="resources"&gt;&lt;span class="atitle"&gt;Resources&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;			&lt;ul&gt;&lt;li&gt;Be prepared for those times when you have to create your SOAP message by hand and deal with namespace issues without the help of a tool by reading &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-tip-namespace.html"&gt;&amp;quot;Handle namespaces in SOAP messages you create by hand&amp;quot;&lt;/a&gt; (developerWorks, May 2005). &lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Read the &lt;a href="http://www.w3.org/TR/wsdl"&gt;Web Services Description Language (WSDL) 1.1&lt;/a&gt;, the specification of WSDL.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;For a preview of where WSDL is going, read the &lt;a href="http://www.w3.org/2002/ws/desc/"&gt; WSDL 2.0 draft specifications.&lt;/a&gt; 				&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Try the &lt;a href="http://www.w3.org/TR/soap12-part0/"&gt;SOAP 1.2 Primer&lt;/a&gt;, an introduction to the SOAP 1.2 specification.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt; 					&lt;a href="http://java.sun.com/xml/downloads/jaxrpc.html"&gt;Java API for XML-Based RPC (JAX-RPC) Downloads &amp;amp; Specifications&lt;/a&gt; provides links to the JAX-RPC 1.1 specification itself, as well as javadocs, class files, and Sun&amp;#39;s JAX-RPC reference implementation.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Browse the &lt;a href="http://www.ws-i.org/"&gt;WS-I (Web Services Interoperability)&lt;/a&gt; organization&amp;#39;s Web pages.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Read  &lt;a href="http://ws-i.org/deliverables/workinggroup.aspx?wg=basicprofile"&gt;the WS-I&amp;#39;s profiles&lt;/a&gt;.  Particularly relevant is the basic profile.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/apps/SendTo?bookstore=safari"&gt; Browse for books&lt;/a&gt; on these and other technical topics.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Get involved in the developerWorks community by participating in  &lt;a href="http://www.ibm.com/developerworks/blogs/"&gt;developerWorks blogs&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Want more? The developerWorks &lt;a href="http://www.ibm.com/developerworks/webservices"&gt;SOA and Web services&lt;/a&gt; zone hosts hundreds of informative articles and introductory, intermediate, and advanced tutorials on how to develop Web services applications.&lt;/li&gt;&lt;/ul&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-1604813324828766903?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/1604813324828766903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/07/web-service-binging-type-and-use-style.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1604813324828766903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1604813324828766903'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/07/web-service-binging-type-and-use-style.html' title='Web Service Binging type and Use style -- From IBM (Russell Butek)'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-1290543833097276990</id><published>2007-07-11T15:21:00.001-04:00</published><updated>2007-07-11T15:21:18.271-04:00</updated><title type='text'>Some good points got from "EJB 3.0 in Action"</title><content type='html'>Clearly, EJB 3.0 Session Beans are not your only option in developing the business tier of your application. POJOs managed by lightweight containers such as Spring could also be&lt;br&gt;used to build the business logic tier. &lt;br&gt; &lt;br&gt;Before jumping on either the EJB 3.0 Session Bean or Spring bandwagon you should clearly think about what your needs are.&lt;br&gt;If your application needs robust remoteability or seamlessly exposing your business logic as Web Services, EJB  3.0 is the clear choice. Spring also does not have very good equivalents of instance pooling, automated session state maintenance and passivation/activation. Because of heavy use of annotations, you can pretty much avoid "XML Hell" using EJB  3.0. This is not true of Spring. Moreover, because it is an integral part of the Java EE standard the EJB container is natively integrated with components such as JSF, JSP, Servlets, the JTA transaction manager, JMS providers and JAAS security providers of your application server. &lt;br&gt;&lt;br&gt;With Spring, you have to worry whether your application server fully supports the framework with these native components and other high performance features like clustering, load&lt;br&gt;balancing and failover. If these are not factors you are worried about, Spring is not a bad choice at all and has a few strengths of its own. Spring has numerous simple, elegant utilities to perform many common tasks such as the JDBC and JMS templates. If you plan to use dependency injection with regular Java Classes, Spring is great since DI only works for container components in EJB  3.0. Also, Spring AOP/AspectJ is a much more feature-rich (albeit slightly more complex) choice than EJB 3.0 interceptors.&lt;br&gt;&lt;br&gt;Nevertheless, if portability, standardization and vendor support is important to you, EJB 3.0  may be the way to go anyway. EJB 3.0 is a mature product that is the organic (albeit imperfect) result of the incremental effort, pooled resources, shared ownership and measured consensus of numerous distinct groups of people. This includes the grassroots Java Community Process (JCP), some of the world's most revered commercial technology powerhouses like IBM, Sun, Oracle, BEA, etc and well as spirited open source organizations like Apache and JBoss. &lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-1290543833097276990?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/1290543833097276990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/07/some-good-points-got-from-ejb-30-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1290543833097276990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1290543833097276990'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/07/some-good-points-got-from-ejb-30-in.html' title='Some good points got from &quot;EJB 3.0 in Action&quot;'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7216122515230483944</id><published>2007-07-11T13:54:00.001-04:00</published><updated>2007-07-11T13:54:05.174-04:00</updated><title type='text'>Some notes on using EJB 3.0</title><content type='html'>&lt;ul&gt;&lt;li&gt;Create Stateless Session Bean&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-left: 40px;"&gt;&lt;ul&gt;&lt;li&gt;Define an interface :&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="margin-left: 40px;"&gt;&lt;div style="margin-left: 40px;"&gt;import javax.ejb.Local;&lt;br&gt;import  com.risguru.example.persistence.User;&lt;br&gt;&lt;br&gt;public interface RegisterUser{&lt;br&gt;User registerUser(User user);&lt;br&gt;}&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;div style="margin-left: 40px;"&gt;&lt;ul&gt;&lt;li&gt;Define the implementation&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt; import javax.ejb.Stateless;&lt;br&gt;import com.risguru.example.persistence.User;&lt;br&gt;&lt;br&gt;@Stateless&lt;br&gt;public class RegisterUserBean implements RegisterUser {&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div style="margin-left: 40px;"&gt;&lt;ul&gt;&lt;li&gt;Define the client usage &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;@EJB &lt;br&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;private RegisterUser registerUser&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Create Stateful Session Bean&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-left: 40px;"&gt;&lt;ul&gt; &lt;li&gt;Define an interface &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;The same with above&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div style="margin-left: 40px;"&gt;&lt;ul&gt;&lt;li&gt;Define the implementation&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;import  javax.ejb.*;&lt;br&gt;&lt;br&gt;@Stateful&lt;br&gt;public class RegisterUserBean implements RegisterUser {&lt;br&gt;......&lt;br&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;@Remove&lt;/span&gt;&lt;br&gt;public Long confirm()&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Create Message Driven Bean &lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-left: 40px;"&gt;&lt;ul&gt;&lt;li&gt;Define client usage&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;@Resource(name=&amp;quot;jms/QueueConnectionFactory&amp;quot;) &lt;br&gt;private ConnectionFactory connectionFactory;&lt;br&gt; @Resource(name=&amp;quot;jms/UserRegisterQueue&amp;quot;) &lt;br&gt;private Destination userRegisterQueue;&lt;br&gt;&lt;/div&gt;&lt;div style="margin-left: 40px;"&gt;&lt;ul&gt;&lt;li&gt;Define the server side MDB&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;import  javax.ejb.MessageDriven;&lt;br&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;import javax.ejb.ActivationConfigProperty;&lt;br&gt;&lt;br&gt;@MessageDriven(&lt;br&gt;&amp;nbsp;&amp;nbsp; activationConfig = {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @ActivationConfigProperty(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; propertyName=&amp;quot;destinationName&amp;quot;, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; propertyValue=&amp;quot;jms/UserRegisterQueue&amp;quot;) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;)&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Create Entity Bean&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Define entity&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style="margin-left: 80px;"&gt;import java.io.Serializable; &lt;br&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;import java.sql.Date;&lt;br&gt;import javax.persistence.Column;&lt;br&gt;import javax.persistence.Entity;&lt;br&gt;import &lt;a href="http://javax.persistence.Id"&gt;javax.persistence.Id&lt;/a&gt;;&lt;br&gt;import javax.persistence.Table ;&lt;br&gt;import javax.persistence.GenerationType;&lt;br&gt;import javax.persistence.GeneratedValue;&lt;br&gt;&lt;br&gt;@Entity&lt;br&gt;@Table(name=&amp;quot;USERS&amp;quot;)&lt;br&gt;&lt;br&gt;@Id&lt;br&gt;@GeneratedValue(strategy=GenerationType.AUTO)&lt;br&gt;@Column(name=&amp;quot;USER_ID&amp;quot;) &lt;br&gt;&lt;/div&gt;&lt;div style="margin-left: 40px;"&gt;&lt;ul&gt;&lt;li&gt;Use Entity Manager&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;import javax.persistence.PersistenceContext;&lt;br&gt;import javax.persistence.EntityManager;&lt;br&gt;&lt;br&gt;@PersistenceContext(unitName=&amp;quot;risGuru&amp;quot;) &lt;br&gt;private EntityManager entityManager;&lt;br&gt;&lt;br&gt;entityManager.persist(user)&lt;br&gt;&lt;/div&gt;&lt;br&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-7216122515230483944?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/7216122515230483944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/07/some-notes-on-using-ejb-30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7216122515230483944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7216122515230483944'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/07/some-notes-on-using-ejb-30.html' title='Some notes on using EJB 3.0'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-5799226771750858085</id><published>2007-07-10T17:07:00.001-04:00</published><updated>2007-07-10T17:07:29.232-04:00</updated><title type='text'>EJB 3.0 new features</title><content type='html'>&lt;ul&gt;&lt;li&gt;EJB 3.0 components are POJOs configurable through simplified metadata annotations.&lt;/li&gt;&lt;li&gt;Accessing EJBs from client applications has become very simple using dependency injection.&lt;/li&gt;&lt;li&gt;EJB 3.0 standardizes the persistence with the Java Persistence API, which defines POJO &lt;/li&gt;&lt;li&gt;Entities that can be used both inside and outside the container.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-5799226771750858085?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/5799226771750858085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/07/ejb-30-new-features.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5799226771750858085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5799226771750858085'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/07/ejb-30-new-features.html' title='EJB 3.0 new features'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-1036175579998329258</id><published>2007-06-29T14:27:00.001-04:00</published><updated>2007-06-29T14:27:38.798-04:00</updated><title type='text'>Simple Comparison for ebMS 2.0 and ebMS 3.0</title><content type='html'>Comparison ebMS 2.0 with 3.0.&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol style="margin-left: 40px;"&gt;&lt;li&gt;ebMS 2.0 compiles SOAP 1.1 and SOAP Messages with Attachments.&lt;/li&gt;&lt;li&gt;ebMS 3.0 works with SOAP 1.1/1.2 and SOAP Messages with Attachments. &lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-left: 40px;"&gt;&lt;ol&gt;&lt;li&gt;ebMS 2.0 uses single message structure for normal messages and error messages.&lt;/li&gt;&lt;li&gt;ebMS 3.0 separates them into two structure: User Message and Signal Message. &lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;ol&gt;&lt;li&gt;ebMS 2.0 has elements in SOAP body.&lt;/li&gt;&lt;li&gt;ebMS 3.0 puts its stuff in SOAP header. The SOAP body is freed for business payload. This clearly isolation makes ebMS 3.0 more compliant than ebMS  2.0 with SOAP processing model.&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;ol&gt;&lt;li&gt;ebMS 3.0 changes some fields and adds more fields than ebMS 2.0.&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;br&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-1036175579998329258?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/1036175579998329258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/06/simple-comparison-for-ebms-20-and-ebms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1036175579998329258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1036175579998329258'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/06/simple-comparison-for-ebms-20-and-ebms.html' title='Simple Comparison for ebMS 2.0 and ebMS 3.0'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-1275056279126008618</id><published>2007-06-29T11:15:00.001-04:00</published><updated>2007-06-29T11:15:20.456-04:00</updated><title type='text'>How do I set a header when using WSDL2Java stubs?</title><content type='html'>&lt;i&gt;How do I set a header when using WSDL2Java stubs?&lt;/i&gt; &lt;blockquote&gt; &lt;p&gt;There are two styles of headers, explicit and implicit.  Explicit headers are defined in the WSDL of the service.  The WSDL2Java generation tool will recognize these headers in most cases and emit stub class methods that include the headers as arguments to the methods. &lt;/p&gt;&lt;p&gt;In other cases, you may want to set headers that are not explicitly called   out in the WSDL. For instance, you want to do some custom processing in a &lt;b style="color: black; background-color: rgb(160, 255, 255);"&gt;handler&lt;/b&gt;   or add security. In this case you can add headers to request before you invoke the stub method. &lt;/p&gt;&lt;p&gt;There are are two &lt;em&gt;setHeader&lt;/em&gt; APIs on the &lt;tt&gt;org.apache.axis.client.Stub&lt;/tt&gt; class. The first takes the namespace, name and value of the header.  &lt;/p&gt;&lt;pre&gt;setHeader(String namespace, String partName, Object headerValue)&lt;/pre&gt; The second takes a SoapHeaderElement:  &lt;pre&gt;setHeader(SOAPHeaderElement header)&lt;/pre&gt; &lt;p&gt;Here is an example of using the first API&lt;/p&gt; &lt;pre&gt; FooServiceLocator loc = new FooServiceLocator();&lt;br&gt; FooService binding = loc.getFooService();&lt;br&gt; org.apache.axis.client.Stub s = (Stub) binding;&lt;br&gt; s.setHeader(&amp;quot;&lt;a href="http://my.name.space/headers"&gt;http://my.name.space/headers &lt;/a&gt;&amp;quot;, &amp;quot;mysecurityheader&amp;quot;, &amp;quot;This guy is OK&amp;quot;);&lt;br&gt; result = binding.myOperation(...);&lt;br&gt;&lt;/pre&gt;  &lt;/blockquote&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-1275056279126008618?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/1275056279126008618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/06/how-do-i-set-header-when-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1275056279126008618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1275056279126008618'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/06/how-do-i-set-header-when-using.html' title='How do I set a header when using WSDL2Java stubs?'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-2432682454239816187</id><published>2007-06-28T10:12:00.001-04:00</published><updated>2007-06-28T10:12:50.758-04:00</updated><title type='text'>SOAP adapter technology adoption overview</title><content type='html'>For the SOAP adapter, the implementation technologies can with these 4,&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Axis. Axis is a widely adopted SOAP framework, and de-fact standard in Web Service. It is the only plug-in that is supported by Eclipse WST. &lt;/li&gt;&lt;li&gt;Axis 2. Axis 2 is a re-architecture and re-written Axis, the API is simpler and performance is better. It will be the next generation of Apache SOAP framework. It also provides a separated plug-in for Eclipse.&lt;/li&gt; &lt;li&gt;JAX-WS RI, JAX-WS RI is Sun Web Service Reference Implementation, it supports Annotation and pretty easy to implement.&lt;/li&gt;&lt;li&gt;XFire, yet another well known SOAP lightweight framework, with its simple and easy understanding model, fast speed and maintainability, it grows up quickly. But sometime has to use some vendor special features.  &lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;Web Security Concerns:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Axis does not support Web Security Authentication directly, it supports the XML signatures via another Apache project XML security and Digest signature via HttpClient library. Axis supports both SOAP  1.1 and 1.2.&lt;/li&gt;&lt;li&gt;Axis 2 supports WSS4J for security (Apache Rampart), Reliable Messaging (Sandesha), WS-Coordination ( Kandula ), WS-AtomicTransaction and WS-BusinessActivity, but not all of them are released. Axis 2 supports both SOAP  1.1 and 1.2.&lt;/li&gt;&lt;li&gt;JAX-WS RI is using Handler (like Sevlet filter) to handle the WS-Security signature, or apply different handlers for different purposes, this can be much more efficient and convenient than WSS XML configuration files, said someone&amp;#39;s blog ( &lt;a href="http://cup-of-java.blogspot.com/2007/06/jax-ws-ri-is-good-good-good.html"&gt;http://cup-of-java.blogspot.com/2007/06/jax-ws-ri-is-good-good-good.html&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;XFire supports WSS4J, but use its own inHandler and outHander. &lt;br clear="all"&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-2432682454239816187?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/2432682454239816187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/06/soap-adapter-technology-adoption.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/2432682454239816187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/2432682454239816187'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/06/soap-adapter-technology-adoption.html' title='SOAP adapter technology adoption overview'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-5187077481507742246</id><published>2007-06-22T11:31:00.001-04:00</published><updated>2007-06-22T11:31:25.809-04:00</updated><title type='text'>AJAX framework selection</title><content type='html'>&lt;span lang="EN-CA"&gt;Let see what I had at this spot.&lt;/span&gt;    &lt;p&gt;&lt;span lang="EN-CA"&gt;There are several AJAX frameworks, I will try my best to go through one by one, but of course, these are all my personal opinions. &lt;br&gt; &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span lang="EN-CA"&gt;DOJO, is one of the most popular and more comprehensive open source AJAX framework, with its advanced packaging system and rich API of not only AJAX utilities but also UI components. DOJO has received the backing of many Java projects including Tapestry and WebWork (Struts 2.0) and is widely adopted by IBM, Sun and big name companies. It has a wide developer base and a lot of resource such as trouble shooting, tutorial, jump start, forum, mail list and so on. The downside is since it is a client-centric framework that with its plumbing features, it provides developer the capability to manipulate the lowest layer and hence developers have to deal with a lot of JavaScript coding which will becomes a big issue in maintenance and usability. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;ICEFace, is a new and quick growing framework. It is integrated with BEA. It provides lot of pre-built UI components and with BEA Workshop studio, developer can create pages by visually drag and drop.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Since ICEFaces offers a JSF programming model, it can be readily adapted to existing JSF tooling.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I have never tried out the ICEFaces, so I cannot provide further information here.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;Prototype/Scriptaculous: The pairing of Prototype and Scriptaculous has proven popular, thanks in part to the simplicity of its API, giving the developer enhanced tools to navigate and manipulate the DOM, and providing browser-independent access to the XMLHttpRequest object. A number of frameworks more focused on widget have been built on top of Prototype, and ICEFaces incorporates Prototype and Scriptaculous as well. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;The Google Web Tookit is a comprehensive framework. The programming model is server-centric and procedural; the API looks a lot like SWT. The Java application code is debugged by running it in the &amp;quot;hosted web browser&amp;quot; tool shipped with the framework. It has a compiler that helps translating Java code into JavasScript file, and then serves it into a Web page. It also provides tools such as Eclipse plug designer IDE that developer can use drag drop function to create interface on Eclipse IDE. The downside of GWT is after the interface is done, it has limited room for developer to optimize or modify the generated code. To me, the GWT is the most compatible AJAX framework that works perfectly in both IE 6+ and Firefox 1.5+. Plus, GWT has a very strong developer team as it&amp;#39;s backing. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;ZK, I used ZK for quite a while, it is a pretty lightweight AJAX framework, it provides 100% pure Java coding model, that means the developer does not have to worry about or even write a simple JavaScript. It is another kind of SWT alike framework. Unfortunately, the user base of ZK is poor and the developer team of ZK development has only 2 or 3 major developers. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;Yahoo UI: the Yahoo library is a sold package with an open source license. Given that Yahoo is using it to power many of its sites, the stability and robustness of the library cannot be put to question. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;BroadVision, IBM acquired BroadVision at May last year, and put a lot of effort trying to integrating it into one of WebSphere studio. The BroadVision is JSF base programming model and with the studio, developer can create interface in visually drag and drop way. I cannot tell more since I have not investigated this framework. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;At last, if your team has some experienced Microsoft C# developers, you can try out the Microsoft Windows Presentation Foundation, which embedded in Vista and integrated with Visual Studio 2005+. WFP includes two tiers, the front ties is XAML, and the backend tier is C#. In runtime, it has to download a big ActiveX at client side and only support IE 6.0 +. I have to admit that WFP is the most powerful Web 2.0 framework so far I have seen, and it is a big trash as well as it is Microsoft&amp;#39;s. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-CA"&gt;My personal conclusion is : To build a community portal or profolio, I will choose ICEFaces, but to build an enterprise portal, I will go for the GWT.  &lt;br&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;span lang="EN-CA"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-CA"&gt;I hope this can help and please correct me if I am wrong. &lt;br&gt;&lt;/span&gt;&lt;/p&gt;&lt;span lang="EN-CA"&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN-CA"&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN-CA"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="sg"&gt;  &lt;/span&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-5187077481507742246?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/5187077481507742246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/06/ajax-framework-selection.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5187077481507742246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/5187077481507742246'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/06/ajax-framework-selection.html' title='AJAX framework selection'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-3201763242857680336</id><published>2007-04-26T16:42:00.000-04:00</published><updated>2007-04-26T16:44:36.457-04:00</updated><title type='text'>Common methods of groovy.util.Node and GPathResult</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Isq2x-525sk/RjEPJT4nfaI/AAAAAAAAADs/OFBRTzBaFW4/s1600-h/groovy4.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Isq2x-525sk/RjEPJT4nfaI/AAAAAAAAADs/OFBRTzBaFW4/s320/groovy4.jpg" alt="" id="BLOGGER_PHOTO_ID_5057840509144759714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;To Living Instead Of Existing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-3201763242857680336?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/3201763242857680336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/04/common-methods-of-groovyutilnode-and.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3201763242857680336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3201763242857680336'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/04/common-methods-of-groovyutilnode-and.html' title='Common methods of groovy.util.Node and GPathResult'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Isq2x-525sk/RjEPJT4nfaI/AAAAAAAAADs/OFBRTzBaFW4/s72-c/groovy4.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-6379173282210649716</id><published>2007-04-24T14:30:00.001-04:00</published><updated>2007-04-24T14:30:04.099-04:00</updated><title type='text'>The formula calculating mortgage rate in Groovy</title><content type='html'>&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;Groovy Code Script to Calculating Mortgage Payment&lt;/span&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;def monthly = &amp;quot;amount*(rate/12) / (1-(1+rate/12)**-numberOfMonths)&amp;quot;&lt;br&gt;def shell = new GroovyShell() &lt;br&gt;def script = shell.parse(monthly)&amp;nbsp; &lt;br&gt;script.binding.amount = 370000&amp;nbsp;&amp;nbsp; // the amount browsed&lt;br&gt;script.rate = 5.25 / 100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the interest rate&lt;br&gt;script.numberOfMonths = 12 * 25&amp;nbsp;&amp;nbsp;&amp;nbsp; // total payment period 12 months * 25 years &lt;br&gt;&lt;br&gt;def eachmonth = script.run()&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;&lt;span style="color: rgb(51, 102, 255); font-style: italic;"&gt;To Living Instead Of Existing!&lt;/span&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-6379173282210649716?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/6379173282210649716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/04/formula-calculating-mortgage-rate-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6379173282210649716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6379173282210649716'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/04/formula-calculating-mortgage-rate-in.html' title='The formula calculating mortgage rate in Groovy'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7812908658478420870</id><published>2007-03-07T09:50:00.001-05:00</published><updated>2007-03-07T09:50:57.592-05:00</updated><title type='text'>New Post for Email Blog</title><content type='html'>This is a test blogger for email blog!&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;To Living Instead Of Existing! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-7812908658478420870?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/7812908658478420870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/03/new-post-for-email-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7812908658478420870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7812908658478420870'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/03/new-post-for-email-blog.html' title='New Post for Email Blog'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-4223965349882175892</id><published>2007-03-06T14:09:00.000-05:00</published><updated>2007-03-06T14:10:36.864-05:00</updated><title type='text'>ebXML: Global Standard for Electronic Business?</title><content type='html'>&lt;h2&gt;&lt;span style="" lang="EN"&gt;ebXML: Global Standard for Electronic Business?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;After examining the basic blocks with &lt;a href="http://www.webreference.com/xml/column44/"&gt;Universal Business Language&lt;/a&gt; and &lt;a href="http://www.webreference.com/xml/column45/"&gt;XML Common Business Language&lt;/a&gt;, what else is missing for electronic business? A whole lot more is incorporated into Electronic Business XML, ebXML for short.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;B2B collaboration requires more than just an XML vocabulary. You have to deal with:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Business      semantics: What do the individual messages exchanged actually mean in real      life? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Negotiating terms      and conditions: Business is always bartering of some sort. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Interoperability:      Different hardware and software systems need to come together in joint      transactions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Security and      Privacy: Some business might be private, and needs to stay that way. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Reliability: To      order or not to order, this is the question here. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;ebXML provides concrete specifications to enable dynamic B2B collaborations.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;ebXML aspires to become the global standard for electronic business, enabling anyone, especially small and medium-size enterprises, anywhere to do business with anyone else over the Internet. It is complementary to other existing B2B initiatives, from both the software developer community (e.g. UDDI, SOAP) and the business sphere (RosettaNet, TradeXchange, etc.).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;The vision is to create a global electronic market place where enterprises of any size, anywhere can:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Find each other      electronically &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;And conduct      business &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Using XML messages      &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;According to      standard business process sequences &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;With clear      business semantics &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;According to      standard or mutually agreed trading partner protocol agreements &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Using off the      shelf purchased business applications &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;Such an end-to-end B2B XML Framework such as ebXML needs to cover many bases:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Core Components &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Registry and      Repository &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Collaborative      Protocol Profiles (CPPs) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Agreements(CPAs) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="EN"&gt;Message Service &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;Let's look at each of them in turn.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN"&gt;Core Components&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;Core components such as UBL or xCBL provide reusable low-level data structures such as party, address, phone, date, currency. They form a single, consistent lexicon used to define business process and information models that facilitates interoperability between disparate systems.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN"&gt;ebXML Registry and Repository&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;Finding a business party needs a yellow page service in the first place. While the registry is the index of all things ebXML, the repository is the holder.&lt;span style=""&gt;  &lt;/span&gt;Both systems are based on a distributed model where the nodes can be maintained by industry groups, market places, exchanges, communities, or individual companies.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;Registering a business in an ebXML Registry adds offerings to the index of all information in the repository, having the business listed in a rich query facility for finding business partners.&lt;span style=""&gt;  &lt;/span&gt;The specifications, containing Collaborative Protocol Profiles, Core components, and Classification and categorization schemes all go into an ebXML Repository.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;Universal Description and Discovery Interface (UDDI) is a new XML-based technology for building registries. UDDI will be one of the enabling technolgies to help you find ebXML services.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN"&gt;Collaboration Protocol Profile&lt;/span&gt;&lt;span style="" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;The profile is defined using the ebXML Specification Schema and is a concrete specification of your ebusiness offerings, that is the business scenarios you support, the service interfaces you implement, as well as document formats exchanged and technical requirements and options for protocols, security, and reliability. The profile is composed of business process models, information models, and context rules.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;Standard business scenarios remove the need for prior agreements among trading partners, and. are often defined by Industry Groups. Scenarios include Business Process Models that define interactions between parties, the sequencing of interactions, and the documents exchanged in each interaction. The Information Model defines the documents, and the industry-specific context in which the transactions take place.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN"&gt;Agreement negotiation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;After you find a registry and search for partners you examine their CPPs in order to ascertain compatibility of the business process and technical specifications. You stipulate your "rules of engagement" and produce a Collaboration Protocol Agreement, outlining the conditions under which two partners will conduct business transactions together.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;The agreement for business interaction between two parties contains technical specifications, in the form of message service requirements and application requirements, and references CPPs and legal terms and conditions. Subsequently a business service interface implements the CPA, and enables one party to converse with the other party using the ebXML Message Service.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN"&gt;Message Service&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;A reliable, secure XML messaging service is required to enforces the rules of engagement in the CPA. The message service is defined transport independent and extends SOAP messages with attachments. This way it addresses topics beyond SOAP, namely reliability, security, and delivery options.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="EN"&gt;Conclusion&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-family: Arial;" lang="EN"&gt;Worldwide electronic business is a puzzle with many pieces. While the ebXML pieces are at various stages of definition and implementation, the blueprint around them sets the stage for how business transactions will be structured on a world-wide basis. While the world seems to converge, Microsoft goes the other way with biztalk, so stay tuned for the next installment of this mini-series on business XML.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-CA"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-4223965349882175892?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/4223965349882175892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/03/ebxml-global-standard-for-electronic.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4223965349882175892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4223965349882175892'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/03/ebxml-global-standard-for-electronic.html' title='ebXML: Global Standard for Electronic Business?'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7360939287746342553</id><published>2007-02-05T16:15:00.000-05:00</published><updated>2007-03-07T09:46:51.846-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Service'/><category scheme='http://www.blogger.com/atom/ns#' term='JAXP'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'></title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;Technology                         When/Why to use                            Requirements&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a title="Reading XML with Groovy and DOM" href="http://groovy.codehaus.org/Reading+XML+with+Groovy+and+DOM"&gt;DOM&lt;/a&gt;                           low-level tree-based processing                -&lt;br /&gt;&lt;a title="Reading XML with Groovy and SAX" href="http://groovy.codehaus.org/Reading+XML+with+Groovy+and+SAX"&gt;SAX&lt;/a&gt;                             event-based push-style parsing can&lt;br /&gt;                                    be useful for streaming large files            -&lt;br /&gt;&lt;a title="Reading XML with Groovy and StAX" href="http://groovy.codehaus.org/Reading+XML+with+Groovy+and+StAX"&gt;StAX&lt;/a&gt;                            event-based pull-style parsing can&lt;br /&gt;                                     be useful for streaming large files      requires tax.jar&lt;br /&gt;&lt;a title="Reading XML with Groovy and DOM4J" href="http://groovy.codehaus.org/Reading+XML+with+Groovy+and+DOM4J"&gt;DOM4J&lt;/a&gt;                      nicer syntax over DOM processing&lt;br /&gt;                                    plus can be useful for large files if&lt;br /&gt;                                    you use prune capability                  requires dom4j.jar&lt;br /&gt;&lt;a title="Reading XML with Groovy and XOM" href="http://groovy.codehaus.org/Reading+XML+with+Groovy+and+XOM"&gt;XOM&lt;/a&gt;                          nicer syntax over DOM processing&lt;br /&gt;                                    plus a strong emphasis on&lt;br /&gt;                                    compliancy                                              requires xom.jar&lt;br /&gt;&lt;a title="Reading XML with Groovy and JDOM" href="http://groovy.codehaus.org/Reading+XML+with+Groovy+and+JDOM"&gt;JDOM&lt;/a&gt;                       nicer syntax over DOM processing    requires jdom.jar&lt;br /&gt;&lt;a title="Reading XML with Groovy and XPath" href="http://groovy.codehaus.org/Reading+XML+with+Groovy+and+XPath"&gt;XPath&lt;/a&gt;                        use XPath expressions                         requires xalan.jar&lt;br /&gt;&lt;a title="Reading XML with Groovy and Jaxen" href="http://groovy.codehaus.org/Reading+XML+with+Groovy+and+Jaxen"&gt;Jaxen&lt;/a&gt;                         use XPath expressions with&lt;br /&gt;                                   slightly more efficiency than&lt;br /&gt;                                   built-in XPath                                        requires jaxen.jar&lt;br /&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/excerpt/java_xslt_ch5/index.html"&gt;XSLT with Java&lt;/a&gt;       When your transformation is&lt;br /&gt;                                  more easily expressed using&lt;br /&gt;                                  XSLT than code                                       -&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-7360939287746342553?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/7360939287746342553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/02/technology-whenwhy-to-use-requirements.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7360939287746342553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/7360939287746342553'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/02/technology-whenwhy-to-use-requirements.html' title=''/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-6545056589895339333</id><published>2007-01-12T10:32:00.000-05:00</published><updated>2007-01-12T10:33:57.424-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Service'/><title type='text'>Web services technologies</title><content type='html'>Web services technology is a collection of standards (or emerging standards)&lt;br /&gt;that can be used to implement an SOA. Web services technology is vendor- and&lt;br /&gt;platform-neutral, interoperable, and supported by many vendors today.&lt;br /&gt;Web services are self-contained, modular applications, that can be described,&lt;br /&gt;published, located, and invoked over networks. Web services encapsulate&lt;br /&gt;business functions, ranging from a simple request-reply to full business process&lt;br /&gt;interactions. The services can be new or wrap around existing applications.&lt;br /&gt;Core elements&lt;br /&gt;The following are the core technologies used for Web services.&lt;br /&gt; Extensible Markup Language (XML)&lt;br /&gt;XML is the markup language that underlies most of the specifications used for&lt;br /&gt;Web services. XML is a generic language that can be used to describe the&lt;br /&gt;content in a structured way, separated from its presentation to a specific&lt;br /&gt;device.&lt;br /&gt; Simple Object Access Protocol (SOAP)&lt;br /&gt;SOAP is a specification for the exchange of structured XML-based messages&lt;br /&gt;between the service provider, service consumer, and service registry,&lt;br /&gt;consisting of three parts:&lt;br /&gt;– The format of a SOAP message is an envelope containing zero or more&lt;br /&gt;headers and exactly one body. The envelope is the top element of the&lt;br /&gt;XML document, providing a container for control information, theaddressee of a message, and the message itself. Headers contain control&lt;br /&gt;information such as quality-of-service attributes. The body contains the&lt;br /&gt;message identification and its parameters.&lt;br /&gt;– Encoding rules are used for expressing instances of application-defined&lt;br /&gt;data types. SOAP defines a programming language independent data type&lt;br /&gt;schema based on an XML Schema Descriptor (XSD), plus encoding rules&lt;br /&gt;for all data types defined to this model.&lt;br /&gt;– RPC representation is the convention for representing remote procedure&lt;br /&gt;calls (RPC) and responses.&lt;br /&gt;SOAP, in principle, is a protocol-independent transport. Consequently, it can&lt;br /&gt;potentially be used in combination with a variety of protocols such as HTTP,&lt;br /&gt;JMS, SMTP, or FTP. Currently, the most common way of exchanging SOAP&lt;br /&gt;messages is through HTTP, which is also the only protocol supported by&lt;br /&gt;WS-I Basic Profile 1.0.&lt;br /&gt; Web Services Description Language (WSDL)&lt;br /&gt;WSDL is an XML-based interface and implementation description language.&lt;br /&gt;A WSDL document contains the following main elements:&lt;br /&gt; Types is the container for data type definitions using a type system such as an&lt;br /&gt;XML Schema.&lt;br /&gt; An abstract, typed definition of the data being communicated, a message can&lt;br /&gt;have one or more typed parts.&lt;br /&gt; A port type is an abstract set of one or more operations supported by one or&lt;br /&gt;more ports.&lt;br /&gt; An operation is an abstract description of an action supported by the service&lt;br /&gt;that define the input and output message and optional fault message.&lt;br /&gt; The binding is a concrete protocol and data format specification for a&lt;br /&gt;particular port type. The binding information contains the protocol name, the&lt;br /&gt;invocation style, a service ID, and the encoding for each operation.&lt;br /&gt; The service as a collection of related ports.&lt;br /&gt; The port is a single endpoint, an aggregation of a binding and a network&lt;br /&gt;address.&lt;br /&gt; Universal Description, Discovery, and Integration (UDDI)&lt;br /&gt;UDDI is both a client-side API and a SOAP-based server implementation that&lt;br /&gt;can be used to store and retrieve information on service providers and Web&lt;br /&gt;services.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-6545056589895339333?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/6545056589895339333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/01/web-services-technologies.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6545056589895339333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/6545056589895339333'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/01/web-services-technologies.html' title='Web services technologies'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-3300915226948043358</id><published>2007-01-10T10:46:00.000-05:00</published><updated>2007-01-10T10:50:10.661-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java SE 5.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Generic Type'/><title type='text'>Generic Type</title><content type='html'>A more realistic use of generic methods might be something like the following, which defines a static method that stuffs references to a single item into multiple boxes: &lt;br /&gt;&lt;br /&gt;public static &amp;lt;u&amp;gt;void fillBoxes(U u, List&amp;lt;box&amp;lt;u&amp;gt;&amp;gt; boxes) {&lt;br /&gt;    for (Box&amp;lt;u&amp;gt; box : boxes) {&lt;br /&gt;        box.add(u);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;To use this method, your code would look something like the following: &lt;br /&gt;Crayon red = ...;&lt;br /&gt;List&amp;lt;box&amp;lt;crayon&amp;gt;&amp;gt; crayonBoxes = ...;&lt;br /&gt;&lt;br /&gt;The complete syntax for invoking this method is:&lt;br /&gt;&lt;br /&gt;Box.&amp;lt;crayon&amp;gt;fillBoxes(red, crayonBoxes);&lt;br /&gt;&lt;br /&gt;Here we've explicitly provided the type to be used as U, but more often than not, this can be left out and the compiler will infer the type that's needed:&lt;br /&gt;&lt;br /&gt;Box.fillBoxes(red, crayonBoxes); // compiler infers that U is Crayon&lt;br /&gt;&lt;br /&gt;This feature, known as type inference, allows you to invoke a generic method as you would an ordinary method, without specifying a type between angle brackets.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-3300915226948043358?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/3300915226948043358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/01/generic-type.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3300915226948043358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3300915226948043358'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/01/generic-type.html' title='Generic Type'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8720696306262928194</id><published>2007-01-09T09:20:00.000-05:00</published><updated>2007-01-09T09:22:20.854-05:00</updated><title type='text'>How many percent you understood?</title><content type='html'>Must Understand:&lt;br /&gt;&lt;br /&gt;-          Thread Synchronization (green/native threads, multi-threading)&lt;br /&gt;-          Design Patterns (composite view patterns)&lt;br /&gt;-          Interpreted vs. Compiled Language&lt;br /&gt;-          Working with Oracle without using JDBC- accessing the dbs using Oracle types&lt;br /&gt;-          Reflection vs. Introspection&lt;br /&gt;&lt;br /&gt;Must Understand Concepts:&lt;br /&gt;&lt;br /&gt;1. Thread Synchronization&lt;br /&gt;o         What is synchronization? How do you synchronize objects?&lt;br /&gt;o         What are the two different methods called which are used for synchronization in Java?&lt;br /&gt;o         What's the difference between Vector and ArrayList?&lt;br /&gt;2. Green &amp; Native threads&lt;br /&gt;o        Difference between Green and Native threads.&lt;br /&gt;o        Which one is better Green or Native?&lt;br /&gt;o        Who implements Green threads?&lt;br /&gt;o        How Green threads work on a system which does not support threads at the kernel level?&lt;br /&gt;o        Define a Java thread&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Difference between a session bean and entity bean&lt;br /&gt;&lt;br /&gt;4. Interpreted vs. Compiled Language. Explain&lt;br /&gt;o     Is Java an interpreted or compiled language? Explain&lt;br /&gt;&lt;br /&gt;5. Reflection vs. Introspection&lt;br /&gt;o     Explain the two and what the differences are?&lt;br /&gt;&lt;br /&gt;6. Database design:&lt;br /&gt;o    Is it always right to normalize the tables as much as we can or do we encourage denormalization and in what cases?&lt;br /&gt;o    What are the steps of normalization and why are we doing it?&lt;br /&gt;&lt;br /&gt;7. Design Patterns&lt;br /&gt;o     Composite view patterns&lt;br /&gt;o     What's composite design pattern.&lt;br /&gt;&lt;br /&gt;8. Difference between Model I and Model 2 architecture as applied to MVC in J2EE.&lt;br /&gt;&lt;br /&gt;9. Database design questions&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Is it always right to normalize the tables as much as we can or do we encourage denormalization and in what cases? &lt;/li&gt;&lt;li&gt;What are the steps of normalization and why are we doing it?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8720696306262928194?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8720696306262928194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/01/how-many-percent-you-understood.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8720696306262928194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8720696306262928194'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/01/how-many-percent-you-understood.html' title='How many percent you understood?'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-4082000690272988931</id><published>2007-01-08T14:24:00.000-05:00</published><updated>2007-01-08T14:25:55.770-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Service'/><category scheme='http://www.blogger.com/atom/ns#' term='XWSS'/><title type='text'>Advantages of Message Security</title><content type='html'>&lt;strong&gt;Advantages of Message Security&lt;/strong&gt;&lt;br /&gt;&lt;a name="wp559152"&gt;&lt;/a&gt;&lt;br /&gt;Before we get to message security, it is important to understand why security at the transport layer is not always sufficient to address the security needs of a web service. Transport-layer security is provided by the transport mechanisms used to transmit information over the wire between clients and providers, thus transport-layer security relies on secure HTTP transport (HTTPS) using Secure Sockets Layer (SSL). Transport security is a point-to-point security mechanism that can be used for authentication, message integrity, and confidentiality. When running over an SSL-protected session, the server and client can authenticate one another and negotiate an encryption algorithm and cryptographic keys before the application protocol transmits or receives its first byte of data. Security is "live" from the time it leaves the consumer until it arrives at the provider, or vice versa, even across intermediaries. The problem is that it is not protected once it gets to its destination. One solution is to encrypt the message before sending using message security. &lt;a name="wp558174"&gt;&lt;/a&gt;&lt;br /&gt;In message-layer security, security information is contained within the SOAP message and/or SOAP message attachment, which allows security information to travel along with the message or attachment. For example, a portion of the message may be signed by a sender and encrypted for a particular receiver. When the message is sent from the initial sender, it may pass through intermediate nodes before reaching its intended receiver. In this scenario, the encrypted portions continue to be opaque to any intermediate nodes and can only be decrypted by the intended receiver. For this reason, message-layer security is also sometimes referred to as end-to-end security. &lt;a name="wp558176"&gt;&lt;/a&gt;&lt;br /&gt;The advantages of message-layer security include the following:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Security stays with the message over all hops and after the message arrives at its destination.&lt;a name="wp558178"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Is fine-grained. Can be selectively applied to different portions of a message (and to attachments if using XWSS).&lt;a name="wp558179"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Can be used in conjunction with intermediaries over multiple hops.&lt;a name="wp558180"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Is independent of the application environment or transport protocol.&lt;a name="wp558181"&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The disadvantage to using message-layer security is that it is relatively complex and adds some overhead to processing. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-4082000690272988931?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/4082000690272988931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/01/advantages-of-message-security.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4082000690272988931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4082000690272988931'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/01/advantages-of-message-security.html' title='Advantages of Message Security'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-3202388437216082660</id><published>2007-01-08T14:08:00.000-05:00</published><updated>2007-01-08T14:09:08.364-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DOM'/><category scheme='http://www.blogger.com/atom/ns#' term='XML Signature'/><title type='text'>XML Digital Signature API Examples</title><content type='html'>&lt;a name="wp511406"&gt;&lt;/a&gt;&lt;br /&gt;XML Digital Signature API Examples &lt;a name="wp511426"&gt;&lt;/a&gt;&lt;br /&gt;The following sections describe two examples that show how to use the XML Digital Signature API:&lt;br /&gt;&lt;a name="wp511432"&gt;&lt;/a&gt;&lt;br /&gt;Validate example&lt;a name="wp511433"&gt;&lt;/a&gt;&lt;br /&gt;Signing example&lt;a name="wp512249"&gt;&lt;/a&gt;&lt;br /&gt;To run the sample applications using the supplied Ant build.xml files, issue the following commands after you installed Java WSDP: &lt;a name="wp512250"&gt;&lt;/a&gt;&lt;br /&gt;For Solaris/Linux:&lt;br /&gt;&lt;a name="wp512253"&gt;&lt;/a&gt;&lt;br /&gt;% export JWSDP_HOME=&lt;your&gt;&lt;a name="wp512254"&gt;&lt;/a&gt;&lt;br /&gt;% export ANT_HOME=$JWSDP_HOME/apache-ant&lt;a name="wp512255"&gt;&lt;/a&gt;&lt;br /&gt;% export PATH=$ANT_HOME/bin:$PATH&lt;a name="wp512256"&gt;&lt;/a&gt;&lt;br /&gt;% cd $JWSDP_HOME/xmldsig/samples/&lt;sample-name&gt;&lt;a name="wp512258"&gt;&lt;/a&gt;&lt;br /&gt;For Windows 2000/XP:&lt;br /&gt;&lt;a name="wp512261"&gt;&lt;/a&gt;&lt;br /&gt;&gt; set JWSDP_HOME=&lt;your&gt;&lt;a name="wp512262"&gt;&lt;/a&gt;&lt;br /&gt;&gt; set ANT_HOME=%JWSDP_HOME%\apache-ant&lt;a name="wp512263"&gt;&lt;/a&gt;&lt;br /&gt;&gt; set PATH=%ANT_HOME%\bin;%PATH%&lt;a name="wp512264"&gt;&lt;/a&gt;&lt;br /&gt;&gt; cd %JWSDP_HOME%\xmldsig\samples\&lt;sample-name&gt;&lt;a name="wp511427"&gt;&lt;/a&gt;&lt;br /&gt;validate Example &lt;a name="wp512156"&gt;&lt;/a&gt;&lt;br /&gt;You can find the code shown in this section in the Validate.java file in the &lt;jwsdp_home&gt;/xmldsig/samples/validate directory. The file on which it operates, envelopedSignature.xml, is in the same directory. &lt;a name="wp512164"&gt;&lt;/a&gt;&lt;br /&gt;To run the example, execute the following command from the &lt;jwsdp_home&gt;/xmldsig/samples/validate directory:&lt;br /&gt;$ ant&lt;a name="wp512165"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp512167"&gt;&lt;/a&gt;&lt;br /&gt;The sample program will validate the signature in the file envelopedSignature.xml in the current working directory. To validate a different signature, run the following command:&lt;br /&gt;$ ant -Dsample.args="signature.xml" &lt;a name="wp512172"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name="wp512174"&gt;&lt;/a&gt;&lt;br /&gt;where "signature.xml" is the pathname of the file. &lt;a name="wp512158"&gt;&lt;/a&gt;&lt;br /&gt;Validating an XML Signature &lt;a name="wp511454"&gt;&lt;/a&gt;&lt;br /&gt;This example shows you how to validate an XML Signature using the JSR 105 API. The example uses DOM (the Document Object Model) to parse an XML document containing a Signature element and a JSR 105 DOM implementation to validate the signature. &lt;a name="wp511408"&gt;&lt;/a&gt;&lt;br /&gt;Instantiating the Document that Contains the Signature &lt;a name="wp511458"&gt;&lt;/a&gt;&lt;br /&gt;First we use a JAXP DocumentBuilderFactory to parse the XML document containing the Signature. An application obtains the default implementation for DocumentBuilderFactory by calling the following line of code:&lt;br /&gt;DocumentBuilderFactory dbf =&lt;br /&gt;  DocumentBuilderFactory.newInstance();&lt;a name="wp511460"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511462"&gt;&lt;/a&gt;&lt;br /&gt;We must also make the factory namespace-aware:&lt;br /&gt;dbf.setNamespaceAware(true);&lt;a name="wp511464"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511466"&gt;&lt;/a&gt;&lt;br /&gt;Next, we use the factory to get an instance of a DocumentBuilder, which is used to parse the document:&lt;br /&gt;DocumentBuilder builder = dbf.newDocumentBuilder();&lt;br /&gt;Document doc = builder.parse(new FileInputStream(argv[0]));&lt;a name="wp511468"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511502"&gt;&lt;/a&gt;&lt;br /&gt;Specifying the Signature Element to be Validated &lt;a name="wp511508"&gt;&lt;/a&gt;&lt;br /&gt;We need to specify the Signature element that we want to validate, since there could be more than one in the document. We use the DOM method Document.getElementsByTagNameNS, passing it the XML Signature namespace URI and the tag name of the Signature element, as shown:&lt;br /&gt;NodeList nl = doc.getElementsByTagNameNS&lt;br /&gt;  (XMLSignature.XMLNS, "Signature");&lt;br /&gt;if (nl.getLength() == 0) {&lt;br /&gt;  throw new Exception("Cannot find Signature element");&lt;br /&gt;}&lt;a name="wp511510"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511503"&gt;&lt;/a&gt;&lt;br /&gt;This returns a list of all Signature elements in the document. In this example, there is only one Signature element. &lt;a name="wp511504"&gt;&lt;/a&gt;&lt;br /&gt;Creating a Validation Context &lt;a name="wp511524"&gt;&lt;/a&gt;&lt;br /&gt;We create an XMLValidateContext instance containing input parameters for validating the signature. Since we are using DOM, we instantiate a DOMValidateContext instance (a subclass of XMLValidateContext), and pass it two parameters, a KeyValueKeySelector object and a reference to the Signature element to be validated (which is the first entry of the NodeList we generated earlier):&lt;br /&gt;DOMValidateContext valContext = new DOMValidateContext&lt;br /&gt;  (new KeyValueKeySelector(), nl.item(0));&lt;a name="wp511526"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511529"&gt;&lt;/a&gt;&lt;br /&gt;The KeyValueKeySelector is explained in greater detail in &lt;a href="file:///C:/Sandbox/JWSDP/jwstutorial20/doc/XMLDigitalSignatureAPI8.html#wp511424"&gt;Using KeySelectors&lt;/a&gt;. &lt;a name="wp511418"&gt;&lt;/a&gt;&lt;br /&gt;Unmarshaling the XML Signature &lt;a name="wp511539"&gt;&lt;/a&gt;&lt;br /&gt;We extract the contents of the Signature element into an XMLSignature object. This process is called unmarshalling. The Signature element is unmarshalled using an XMLSignatureFactory object. An application can obtain a DOM implementation of XMLSignatureFactory by calling the following line of code:&lt;br /&gt;XMLSignatureFactory factory =&lt;br /&gt;  XMLSignatureFactory.getInstance("DOM");&lt;a name="wp511541"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511543"&gt;&lt;/a&gt;&lt;br /&gt;We then invoke the unmarshalXMLSignature method of the factory to unmarshal an XMLSignature object, and pass it the validation context we created earlier:&lt;br /&gt;XMLSignature signature =&lt;br /&gt;  factory.unmarshalXMLSignature(valContext);&lt;a name="wp511419"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511420"&gt;&lt;/a&gt;&lt;br /&gt;Validating the XML Signature &lt;a name="wp511555"&gt;&lt;/a&gt;&lt;br /&gt;Now we are ready to validate the signature. We do this by invoking the validate method on the XMLSignature object, and pass it the validation context as follows:&lt;br /&gt;boolean coreValidity = signature.validate(valContext);&lt;a name="wp511557"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511421"&gt;&lt;/a&gt;&lt;br /&gt;The validate method returns "true" if the signature validates successfully according to the core validation rules in the W3C XML Signature Recommendation, and false otherwise. &lt;a name="wp511422"&gt;&lt;/a&gt;&lt;br /&gt;What If the XML Signature Fails to Validate? &lt;a name="wp511567"&gt;&lt;/a&gt;&lt;br /&gt;If the XMLSignature.validate method returns false, we can try to narrow down the cause of the failure. There are two phases in core XML Signature validation:&lt;br /&gt;&lt;a name="wp512008"&gt;&lt;/a&gt;&lt;br /&gt;Signature validation (the cryptographic verification of the signature) &lt;a name="wp512011"&gt;&lt;/a&gt;&lt;br /&gt;Reference validation (the verification of the digest of each reference in the signature)&lt;a name="wp512014"&gt;&lt;/a&gt;&lt;br /&gt;Each phase must be successful for the signature to be valid. To check if the signature failed to cryptographically validate, we can check the status, as follows:&lt;br /&gt;boolean sv =&lt;br /&gt;  signature.getSignatureValue().validate(valContext);&lt;br /&gt;System.out.println("signature validation status: " + sv);&lt;a name="wp511569"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511572"&gt;&lt;/a&gt;&lt;br /&gt;We can also iterate over the references and check the validation status of each one, as follows:&lt;br /&gt;Iterator i =&lt;br /&gt;  signature.getSignedInfo().getReferences().iterator();&lt;br /&gt;for (int j=0; i.hasNext(); j++) {&lt;br /&gt;  boolean refValid = ((Reference)&lt;br /&gt;    i.next()).validate(valContext);&lt;br /&gt;  System.out.println("ref["+j+"] validity status: " +&lt;br /&gt;    refValid);&lt;br /&gt;}&lt;a name="wp511574"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511424"&gt;&lt;/a&gt;&lt;br /&gt;Using KeySelectors &lt;a name="wp511588"&gt;&lt;/a&gt;&lt;br /&gt;KeySelectors are used to find and select keys that are needed to validate an XMLSignature. Earlier, when we created a DOMValidateContext object, we passed a KeySelector object as the first argument:&lt;br /&gt;DOMValidateContext valContext = new DOMValidateContext&lt;br /&gt;  (new KeyValueKeySelector(), nl.item(0));&lt;a name="wp511590"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511593"&gt;&lt;/a&gt;&lt;br /&gt;Alternatively, we could have passed a PublicKey as the first argument if we already knew what key is needed to validate the signature. However, we often don't know. &lt;a name="wp511425"&gt;&lt;/a&gt;&lt;br /&gt;The KeyValueKeySelector is a concrete implementation of the abstract KeySelector class. The KeyValueKeySelector implementation tries to find an appropriate validation key using the data contained in KeyValue elements of the KeyInfo element of an XMLSignature. It does not determine if the key is trusted. This is a very simple KeySelector implementation, designed for illustration rather than real-world usage. A more practical example of a KeySelector is one that searches a KeyStore for trusted keys that match X509Data information (for example, X509SubjectName, X509IssuerSerial, X509SKI, or X509Certificate elements) contained in a KeyInfo. &lt;a name="wp511606"&gt;&lt;/a&gt;&lt;br /&gt;The implementation of the KeyValueKeySelector is as follows:&lt;br /&gt;private static class KeyValueKeySelector extends KeySelector {&lt;br /&gt;  public KeySelectorResult select(KeyInfo keyInfo,&lt;br /&gt;      KeySelector.Purpose purpose,&lt;br /&gt;      AlgorithmMethod method,&lt;br /&gt;      XMLCryptoContext context)&lt;br /&gt;    throws KeySelectorException {&lt;br /&gt;    if (keyInfo == null) {&lt;br /&gt;      throw new KeySelectorException("Null KeyInfo object!");&lt;br /&gt;    }&lt;br /&gt;    SignatureMethod sm = (SignatureMethod) method;&lt;br /&gt;    List list = keyInfo.getContent();&lt;br /&gt;    for (int i = 0; i &lt; list.size(); i++) {&lt;br /&gt;      XMLStructure xmlStructure = (XMLStructure) list.get(i);&lt;br /&gt;      if (xmlStructure instanceof KeyValue) {&lt;br /&gt;        PublicKey pk = null;&lt;br /&gt;        try {&lt;br /&gt;          pk = ((KeyValue)xmlStructure).getPublicKey();&lt;br /&gt;        } catch (KeyException ke) {&lt;br /&gt;          throw new KeySelectorException(ke);&lt;br /&gt;        }&lt;br /&gt;        // make sure algorithm is compatible with method&lt;br /&gt;        if (algEquals(sm.getAlgorithm(),&lt;br /&gt;            pk.getAlgorithm())) {&lt;br /&gt;          return new SimpleKeySelectorResult(pk);&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    throw new KeySelectorException("No KeyValue element&lt;br /&gt;found!");&lt;br /&gt;  }&lt;br /&gt;  static boolean algEquals(String algURI, String algName) {&lt;br /&gt;    if (algName.equalsIgnoreCase("DSA") &amp;&amp;amp;&lt;br /&gt;        algURI.equalsIgnoreCase(SignatureMethod.DSA_SHA1)) {&lt;br /&gt;      return true;&lt;br /&gt;    } else if (algName.equalsIgnoreCase("RSA") &amp;&amp;amp;&lt;br /&gt;        algURI.equalsIgnoreCase(SignatureMethod.RSA_SHA1)) {&lt;br /&gt;      return true;&lt;br /&gt;    } else {&lt;br /&gt;      return false;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;a name="wp511608"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511438"&gt;&lt;/a&gt;&lt;br /&gt;genenveloped Example &lt;a name="wp511755"&gt;&lt;/a&gt;&lt;br /&gt;The code discussed in this section is in the GenEnveloped.java file in the &lt;jwsdp_home&gt;/xmldsig/samples/genenveloped directory. The file on which it operates, envelope.xml, is in the same directory. It generates the file envelopedSignature.xml. &lt;a name="wp512216"&gt;&lt;/a&gt;&lt;br /&gt;To compile and run this sample, execute the following command from the &lt;jwsdp_home&gt;/xmldsig/samples/genenveloped directory:&lt;br /&gt;$ ant &lt;a name="wp512218"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name="wp512220"&gt;&lt;/a&gt;&lt;br /&gt;The sample program will generate an enveloped signature of the document in the file envelope.xml and store it in the file envelopedSignature.xml in the current working directory. &lt;a name="wp511436"&gt;&lt;/a&gt;&lt;br /&gt;Generating an XML Signature &lt;a name="wp511919"&gt;&lt;/a&gt;&lt;br /&gt;This example shows you how to generate an XML Signature using the XML Digital Signature API. More specifically, the example generates an enveloped XML Signature of an XML document. An enveloped signature is a signature that is contained inside the content that it is signing. The example uses DOM (the Document Object Model) to parse the XML document to be signed and a JSR 105 DOM implementation to generate the resulting signature. &lt;a name="wp511740"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.w3.org/TR/xmldsig-core/" target="_blank"&gt;A basic knowledge of XML Signatures and their different components is helpful for understanding this section. See &lt;/a&gt;http://www.w3.org/TR/xmldsig-core/ for more information. &lt;a name="wp511741"&gt;&lt;/a&gt;&lt;br /&gt;Instantiating the Document to be Signed &lt;a name="wp511913"&gt;&lt;/a&gt;&lt;br /&gt;First, we use a JAXP DocumentBuilderFactory to parse the XML document that we want to sign. An application obtains the default implementation for DocumentBuilderFactory by calling the following line of code:&lt;br /&gt;DocumentBuilderFactory dbf =&lt;br /&gt;  DocumentBuilderFactory.newInstance();&lt;a name="wp513167"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511915"&gt;&lt;/a&gt;&lt;br /&gt;We must also make the factory namespace-aware:&lt;br /&gt;dbf.setNamespaceAware(true);&lt;a name="wp511895"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511897"&gt;&lt;/a&gt;&lt;br /&gt;Next, we use the factory to get an instance of a DocumentBuilder, which is used to parse the document:&lt;br /&gt;DocumentBuilder builder = dbf.newDocumentBuilder();&lt;br /&gt;Document doc = builder.parse(new FileInputStream(argv[0]));&lt;a name="wp511899"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511743"&gt;&lt;/a&gt;&lt;br /&gt;Creating a Public Key Pair &lt;a name="wp511875"&gt;&lt;/a&gt;&lt;br /&gt;We generate a public key pair. Later in the example, we will use the private key to generate the signature. We create the key pair with a KeyPairGenerator. In this example, we will create a DSA KeyPair with a length of 512 bytes :&lt;br /&gt;KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");&lt;br /&gt;kpg.initialize(512);&lt;br /&gt;KeyPair kp = kpg.generateKeyPair();&lt;a name="wp511877"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511744"&gt;&lt;/a&gt;&lt;br /&gt;In practice, the private key is usually previously generated and stored in a KeyStore file with an associated public key certificate. &lt;a name="wp511745"&gt;&lt;/a&gt;&lt;br /&gt;Creating a Signing Context &lt;a name="wp511864"&gt;&lt;/a&gt;&lt;br /&gt;We create an XML Digital Signature XMLSignContext containing input parameters for generating the signature. Since we are using DOM, we instantiate a DOMSignContext (a subclass of XMLSignContext), and pass it two parameters, the private key that will be used to sign the document and the root of the document to be signed:&lt;br /&gt;DOMSignContext dsc = new DOMSignContext&lt;br /&gt;  (kp.getPrivate(), doc.getDocumentElement());&lt;a name="wp511866"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511747"&gt;&lt;/a&gt;&lt;br /&gt;Assembling the XML Signature &lt;a name="wp511799"&gt;&lt;/a&gt;&lt;br /&gt;We assemble the different parts of the Signature element into an XMLSignature object. These objects are all created and assembled using an XMLSignatureFactory object. An application obtains a DOM implementation of XMLSignatureFactory by calling the following line of code:&lt;br /&gt;XMLSignatureFactory fac =&lt;br /&gt;  XMLSignatureFactory.getInstance("DOM");&lt;a name="wp511801"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511803"&gt;&lt;/a&gt;&lt;br /&gt;We then invoke various factory methods to create the different parts of the XMLSignature object as shown below. We create a Reference object, passing to it the following:&lt;br /&gt;&lt;a name="wp512044"&gt;&lt;/a&gt;&lt;br /&gt;The URI of the object to be signed (We specify a URI of "", which implies the root of the document.)&lt;a name="wp512049"&gt;&lt;/a&gt;&lt;br /&gt;The DigestMethod (we use SHA1)&lt;a name="wp512050"&gt;&lt;/a&gt;&lt;br /&gt;A single Transform, the enveloped Transform, which is required for enveloped signatures so that the signature itself is removed before calculating the signature value&lt;br /&gt;Reference ref = fac.newReference&lt;br /&gt;  ("", fac.newDigestMethod(DigestMethod.SHA1, null),&lt;br /&gt;    Collections.singletonList&lt;br /&gt;      (fac.newTransform(Transform.ENVELOPED,&lt;br /&gt;        (TransformParameterSpec) null)), null, null);&lt;a name="wp511805"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511811"&gt;&lt;/a&gt;&lt;br /&gt;Next, we create the SignedInfo object, which is the object that is actually signed, as shown below. When creating the SignedInfo, we pass as parameters:&lt;br /&gt;&lt;a name="wp512056"&gt;&lt;/a&gt;&lt;br /&gt;The CanonicalizationMethod (we use inclusive and preserve comments)&lt;a name="wp512059"&gt;&lt;/a&gt;&lt;br /&gt;The SignatureMethod (we use DSA)&lt;a name="wp512060"&gt;&lt;/a&gt;&lt;br /&gt;A list of References (in this case, only one)&lt;br /&gt;SignedInfo si = fac.newSignedInfo&lt;br /&gt;  (fac.newCanonicalizationMethod&lt;br /&gt;    (CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,&lt;br /&gt;      (C14NMethodParameterSpec) null),&lt;br /&gt;    fac.newSignatureMethod(SignatureMethod.DSA_SHA1, null),&lt;br /&gt;    Collections.singletonList(ref));&lt;a name="wp511813"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511819"&gt;&lt;/a&gt;&lt;br /&gt;Next, we create the optional KeyInfo object, which contains information that enables the recipient to find the key needed to validate the signature. In this example, we add a KeyValue object containing the public key. To create KeyInfo and its various subtypes, we use a KeyInfoFactory object, which can be obtained by invoking the getKeyInfoFactory method of the XMLSignatureFactory, as follows:&lt;br /&gt;KeyInfoFactory kif = fac.getKeyInfoFactory();&lt;a name="wp511822"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511824"&gt;&lt;/a&gt;&lt;br /&gt;We then use the KeyInfoFactory to create the KeyValue object and add it to a KeyInfo object:&lt;br /&gt;KeyValue kv = kif.newKeyValue(kp.getPublic());&lt;br /&gt;KeyInfo ki = kif.newKeyInfo(Collections.singletonList(kv));&lt;a name="wp511826"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511829"&gt;&lt;/a&gt;&lt;br /&gt;Finally, we create the XMLSignature object, passing as parameters the SignedInfo and KeyInfo objects that we created earlier:&lt;br /&gt;XMLSignature signature = fac.newXMLSignature(si, ki);&lt;a name="wp511831"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511836"&gt;&lt;/a&gt;&lt;br /&gt;Notice that we haven't actually generated the signature yet; we'll do that in the next step. &lt;a name="wp511749"&gt;&lt;/a&gt;&lt;br /&gt;Generating the XML Signature &lt;a name="wp511787"&gt;&lt;/a&gt;&lt;br /&gt;Now we are ready to generate the signature, which we do by invoking the sign method on the XMLSignature object, and pass it the signing context as follows:&lt;br /&gt;signature.sign(dsc);&lt;a name="wp511789"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511750"&gt;&lt;/a&gt;&lt;br /&gt;The resulting document now contains a signature, which has been inserted as the last child element of the root element. &lt;a name="wp511751"&gt;&lt;/a&gt;&lt;br /&gt;Printing or Displaying the Resulting Document &lt;a name="wp511768"&gt;&lt;/a&gt;&lt;br /&gt;You can use the following code to print the resulting signed document to a file or standard output:&lt;br /&gt;OutputStream os;&lt;br /&gt;if (args.length &gt; 1) {&lt;br /&gt;  os = new FileOutputStream(args[1]);&lt;br /&gt;} else {&lt;br /&gt;  os = System.out;&lt;br /&gt;}&lt;a name="wp511770"&gt; &lt;/a&gt;&lt;br /&gt;TransformerFactory tf = TransformerFactory.newInstance();&lt;br /&gt;Transformer trans = tf.newTransformer();&lt;br /&gt;trans.transform(new DOMSource(doc), new StreamResult(os));&lt;a name="wp511777"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a name="wp511766"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-3202388437216082660?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/3202388437216082660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/01/xml-digital-signature-api-examples.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3202388437216082660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/3202388437216082660'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/01/xml-digital-signature-api-examples.html' title='XML Digital Signature API Examples'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8859863808151385013</id><published>2007-01-08T10:09:00.000-05:00</published><updated>2007-01-08T10:11:02.860-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Parser'/><category scheme='http://www.blogger.com/atom/ns#' term='SAAJ'/><category scheme='http://www.blogger.com/atom/ns#' term='DOM'/><title type='text'>Manipulating Message Content Using SAAJ or DOM APIs</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Manipulating Message Content Using SAAJ or DOM APIs&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="wp80735"&gt;&lt;/a&gt;&lt;br /&gt;Because SAAJ nodes and elements implement the DOM Node and Element interfaces, you have many options for adding or changing message content:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use only DOM APIs.&lt;a name="wp80751"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Use only SAAJ APIs.&lt;a name="wp80752"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Use SAAJ APIs and then switch to using DOM APIs.&lt;a name="wp80753"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Use DOM APIs and then switch to using SAAJ APIs.&lt;a name="wp80754"&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The first three of these cause no problems. After you have created a message, whether or not you have imported its content from another document, you can start adding or changing nodes using either SAAJ or DOM APIs. &lt;a name="wp80915"&gt;&lt;/a&gt;&lt;br /&gt;But if you use DOM APIs and then switch to using SAAJ APIs to manipulate the document, any references to objects within the tree that were obtained using DOM APIs are no longer valid. If you must use SAAJ APIs after using DOM APIs, you should set all your DOM typed references to null, because they can become invalid. For more information about the exact cases in which references become invalid, see the SAAJ API documentation. &lt;a name="wp80897"&gt;&lt;/a&gt;&lt;br /&gt;The basic rule is that you can continue manipulating the message content using SAAJ APIs as long as you want to, but after you start manipulating it using DOM, you should &lt;span style="color:#ff0000;"&gt;&lt;em&gt;&lt;strong&gt;no longer&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt; use SAAJ APIs. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8859863808151385013?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8859863808151385013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/01/manipulating-message-content-using-saaj.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8859863808151385013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8859863808151385013'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/01/manipulating-message-content-using-saaj.html' title='Manipulating Message Content Using SAAJ or DOM APIs'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-1154199228084877567</id><published>2007-01-05T14:08:00.000-05:00</published><updated>2007-01-05T14:27:29.956-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='StAX'/><category scheme='http://www.blogger.com/atom/ns#' term='JAXP'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>JAXP API Summary</title><content type='html'>&lt;img style="WIDTH: 600px; CURSOR: hand" alt="" src="http://www.developer.com/img/articles/2004/08/20/Image1.gif" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Why StAX?&lt;/strong&gt;&lt;br /&gt;The StAX project was spearheaded by BEA with support from Sun Microsystems, and the JSR 173 specification passed the Java Community Process final approval ballot in March, 2004 (http://jcp.org/en/jsr/detail?id=173). The primary goal of the StAX API is to give "parsing control to the programmer by exposing a simple iterator based API. This allows the programmer to ask for the next event (pull the event) and allows state to be stored in procedural fashion." StAX was created to address limitations in the two most prevalent parsing APIs, SAX and DOM.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Streaming Versus DOM&lt;/strong&gt; &lt;a name="wp101467"&gt;&lt;/a&gt;&lt;br /&gt;Generally speaking, there are two programming models for working with XML infosets: document streaming and the document object model (DOM). &lt;a name="wp101478"&gt;&lt;/a&gt;&lt;br /&gt;The DOM model involves creating in-memory objects representing an entire document tree and the complete infoset state for an XML document. Once in memory, DOM trees can be navigated freely and parsed arbitrarily, and as such provide maximum flexibility for developers. However the cost of this flexibility is a potentially large memory footprint and significant processor requirements, as the entire representation of the document must be held in memory as objects for the duration of the document processing. This may not be an issue when working with small documents, but memory and processor requirements can escalate quickly with document size. &lt;a name="wp101484"&gt;&lt;/a&gt;&lt;br /&gt;Streaming refers to a programming model in which XML infosets are transmitted and parsed serially at application runtime, often in real time, and often from dynamic sources whose contents are not precisely known beforehand. Moreover, stream-based parsers can start generating output immediately, and infoset elements can be discarded and garbage collected immediately after they are used. While providing a smaller memory footprint, reduced processor requirements, and higher performance in certain situations, the primary trade-off with stream processing is that you can only see the infoset state at one location at a time in the document. You are essentially limited to the "cardboard tube" view of a document, the implication being that you need to know what processing you want to do before reading the XML document. &lt;a name="wp101483"&gt;&lt;/a&gt;&lt;br /&gt;Streaming models for XML processing are particularly useful when your application has strict memory limitations, as with a cellphone running J2ME, or when your application needs to simultaneously process several requests, as with an application server. In fact, it can be argued that the majority of XML business logic can benefit from stream processing, and does not require the in-memory maintenance of entire DOM trees. &lt;a name="wp101396"&gt;&lt;/a&gt;&lt;br /&gt;Pull Parsing Versus Push Parsing &lt;a name="wp101413"&gt;&lt;/a&gt;&lt;br /&gt;Streaming pull parsing refers to a programming model in which a client application calls methods on an XML parsing library when it needs to interact with an XML infoset--that is, the client only gets (pulls) XML data when it explicitly asks for it. &lt;a name="wp101389"&gt;&lt;/a&gt;&lt;br /&gt;Streaming push parsing refers to a programming model in which an XML parser sends (pushes) XML data to the client as the parser encounters elements in an XML infoset--that is, the parser sends the data whether or not the client is ready to use it at that time. &lt;a name="wp101395"&gt;&lt;/a&gt;&lt;br /&gt;Pull parsing provides several advantages over push parsing when working with XML streams:&lt;br /&gt;&lt;a name="wp101433"&gt;&lt;/a&gt;&lt;br /&gt;With pull parsing, the client controls the application thread, and can call methods on the parser when needed. By contrast, with push processing, the parser controls the application thread, and the client can only accept invocations from the parser.&lt;a name="wp101450"&gt;&lt;/a&gt;&lt;br /&gt;Pull parsing libraries can be much smaller and the client code to interact with those libraries much simpler than with push libraries, even for more complex documents.&lt;a name="wp101532"&gt;&lt;/a&gt;&lt;br /&gt;Pull clients can read multiple documents at one time with a single thread.&lt;a name="wp103456"&gt;&lt;/a&gt;&lt;br /&gt;A StAX pull parser can filter XML documents such that elements unnecessary to the client can be ignored, and it can support XML views of non-XML data.&lt;br /&gt;&lt;a name="wp103858"&gt;&lt;/a&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;StAX Use Cases&lt;/strong&gt; &lt;a name="wp103862"&gt;&lt;/a&gt;&lt;br /&gt;The StAX specification defines a number of uses cases for the API:&lt;br /&gt;&lt;a name="wp103870"&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Data binding&lt;/strong&gt;&lt;br /&gt;&lt;a name="wp103889"&gt;&lt;/a&gt;&lt;br /&gt;Unmarshalling an XML document&lt;/p&gt;&lt;p&gt;Marshalling an XML document&lt;a name="wp103891"&gt;&lt;/a&gt;&lt;br /&gt;Parallel document processing&lt;a name="wp103892"&gt;&lt;/a&gt;&lt;br /&gt;Wireless communication&lt;a name="wp103874"&gt;&lt;/a&gt;&lt;br /&gt;SOAP message processing&lt;br /&gt;&lt;a name="wp103893"&gt;&lt;/a&gt;&lt;br /&gt;Parsing simple predictable structures&lt;a name="wp103894"&gt;&lt;/a&gt;&lt;br /&gt;Parsing graph representations with forward references&lt;a name="wp103895"&gt;&lt;/a&gt;&lt;br /&gt;Parsing WSDL&lt;a name="wp103875"&gt;&lt;/a&gt;&lt;br /&gt;Virtual data sources&lt;br /&gt;&lt;a name="wp103896"&gt;&lt;/a&gt;&lt;br /&gt;Viewing as XML data stored in databases&lt;a name="wp103897"&gt;&lt;/a&gt;&lt;br /&gt;Viewing data in Java objects created by XML data binding&lt;a name="wp103903"&gt;&lt;/a&gt;&lt;br /&gt;Navigating a DOM tree as a stream of events&lt;a name="wp103876"&gt;&lt;/a&gt;&lt;br /&gt;Parsing specific XML vocabularies&lt;a name="wp103877"&gt;&lt;/a&gt;&lt;br /&gt;Pipelined XML processing&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;JAXP API Summary&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The following table summarizes the characteristics of the JAXP API:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr valign="top" bgcolor="#ffff99"&gt;&lt;br /&gt;&lt;td&gt;&lt;em&gt;JAXP API Property&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;StAX&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;SAX&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;DOM&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;TrAX&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;em&gt;API Style&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Pull events; streaming&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Push events; streaming&lt;/td&gt;&lt;br /&gt;&lt;td&gt;In memory tree based&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;XSLT Rule based templates&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;em&gt;Ease of Use&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;High&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;br /&gt;&lt;td&gt;High&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;Medium&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;em&gt;XPath Capability&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;No&lt;/td&gt;&lt;br /&gt;&lt;td&gt;No&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;em&gt;CPU and Memory Utilization&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Good&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Good&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Depends&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;Depends&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;em&gt;Forward Only&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;br /&gt;&lt;td&gt;No&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;No&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;em&gt;Reading&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;em&gt;Writing&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;br /&gt;&lt;td&gt;No&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr valign="top"&gt;&lt;td&gt;&lt;b&gt;&lt;em&gt;Create, Read, Update, Delete (CRUD)&lt;/em&gt;&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;No&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;No&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;b&gt;No&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-1154199228084877567?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/1154199228084877567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/01/jaxp-api-property-stax-sax-dom-trax-api.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1154199228084877567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/1154199228084877567'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/01/jaxp-api-property-stax-sax-dom-trax-api.html' title='JAXP API Summary'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-249135746059909955</id><published>2007-01-04T13:41:00.000-05:00</published><updated>2007-01-04T13:44:31.435-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Service'/><category scheme='http://www.blogger.com/atom/ns#' term='JAXR'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><title type='text'>Requirements of a JAX-WS Endpoint</title><content type='html'>&lt;strong&gt;Requirements of a JAX-WS Endpoint&lt;/strong&gt; &lt;a name="wp144963"&gt;&lt;/a&gt;&lt;br /&gt;JAX-WS endpoints must follow these requirements:&lt;br /&gt;&lt;a name="wp144964"&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The implementing class must be annotated with either the javax.jws.WebService or javax.jws.WebServiceProvider annotation.&lt;/li&gt;&lt;li&gt;The implementing class may explicitly reference an SEI through the endpointInterface element of the @WebService annotation, but is not required to do so. If no endpointInterface is not specified in @WebService, an SEI is implicityly defined for the implementing class.&lt;a name="wp144993"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The business methods of the implementing class must be public, and must not be declared static or final.&lt;a name="wp144994"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Business methods that are exposed to web service clients must be annotated with javax.jws.WebMethod.&lt;a name="wp144998"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Business methods that are exposed to web service clients must have JAX-B-compatible parameters and return types. See &lt;a href="file:///C:/Sandbox/JWSDP/jwstutorial20/doc/JAXBWorks4.html#wp82947"&gt;Default Data Type Bindings&lt;/a&gt;.&lt;a name="wp144968"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The implementing class must not be declared final and must not be abstract.&lt;a name="wp144969"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The implementing class must have a default public constructor.&lt;a name="wp144970"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The implementing class must not define the finalize method.&lt;a name="wp144971"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The implementing class may use the javax.annotation.PostConstruct or javax.annotation.PreDestroy annotations on its methods for lifecycle event callbacks.&lt;a name="wp144972"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The @PostConstruct method is called by the container before the implementing class begins responding to web service clients. &lt;a name="wp144973"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The @PreDestroy method is called by the container before the endpoint is removed from operation. &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-249135746059909955?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/249135746059909955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/01/requirements-of-jax-ws-endpoint.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/249135746059909955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/249135746059909955'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/01/requirements-of-jax-ws-endpoint.html' title='Requirements of a JAX-WS Endpoint'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-8837364239984618610</id><published>2007-01-02T13:21:00.000-05:00</published><updated>2007-01-02T13:23:30.540-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Object Database'/><title type='text'>Native Java &amp; .NET Object Database : Open Source</title><content type='html'>Here is the URL for the Native Java Object Database :&lt;a href="http://www.db4o.com/default.aspx"&gt;http://www.db4o.com/default.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-8837364239984618610?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/8837364239984618610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2007/01/native-java-net-object-database-open.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8837364239984618610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/8837364239984618610'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2007/01/native-java-net-object-database-open.html' title='Native Java &amp; .NET Object Database : Open Source'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-4849549321954886957</id><published>2006-12-28T15:16:00.000-05:00</published><updated>2006-12-28T15:54:34.232-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='UDDI'/><title type='text'>Understanding UDDI and JAXR</title><content type='html'>&lt;span id="intelliTxt"&gt;&lt;h4&gt;UDDI Data Model &lt;/h4&gt; &lt;p&gt;The UDDI data model contains the following main elements:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;code&gt;businessEntity&lt;/code&gt;: Represents a physical company.&lt;/li&gt;&lt;li&gt;&lt;code&gt;businessService&lt;/code&gt;: Represents a service offered by a company.&lt;/li&gt;&lt;li&gt;&lt;code&gt;bindingTemplate&lt;/code&gt;: Instructions on how to invoke a service.&lt;/li&gt;&lt;li&gt;&lt;code&gt;tModel&lt;/code&gt;&gt;: Good luck understanding this! (Just kidding, I will explain this later.)&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span&gt;&lt;span id="intelliTxt"&gt;&lt;pre&gt;&lt;span&gt;&lt;span id="intelliTxt"&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.onjava.com/onjava/2002/02/27/graphics/uddi_relationships.gif"&gt;&lt;img style="cursor: pointer; width: 521px; height: 325px;" src="http://www.onjava.com/onjava/2002/02/27/graphics/uddi_relationships.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;span id="intelliTxt"&gt;Figure 1. The relationship between &lt;code&gt;businessEntity&lt;/code&gt;, &lt;code&gt;businessService&lt;code&gt;, &lt;code&gt;bindingTemplate&lt;/code&gt;, and &lt;code&gt;tModel&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Here is a sample of &lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;tModel&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;/code&gt;&lt;/span&gt;&lt;span id="intelliTxt"&gt;&lt;pre&gt;&lt;code&gt;company name: mycompany&lt;/code&gt;&lt;/pre&gt;&lt;/span&gt; &lt;span id="intelliTxt"&gt;&lt;pre&gt;&lt;code&gt;Service name: helpline&lt;/code&gt;&lt;br /&gt;&lt;code&gt;tModel: key=11 (representing telephoneline),&lt;/code&gt;&lt;/pre&gt;&lt;/span&gt; &lt;span id="intelliTxt"&gt;&lt;pre&gt;&lt;code&gt; name=telephone,&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt; &lt;span id="intelliTxt"&gt;&lt;pre&gt;&lt;code&gt;       description=telephone stuff, url: byjava.com&lt;br /&gt;&lt;br /&gt;binding:&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  accesspoint: 1-800-my-helpline&lt;/code&gt;&lt;br /&gt;&lt;code&gt;     tModelInstanceInfo: 11&lt;/code&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span id="intelliTxt"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.onjava.com/onjava/2002/02/27/graphics/uddi_bindingtemplate_tmodel.gif"&gt;&lt;img style="cursor: pointer; width: 463px; height: 218px;" src="http://www.onjava.com/onjava/2002/02/27/graphics/uddi_bindingtemplate_tmodel.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;pre&gt;&lt;pre&gt;&lt;pre&gt;&lt;pre&gt;&lt;span&gt;&lt;span&gt;&lt;span id="intelliTxt"&gt;&lt;span&gt;&lt;span id="intelliTxt"&gt;&lt;span&gt;&lt;span id="intelliTxt"&gt;&lt;span id="intelliTxt"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.onjava.com/onjava/2002/02/27/graphics/bags.gif"&gt;&lt;span id="intelliTxt"&gt;&lt;img style="cursor: pointer; width: 446px; height: 308px;" src="http://www.onjava.com/onjava/2002/02/27/graphics/bags.gif" alt="" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;&lt;pre&gt;&lt;pre&gt;&lt;h4&gt;&lt;span&gt;&lt;span&gt;&lt;span id="intelliTxt"&gt;&lt;span&gt;&lt;span id="intelliTxt"&gt;&lt;span&gt;&lt;span id="intelliTxt"&gt;&lt;span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.onjava.com/onjava/2002/02/27/graphics/tmodel.gif"&gt;&lt;span id="intelliTxt"&gt;&lt;span id="intelliTxt"&gt;&lt;img style="cursor: pointer; width: 450px; height: 365px;" src="http://www.onjava.com/onjava/2002/02/27/graphics/tmodel.gif" alt="" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;span id="intelliTxt"&gt;UML representation of a &lt;code&gt;tModel&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span id="intelliTxt"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36819724-4849549321954886957?l=netwiser.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netwiser.blogspot.com/feeds/4849549321954886957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netwiser.blogspot.com/2006/12/understanding-uddi-and-jaxr.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4849549321954886957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36819724/posts/default/4849549321954886957'/><link rel='alternate' type='text/html' href='http://netwiser.blogspot.com/2006/12/understanding-uddi-and-jaxr.html' title='Understanding UDDI and JAXR'/><author><name>Netwiser</name><uri>http://www.blogger.com/profile/05090501223127994758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36819724.post-7498568804314706025</id><published>2006-12-15T16:29:00.000-05:00</published><updated>2006-12-15T16:56:23.978-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perfect'/><category scheme='http://www.blogger.com/atom/ns#' term='EJB'/><category scheme='http://www.blogger.com/atom/ns#' term='SessionBean'/><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='EntityBean'/><title type='text'>Tough EJB questions (2)</title><content type='html'>&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Q:What is an EJB Context?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  A: EJBContext is an interface that is implemented by the container, and it is also a part of the bean-container contract. Entity beans use a subclass of EJBContext called EntityContext. Session beans use a subclass called SessionContext. These EJBContext objects provide the bean class with information about its container, the client using the bean and the bean itself. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Q:What are the different kinds of enterprise beans?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  A: &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;&lt;strong&gt;Stateless                                          session bean&lt;/strong&gt;- An instance of                                          these non-persistent EJBs provides a service                                          without storing an interaction or conversation                                          state between methods. Any instance can                                          be used for any client.&lt;br /&gt;                                       &lt;br /&gt;                                        &lt;strong&gt;Stateful session bean-&lt;/strong&gt;                                          An instance of these non-persistent EJBs                                          maintains state across methods and transactions.                                          Each instance is associated with a particular                                          client.&lt;br /&gt;                                       &lt;br /&gt;                                        &lt;strong&gt;Entity bean-&lt;/strong&gt; An instance                                          of these persistent EJBs represents an                                          object view of the data, usually rows                                          in a database. They have a primary key                                          as a unique identifier. Entity bean persistence                                          can be either container-managed or bean-managed.                                         &lt;br /&gt;                                       &lt;br /&gt;                                        &lt;strong&gt;Message-driven&lt;/strong&gt; &lt;strong&gt;bean&lt;/strong&gt;-                                          An instance of these EJBs is integrated                                          with the Java Message Service (JMS) to                                          provide the ability for message-driven                                          beans to act as a standard JMS message                                          consumer and perform asynchronous processing                                          between the server and the JMS message                                          producer.&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;What is Session Bean?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  A: &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;                                        A session bean is a non-persistent object                                        that implements some business logic running                                        on the server. One way to think of a session                                        object is as a logical extension of the                                        client program that runs on the server.&lt;br /&gt;                                     &lt;br /&gt;                                      Session beans are used to manage the interactions                                        of entity and other session beans,access                                        resources, and generally perform tasks on                                        behalf of the client.&lt;br /&gt;                                     &lt;br /&gt;                                      There are two basic kinds of session bean:                                        stateless and stateful.&lt;br /&gt;                                     &lt;br /&gt;                                      Stateless session beans are made up of business                                        methods that behave like procedures; they                                        operate only on the arguments passed to                                        them when they are invoked. Stateless beans                                        are called stateless because they are transient;                                        they do not maintain business state between                                        method invocations.Each invocation of a                                        stateless business method is independent                                        from previous invocations. Because stateless                                        session beans are stateless, they are easier                                        for the EJB container to manage, so they                                        tend to process requests faster and use                                        less resources.&lt;br /&gt;                                     &lt;br /&gt;                                      Stateful session beans encapsulate business                                        logic and state specific to a client. Stateful                                        beans are called "stateful" because                                        they do maintain business state between                                        method invocations, held in memory and not                                        persistent. Unlike stateless session beans,                                        clients do not share stateful beans. When                                        a client creates a stateful bean, that bean                                        instance is dedicated to service only that                                        client. This makes it possible to maintain                                        conversational state, which is business                                        state that can be shared by methods in the                                        same stateful bean.&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;What is Entity Bean?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  A: &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;                                        The entity bean is used to represent data                                        in the database. It provides an object-oriented                                        interface to data that would normally be                                        accessed by the JDBC or some other back-end                                        API. More than that, entity beans provide                                        a component model that allows bean developers                                        to focus their attention on the business                                        logic of the bean, while the container takes                                        care of managing persistence,transactions,                                        and access control.&lt;br /&gt;                                     &lt;br /&gt;                                      There are two basic kinds of entity beans:                                        container-managed ersistence (CMP) andbean-managed                                        persistence (BMP).&lt;br /&gt;                                     &lt;br /&gt;                                      Container-managed persistence beans are                                        the simplest for the bean developer to create                                        and the most difficult for the EJB server                                        to support. This is because all the logic                                        for synchronizing the bean's state with                                        the database is handled automatically by                                        the container. This means that the bean                                        developer doesn't need to write any data                                        access logic, while the EJB server is&lt;br /&gt;                                      supposed to take care of all the persistence                                        needs automatically. With CMP, the container                                        manages the persistence of the entity bean.                                        Vendor tools are used to map the entity                                        fields to the database and absolutely no                                        database access code is written in the bean                                        class.&lt;br /&gt;                                     &lt;br /&gt;                                      The bean-managed persistence (BMP) enterprise                                        bean manages synchronizing its state with                                        the database as directed by the container.                                        The bean uses a database API to read and                                        write its fields to the database, but the                                        container tells it when to do each synchronization                                        operation and manages the transactions for                                        the bean automatically. Bean-managed persistence                                        gives the bean developer the flexibility                                        to perform persistence operations that are                                        too complicated for the container or to                                        use a data source that is not supported                                        by the container.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;What are the methods of Entity Bean?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  A: An entity bean consists of 4 groups of methods:&lt;br /&gt;&lt;br /&gt;  &lt;span style=";font-family:Verdana,Arial,Helvetica,sans-serif;font-size:85%;"  &gt;                                         &lt;strong&gt;1&lt;/strong&gt;. &lt;strong&gt;create methods:&lt;/strong&gt; To create a new instance of a CMP entity bean, and therefore insert data into the database, the create() method on the bean's home interface must be invoked. They look like this: EntityBeanClass ejbCreateXXX(parameters), where EntityBeanClass is an Entity Bean you are trying to instantiate, ejbCreateXXX(parameters) methods are used for creating Entity Bean instances according to the parameters specified and to some programmer-defined conditions.&lt;br /&gt;&lt;br /&gt;   A bean's home interface may declare zero                                        or more create() methods, each of which                                        must have corresponding ejbCreate() and                                        ejbPostCreate() methods in the bean class.                                        These creation methods are linked at run                                        time, so that when a create() method is                                        invoked on the home interface, the container                                        delegates the invocation to the corresponding                                        ejbCreate() and ejbPostCreate() methods                                        on the bean class.&lt;br /&gt;                             &lt;br /&gt;                                  &lt;strong&gt;2&lt;/strong&gt;. &lt;strong&gt;finder methods:&lt;/strong&gt;                                        The methods in the home interface that begin                                        with "find" are called the find                                        methods. These are used to query the EJB                                        server for specific entity beans, based                                        on the name of the method and arguments                                        passed. Unfortunately, there is no standard                                        query language defined for find methods,                                        so each vendor will implement the find method                                        differently. In CMP entity beans, the find                                        methods are not implemented with matching                                        methods in the bean class; containers implement                                        them when the bean is deployed in a vendor                                        specific manner. The deployer will use vendor                                        specific tools to tell the container how                                        a particular find method should behave.                                        Some vendors will use object-relational                                        mapping tools to define the behavior of                                        a find method while others will simply require                                        the deployer to enter the appropriate SQL                                        command.&lt;br /&gt;                             &lt;br /&gt;                                  There are two basic kinds of find methods:                                        single-entity and multi-entity. Single-entity                                        find methods return a remote reference to                                        the one specific entity bean that matches                                        the find request. If no entity beans are                                        found, the method throws an ObjectNotFoundException                                        . Every entity bean must define the single-entity                                        find method with the method name findByPrimaryKey(),                                        which takes the bean's primary key type                                        as an argument.&lt;br /&gt;                             &lt;br /&gt;                                  The multi-entity find methods return a collection                                        ( Enumeration or Collection type) of entities                                        that match the find request. If no entities                                        are found, the multi-entity find returns                                        an empty collection.&lt;br /&gt;                             &lt;br /&gt;                                  &lt;strong&gt;3&lt;/strong&gt;. &lt;strong&gt;remove methods:&lt;/strong&gt;                                        These methods (you may have up to 2 remove                                        methods, or don't have them at all) allow                                        the client to physically remove Entity &lt;/span&gt;&lt;span style=";font-family:Verdana,Arial,Helvetica,sans-serif;font-size:85%;"  &gt;beans                                        by specifying either Handle or a Primary                                        Key for the Entity Bean.&lt;br /&gt;                             &lt;br /&gt;                                  &lt;strong&gt; 4&lt;/strong&gt;. &lt;strong&gt;home methods:&lt;/strong&gt;                                        These methods are designed and implemented                                        by a developer, and EJB specification doesn't                                        have any requirements for them except the                                        need to throw a RemoteException is each                                        home method.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;What is the difference between Container-Managed Persistent (CMP) bean and Bean-Managed Persistent(BMP) ?&lt;/b&gt; - &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;Container-managed                                        persistence beans are the simplest for the                                        bean developer to create and the most difficult                                        for the EJB server to support. This is because                                        all the logic for synchronizing the bean's                                        state with the database is handled automatically                                        by the container. This means that the bean                                        developer doesn't need to write any data                                        access logic, while the EJB server is supposed                                        to take care of all the persistence needs                                        automatically. With CMP, the container manages                                        the persistence of the entity bean. A CMP                                        bean developer doesn't need to worry about                                        JDBC code and transactions, because the                                        Container performs database calls and transaction                                        management instead of the programmer. Vendor                                        tools are used to map the entity fields                                        to the database and absolutely no database                                        access code is written in the bean class.                                        All table mapping is specified in the deployment                                        descriptor. Otherwise, a BMP bean developer                                        takes the load of linking an application                                        and a database on his shoulders.&lt;br /&gt;                                     &lt;br /&gt;                                      The bean-managed persistence (BMP) enterprise                                        bean manages synchronizing its state with                                        the database as directed by the container.                                        The bean uses a database API to read and                                        write its fields to the database, but the                                        container tells it when to do each synchronization                                        operation and manages the transactions for                                        the bean automatically. Bean-managed persistence                                        gives the bean developer the flexibility                                        to perform persistence operations that are                                        too complicated for the container or to                                        use a data source that is not supported                                        by the container.BMP beans are not 100%                                        database-independent, because they may contain                                        database-specific code, but CMP beans are                                        unable to perform complicated DML (data                                        manipulation language) statements. EJB 2.0                                        specification introduced some new ways of                                        querying database (by using the EJB QL -                                        query language).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;What are the callback methods in Entity beans?&lt;/b&gt; - &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;&lt;strong&gt;A:&lt;/strong&gt;&lt;/span&gt;                                     &lt;p&gt;&lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;The                                          bean class defines create methods that                                          match methods in the home interface and                                          business methods that match methods in                                          the remote interface. The bean class also                                          implements a set of callback methods that                                          allow the container to notify the bean                                          of events in its life cycle. The callback                                          methods are defined in the &lt;strong&gt;javax.ejb.EntityBean                                          &lt;/strong&gt;interface that is implemented                                          by all entity beans.The EntityBean interface                                          has the following definition. Notice that                                          the bean class implements these methods.&lt;/span&gt;&lt;/p&gt;                                       &lt;table border="0" width="100%"&gt;                                         &lt;tbody&gt;&lt;tr&gt;                                            &lt;td colspan="2"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;public                                              interface javax.ejb.EntityBean {&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;                                         &lt;/tr&gt;                                         &lt;tr&gt;                                            &lt;td width="10%"&gt; &lt;/td&gt;                                           &lt;td width="90%"&gt;&lt;strong&gt;&lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;public                                              void setEntityContext();&lt;br /&gt;                                            public void unsetEntityContext();&lt;br /&gt;                                            public void ejbLoad();&lt;br /&gt;                                            public void ejbStore();&lt;br /&gt;                                            public void ejbActivate();&lt;br /&gt;                                            public void ejbPassivate();&lt;br /&gt;                                            public void ejbRemove();&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;                                         &lt;/tr&gt;                                         &lt;tr&gt;                                            &lt;td&gt;&lt;strong&gt;&lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;                                           &lt;td&gt; &lt;/td&gt;                                         &lt;/tr&gt;                                       &lt;/tbody&gt;&lt;/table&gt;                                       &lt;p&gt;&lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;                                          The &lt;strong&gt;setEntityContext()&lt;/strong&gt;                                          method provides the bean with an interface                                          to the container called the EntityContext.                                          The EntityContext interface contains methods                                          for obtaining information about the context                                          under which the bean is operating at any                                          particular moment. The EntityContext interface                                          is used to access security information                                          about the caller; to determine the status                                          of the current transaction or to force                                          a transaction rollback; or to get a reference                                          to the bean itself, its home, or its primary                                          key. The EntityContext is set only once                                          in the life of an entity bean instance,                                          so its reference should be put into one                                          of the bean instance's fields if it will                                          be needed later.&lt;br /&gt;                                       &lt;br /&gt;                                        The &lt;strong&gt;unsetEntityContext()&lt;/strong&gt;                                          method is used at the end of the bean's                                          life cycle before the instance is evicted                                          from memory to dereference the EntityContext                                          and perform any last-minute clean-up.                                         &lt;br /&gt;                                       &lt;br /&gt;                                        The &lt;strong&gt;ejbLoad()&lt;/strong&gt; and &lt;strong&gt;ejbStore()&lt;/strong&gt;                                          methods in CMP entities are invoked when                                          the entity bean's state is being synchronized                                          with the database. The ejbLoad() is invoked                                          just after the container has refreshed                                          the bean container-managed fields with                                          its state from the database. The ejbStore()                                          method is invoked just before the container                                          is about to write the bean container-managed                                          fields to the database. These methods                                          are used to modify data as it's being                                          synchronized. This is common when the                                          data stored in the database is different                                          than the data used in the bean fields.                                         &lt;br /&gt;                                       &lt;br /&gt;                                        The &lt;strong&gt;ejbPassivate() &lt;/strong&gt;and                                          &lt;strong&gt;ejbActivate()&lt;/strong&gt; methods                                          are invoked on the bean by the container                                          just before the bean is passivated and                                          just after the bean is activated, respectively.                                          Passivation in entity beans means that                                          the bean instance is disassociated with                                          its remote reference so that the container                                          can evict it from memory or reuse it.                                          It's a resource conservation measure the                                          container employs to reduce the number                                          of instances in memory. A bean might be                                          passivated if it hasn't been used for                                          a while or as a normal operation performed                                          by the container to maximize reuse of                                          resources. Some containers will evict                                          beans from memory, while others will reuse                                          instances for other more active remote                                          references. The ejbPassivate() and ejbActivate()                                          methods provide the bean with a notification                                          as to when it's about to be passivated                                          (disassociated with the remote reference)                                          or activated (associated with a remote                                          reference). &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;What is software architecture of EJB?&lt;/b&gt; - &lt;span style=";font-family:Verdana,Arial,Helvetica,sans-serif;font-size:85%;"  &gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana,Arial,Helvetica,sans-serif;font-size:85%;"  &gt;Session                                          and Entity EJBs consist of 4 and 5 parts               
