<?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-2217566475688601537</id><updated>2012-01-14T08:49:06.322-08:00</updated><category term='SAP Introduction'/><category term='JSF 2.0'/><category term='SAP River'/><category term='Dojo'/><category term='Twitter'/><category term='Template'/><category term='PropertyResolver'/><category term='J4Fry'/><category term='Kostenmanagement'/><category term='JavaServer Faces'/><category term='PaaS'/><category term='WebClient UI Framework'/><category term='WEBCUIF'/><category term='NWBC'/><category term='Comparison'/><category term='Gemeinkostenmanagement'/><category term='Hibernate'/><category term='Latente Steuern'/><category term='AJAX'/><category term='Kotlin'/><category term='SAP PI'/><category term='Vollkostenrechnung'/><category term='Windows'/><category term='HGB'/><category term='RIA'/><category term='BilMoG'/><category term='ABAP Objects'/><category term='BWL'/><category term='IFRS'/><category term='SAP'/><category term='SaaS'/><category term='MissingResourceException'/><category term='Axis'/><category term='Parameter'/><category term='Spring'/><category term='JUnit'/><category term='WebDynpro'/><category term='NetWeaver'/><category term='SAP Business ByDesign'/><category term='SAP Beginner'/><category term='RFC'/><category term='Accounting'/><category term='Subversion'/><category term='Debian'/><category term='Portal'/><category term='commit'/><category term='Kostenrechnung'/><category term='Plankostenrechnung'/><category term='CVS'/><category term='VariableResolver'/><category term='Sybase'/><category term='Soundex'/><category term='Deckungsbeitragsrechnung'/><category term='KLR'/><category term='Action'/><category term='JavaFX'/><category term='Listener'/><category term='Tomcat'/><category term='Teilkostenrechnung'/><category term='Deckungsbeitrag'/><category term='PostgreSQL'/><category term='SAG GUI'/><category term='Database'/><category term='WebBeans'/><category term='Normalkostenrechnung'/><category term='Steuerlatenzen'/><category term='ABAP'/><category term='Istkostenrechnung'/><category term='Eclipse'/><category term='log'/><category term='FuzzyString'/><category term='MyFaces'/><category term='messages'/><category term='Putty'/><category term='Dynpro'/><category term='JSF'/><category term='Ceylon'/><category term='Facelets'/><category term='Subversive'/><category term='Event'/><title type='text'>J4Fry Blog</title><subtitle type='html'>J4Fry Blog
Everything about latest art in software engineering, not only Java.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ganesh</name><uri>http://www.blogger.com/profile/17657313358712817254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_-HiIp0W4YLk/SWkJ_mz0j8I/AAAAAAAAAAM/MGAlg2zd5D8/S220/09-01-09_0742.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-6298108623021300265</id><published>2011-12-06T10:34:00.001-08:00</published><updated>2011-12-07T01:36:05.607-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KLR'/><category scheme='http://www.blogger.com/atom/ns#' term='Vollkostenrechnung'/><category scheme='http://www.blogger.com/atom/ns#' term='BWL'/><category scheme='http://www.blogger.com/atom/ns#' term='Plankostenrechnung'/><category scheme='http://www.blogger.com/atom/ns#' term='Istkostenrechnung'/><category scheme='http://www.blogger.com/atom/ns#' term='Kostenrechnung'/><category scheme='http://www.blogger.com/atom/ns#' term='Teilkostenrechnung'/><category scheme='http://www.blogger.com/atom/ns#' term='Deckungsbeitrag'/><category scheme='http://www.blogger.com/atom/ns#' term='Normalkostenrechnung'/><category scheme='http://www.blogger.com/atom/ns#' term='Gemeinkostenmanagement'/><category scheme='http://www.blogger.com/atom/ns#' term='Deckungsbeitragsrechnung'/><category scheme='http://www.blogger.com/atom/ns#' term='Kostenmanagement'/><title type='text'>Kostenrechnungssysteme mit dem Schwerpunkt Deckungsbeitragsrechnung</title><content type='html'>Projektarbeit zum Thema Kostenrechnungssysteme mit dem Schwerpunkt Deckungsbeitragsrechnung. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;a href="https://docs.google.com/open?id=0B7DDHU_UOraGMDY1YzkxZmItOTM5MS00NGYyLTk4MmQtNTBkNmUzY2JkYzcw" target="_blank"&gt;Download Paper (PDF)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;Hosted on GoogleDocs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;cheers Alex&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-6298108623021300265?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/6298108623021300265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=6298108623021300265&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/6298108623021300265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/6298108623021300265'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2011/12/kostenrechnungssysteme-mit-dem.html' title='Kostenrechnungssysteme mit dem Schwerpunkt Deckungsbeitragsrechnung'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-1241185147490666980</id><published>2011-11-05T03:58:00.000-07:00</published><updated>2011-12-06T10:44:50.555-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BWL'/><category scheme='http://www.blogger.com/atom/ns#' term='IFRS'/><category scheme='http://www.blogger.com/atom/ns#' term='HGB'/><category scheme='http://www.blogger.com/atom/ns#' term='Latente Steuern'/><category scheme='http://www.blogger.com/atom/ns#' term='BilMoG'/><category scheme='http://www.blogger.com/atom/ns#' term='Steuerlatenzen'/><category scheme='http://www.blogger.com/atom/ns#' term='Accounting'/><title type='text'>Latente Steuern im externen Rechnungwesen unter Berücksichtigung von BilMoG</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Belegarbeit zum Thema Latente Steuern unter Berücksichtigung von BilMoG &amp;amp; IFRS.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;a href="https://docs.google.com/open?id=0B7DDHU_UOraGNmIzMjRiMzMtNzEzOC00ZDdhLTllYmUtNGQ0ZWEzM2NmNjMy" target="_blank"&gt;Download Paper (PDF)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;Hosted on GoogleDocs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: large;"&gt;&lt;a href="https://docs.google.com/open?id=0B7DDHU_UOraGMWZiMTk2YWYtY2VjZC00ZTg5LWFjNjgtYjU3Yjk4ZDZiOWFh" target="_blank"&gt;Download Slides (PDF)&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;Hosted on GoogleDocs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;cheers Alex&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-1241185147490666980?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/1241185147490666980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=1241185147490666980&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/1241185147490666980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/1241185147490666980'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2011/11/latente-steuern-im-externen.html' title='Latente Steuern im externen Rechnungwesen unter Berücksichtigung von BilMoG'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-2031538585011931776</id><published>2011-11-04T11:42:00.000-07:00</published><updated>2011-11-11T08:16:12.322-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Objects'/><category scheme='http://www.blogger.com/atom/ns#' term='PaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='Sybase'/><category scheme='http://www.blogger.com/atom/ns#' term='WebDynpro'/><category scheme='http://www.blogger.com/atom/ns#' term='NetWeaver'/><category scheme='http://www.blogger.com/atom/ns#' term='SaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP Beginner'/><category scheme='http://www.blogger.com/atom/ns#' term='WebClient UI Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Dynpro'/><category scheme='http://www.blogger.com/atom/ns#' term='WEBCUIF'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP River'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='RFC'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP Business ByDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='NWBC'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP Introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP PI'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><category scheme='http://www.blogger.com/atom/ns#' term='SAG GUI'/><title type='text'>Einsatz und Entwicklung innerhalb von SAP ERP Systemen auf Basis der SAP NetWeaver-Plattform</title><content type='html'>&lt;b&gt;Usage and development within SAP ERP applications based on the SAP NetWeaver platform&lt;/b&gt;&lt;br /&gt;I wrote a paper about SAP. The paper includes SAP SaaS, SAP PaaS, NetWeaver Architecture, SAP Frontend Technologies, Development within SAP (ABAP &amp;amp; Co.) and describes the Commercial and OpenSource competitors of SAP. The paper is written in german and is a good introduction into SAP especially for SAP beginners.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;a href="https://docs.google.com/open?id=0B7DDHU_UOraGYTM4MWEyMTgtNDNhYy00MGQwLWE4NzAtN2FiYjQ1ZjU3NTU5" target="_blank"&gt;Download Paper (PDF)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;Hosted on GoogleDocs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cheers Alex&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;Abstract&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;In dieser Projektarbeit wird das SAP ERP System auf Basis der SAP NetWeaver-Plattform evaluiert.&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;Die Evaluierung soll einem Unternehmen dienen, dass eine ERP Software im Betrieb zu&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;implementieren plant. Aus diesem Grund werden sowohl die fachlichen Funktionen als auch die&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;technischen Grundlagen eines SAP Systems dargestellt. So kann das Unternehmen seine&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;Anforderungen mit den gegebenen SAP Funktionalitäten abgleichen und überprüfen ob ein SAP&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;System in die technische Systemlandschaft integriert werden kann. Zudem wird auf die Entwicklung&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;und weitere Technologien eingegangen um die Anpassungsfähigkeit eines SAP Systems an die&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;unternehmensspezifischen Eigenheiten zu zeigen. Alternative ERP Systeme sind ein weiterer&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;Bestandteil dieser Projektarbeit. Als Ergebnis der Evaluierung dient diese Ausarbeitung auf deren&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;Grundlage das Unternehmen die Entscheidung für ein SAP ERP System oder für eine der genannten&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;Alternativen trifft.&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;The following project assignment evaluates the SAP ERP systems based on the SAP NetWeaver&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;platform. The evaluation will serve as an overview for a company which wants to implement an ERP&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;system. For that reason the business functionality as well as the technical basis of a SAP system are&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;shown. Afterwards the company will be able to compare its requirements to the given SAP&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;functionality and check whether the SAP system can be integrated into the existing IT landscape.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;Furthermore, the development and additional technologies are described to show the adaptability of a&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;SAP system to company-specific issues. Alternative ERP possibilities are shown as well. This paper&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;can help a company to determine whether to implement a SAP ERP system or whether to implement&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-size: xx-small;"&gt;an alternative ERP system.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-2031538585011931776?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/2031538585011931776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=2031538585011931776&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/2031538585011931776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/2031538585011931776'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2011/11/einsatz-und-entwicklung-innerhalb-von.html' title='Einsatz und Entwicklung innerhalb von SAP ERP Systemen auf Basis der SAP NetWeaver-Plattform'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-7398780676731800334</id><published>2011-10-25T09:13:00.001-07:00</published><updated>2011-11-11T13:24:53.776-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='Kotlin'/><category scheme='http://www.blogger.com/atom/ns#' term='Ceylon'/><title type='text'>((Ceylon vs. Kotlin) vs. Scala) vs. The Rest of the World</title><content type='html'>The blog title sounds a bit like buzzword bingo, doesn't it? Damn, I forgot to mention Gosu. &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are quite many new brand-new-must-have-technologies these days. &lt;br /&gt;&lt;div&gt;There are Android, HTML5, PhoneGap, CoffeeScript, node.js, Websockets, Flex, Adobe Air, REST, JSON, BSON, AMQP, RabbitMQ, JEE6/7, Cloud (you know, everything is in the cloud today), NoSQL, SaaS/PaaS/IaaS, and of course, Ceylon, Kotlin, Gosu, Clojure, Scala, Groovy, JRuby and all the other JVM based programming languages. &lt;/div&gt;&lt;div&gt;So, how should look a really, really cool application? Android Mobile Frontend written in Scala, REST Interface to get some data from a server which is written in Ceylon which access a NoSQL HBase Database via Map/Reduce to read&amp;amp;write Big Data. Our server is hosted on AWS (plain Tomcat, Glassfish or JBoss AS on AWS or should we use OpenShift from RedHat rather than Amazon?), of course. Oops, I forgot a non-smart-phone client. Ok, web-based client written in... hmmm... JSF? GWT? Wicket? JavaFX 2.0? Flex? Silverlight? or just plain HTML5 with a ass kickin' Websocket connection to our server? Ok we pick HTML5. But when I wanna pick HTML5 and I do not wanna write so much JavaScript by myself (even if the new  JavaScript API is pretty cool in HTML5) I am gonna need a full-fledged JavaScript Library/Toolkit. No problem at all. What do you want? jQuery, dojo, ExJS, MooTools, scriptaculous or YUI? Whatever... just pick jQuery as everybody does... (BTW I did not mention AJAX because it is not buzzword-noteworthy anymore. Even Comet/Bayeux got the kiss of death from Websockets...)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Puhhh, buzzword scrabble finished and application architecture defined. Nope. We have made a mistake. There isn't a compiler for Ceylon yet. Someone told me Ceylon is a vaporware until now. Ok, replace Ceylon with Kotlin. Ops, there isn't a compiler for Kotlin as well. Doesn't matter let's assume that I can run my Ceylon/Kotlin code (instead of just write them down on some slides). What should we choose? Ceylon or Kotlin? In the following you will find a short feature comparison. It is a non-offical and subjective comparison from my point of view. It relies on the information which is available until now. Found any mistakes? Just leave a comment!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enough said. Here is the comparison. BTW I did not include Scala because it is "to academic/function/not functional enough/..." ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;Comparison is not finished yet. I will update it from time to time.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;span class="Apple-style-span"&gt;&lt;/span&gt;&lt;br /&gt;&lt;table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.4pt 1.4pt 1.4pt 1.4pt; mso-yfti-tbllook: 1184;"&gt;  &lt;tbody&gt;&lt;tr&gt;   &lt;td style="border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div align="center" class="MsoNormalCxSpFirst" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt; text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: 12pt;"&gt;Ceylon&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div align="center" class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt; text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: 12pt;"&gt;Kotlin&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Source Code organization (Java's   packages)&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;derived from the file path of the   source code file e.g. Class &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;Person&lt;/span&gt;&lt;/span&gt; in package &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;org.j4fry.mypkg&lt;/span&gt;&lt;/span&gt; must be in   directory &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;org/j4fry/mypkg/Person.ceylon&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;import org.j4fry.mypkg { Person }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;uses namespaces e.g.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;namespace org.j4fry.Person&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;with import statement&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;import org.j4fry.Person&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Semicolons&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;mandatory&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;optional&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Return types (Java's void)&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;uses &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;void&lt;/span&gt;&lt;/span&gt; keyword which is, in fact,   a return type named &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;Void&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;shared abstract class Void() of Object|Nothing {}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;uses &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;Unit&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;Unit&lt;/span&gt;&lt;/span&gt; is a tuple of zero   components (&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;Tuple0&lt;/span&gt;&lt;/span&gt;)   e.g.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;fun myFunc( ) : Unit {… }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;String interpolation&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;…&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;shared variable Natural c := 10&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;…&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;writeLine("Value of c " c   "!");&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;var c = 10&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;print("Value of c ${c} !")&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Using types and type inference&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;like Java&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;String s = "Ceylon"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;With type inference&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;local s = "Ceylon"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Like Scala:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;val c : Int&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;With type inference&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;val c = 10&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Mutable and Immutable &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;Mutable: local, variable (with := assignment) &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;class C { shared &lt;b&gt;variable&lt;/b&gt;   Natural c := 10 }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;Immutable: without variable&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;class C { shared Natural c = 10; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Mutable: &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;public class C(){private var c : Int = 0;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Immutable: &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;val&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;public class C(){private val c : Int = 0;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Fields and Properties (Java's   Getter&amp;amp;Setter Freak-Show)&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Actually there are only   properties (like in C#)&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;public class C() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;    public val mutable_name : String&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;    public var immutable_name : String&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;      get() = …&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;      set(value) { $immutable_name = value }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Accessability, Visibility &amp;amp;   Modifiers (Java's public, protected, private and default scope)&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;Doesn't know the usual modifiers. Uses instead the &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;shared&lt;/span&gt;&lt;/span&gt; keyword   which controls the visibility of attributes, methods, classes, etc. depending   on the context e.g.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;non-shared class &lt;span style="font-family: Wingdings;"&gt;à&lt;/span&gt; class only visible to   classes in the same package&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;shared class &lt;span style="font-family: Wingdings;"&gt;à&lt;/span&gt; class visible to other   packages&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;b&gt;&lt;span style="font-size: 9pt;"&gt;shared&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt; class C( ) { … }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Uses Java's access modifiers &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;private&lt;/span&gt;&lt;/span&gt;, &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;protected&lt;/span&gt;&lt;/span&gt; and   &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;public&lt;/span&gt;&lt;/span&gt;.   Additionally &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;internal&lt;/span&gt;&lt;/span&gt;   modifier. Probably &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;internal&lt;/span&gt;&lt;/span&gt;   works like the C# internal modifier e.g. visible in same namespace?&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Enums (Java's enum)&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;Not included. Use &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;of&lt;/span&gt;&lt;/span&gt; clause (mention subtypes in   the base-class signature) in combination with anonymous classes.&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Like Java enums on steroids. You   can subclass enums in Kotlin and there are some other enum features in Kotlin   e.g. member overriding, enum pattern-matchin, etc.&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Inheritance&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;Uses the &lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;extends&lt;/span&gt;&lt;/span&gt; clause in class signature but different   annotations to declare overridable and overridden methods.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;class Base( ) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;  shared &lt;b&gt;&lt;u&gt;default&lt;/u&gt;&lt;/b&gt; String doSth() {…}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;class Subclass() &lt;b&gt;&lt;u&gt;extends&lt;/u&gt;&lt;/b&gt;   Base() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;  shared &lt;b&gt;&lt;u&gt;actual&lt;/u&gt;&lt;/b&gt; String doSth() {…}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Overloading&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;Not supported. Use optional parameters instead. Comment   of Kotlin FAQ: "&lt;i&gt;Ceylon is   Java-incompatible, because it does not support overloading&lt;/i&gt;"&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td colspan="2" style="background: #D9D9D9; border-top: none; border: solid windowtext 1.0pt; mso-background-themecolor: background1; mso-background-themeshade: 217; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 470.8pt;" valign="top" width="628"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;Interfaces&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 236.3pt;" valign="top" width="315"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-layout-grid-align: none; mso-line-height-alt: 0pt; text-autospace: none;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 1.4pt 1.4pt 1.4pt 1.4pt; width: 234.5pt;" valign="top" width="313"&gt;&lt;div class="MsoNormalCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-line-height-alt: 0pt;"&gt;&lt;span class="Code"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are some heated discussions about Ceylon and Kotline already. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pro Ceylon&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://planet.jboss.org/post/everything_that_s_wrong_with_the_post_java_language_debate_in_one_easy_blog_post"&gt;http://planet.jboss.org/post/everything_that_s_wrong_with_the_post_java_language_debate_in_one_easy_blog_post&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.infoq.com/news/2011/04/ceylon"&gt;http://www.infoq.com/news/2011/04/ceylon&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Contra Ceylon&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://ochsenreither.posterous.com/scala-kotlin-ceylon-lets-start-by-being-hones"&gt;http://ochsenreither.posterous.com/scala-kotlin-ceylon-lets-start-by-being-hones&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://dgronau.wordpress.com/2011/07/20/wasch-mich-aber-mach-mich-nicht-nass/"&gt;http://dgronau.wordpress.com/2011/07/20/wasch-mich-aber-mach-mich-nicht-nass/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://lachlanrambling.blogspot.com/2011/04/ceylon-interesting-for-wrong-reasons.html"&gt;http://lachlanrambling.blogspot.com/2011/04/ceylon-interesting-for-wrong-reasons.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the following websites you could find the resources which I have used to create the above mentioned comparison:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Resources Ceylon&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://relation.to/19161.lace"&gt;http://relation.to/19161.lace&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://relation.to/service/File/19159"&gt;http://relation.to/service/File/19159&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://relation.to/service/File/19160"&gt;http://relation.to/service/File/19160&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://relation.to/Tutorials/IntroductionToCeylon"&gt;http://relation.to/Tutorials/IntroductionToCeylon&lt;/a&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/open?id=0B7DDHU_UOraGNDdiYzYwYTctMTJiMC00YjAwLWFhZjktNGFiZTQ4MjAzNzY1"&gt;https://docs.google.com/open?id=0B7DDHU_UOraGNDdiYzYwYTctMTJiMC00YjAwLWFhZjktNGFiZTQ4MjAzNzY1&lt;/a&gt;&amp;nbsp;(just a copy/paste PDF version of Gavin's tutorial)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Resources Kotlin&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://confluence.jetbrains.net/display/Kotlin/Welcome"&gt;http://confluence.jetbrains.net/display/Kotlin/Welcome&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hopefully you have learnt to understand the irony and sarcasm at the beginning of this blog post. It doesn't matter which programming language you choose. It is only important to try out new things because&lt;i&gt; &lt;span class="Apple-style-span"&gt;"Standstill".means("Falling Behind")&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;cheers Alex&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-7398780676731800334?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/7398780676731800334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=7398780676731800334&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/7398780676731800334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/7398780676731800334'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2011/10/ceylon-vs-kotlin-vs-scala-vs-rest-of_25.html' title='((Ceylon vs. Kotlin) vs. Scala) vs. The Rest of the World'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-8458750654500195529</id><published>2010-01-13T13:40:00.000-08:00</published><updated>2010-01-13T13:44:59.314-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='J4Fry'/><title type='text'>J4Fry on Twitter</title><content type='html'>&lt;span style="font-family: arial;font-family:verdana;" &gt;J4Fry is now available on &lt;/span&gt;&lt;a style="font-family: arial;" href="http://twitter.com/"&gt;Twitter&lt;/a&gt;&lt;span style="font-family: arial;font-family:verdana;" &gt;. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;font-family:verdana;" &gt;Just follow @&lt;/span&gt;&lt;a style="font-family: arial;" href="http://twitter.com/J4Fry"&gt;J4Fry&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-8458750654500195529?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/8458750654500195529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=8458750654500195529&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/8458750654500195529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/8458750654500195529'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2010/01/j4fry-on-twitter.html' title='J4Fry on Twitter'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-2609537802160591161</id><published>2009-12-14T08:00:00.000-08:00</published><updated>2009-12-14T08:08:01.790-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CVS'/><category scheme='http://www.blogger.com/atom/ns#' term='messages'/><category scheme='http://www.blogger.com/atom/ns#' term='log'/><category scheme='http://www.blogger.com/atom/ns#' term='commit'/><title type='text'>CVS log commit messages</title><content type='html'>Every now and then when making a release I need an alphabetical list of all CVS commit messages since a particular previous tag. This is what I use (for tag 'mytag'):&lt;br /&gt;&lt;br /&gt; cvs log -rmytag:: -S -N | grep '^RCS\|^Working\|^head\|^branch\|^locks\|^access\|^keyword\|^total\|^description\|^-------\|^========\|^revision\|^\?\|^date\|^$\|\*\*\*' -v | sort -u&lt;br /&gt;&lt;br /&gt;Is there anybody on this planet with a more elegant solution?&lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;Ganesh&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-2609537802160591161?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/2609537802160591161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=2609537802160591161&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/2609537802160591161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/2609537802160591161'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/12/cvs-log-commit-messages.html' title='CVS log commit messages'/><author><name>Ganesh</name><uri>http://www.blogger.com/profile/17657313358712817254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_-HiIp0W4YLk/SWkJ_mz0j8I/AAAAAAAAAAM/MGAlg2zd5D8/S220/09-01-09_0742.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-3941526343330847384</id><published>2009-06-23T06:38:00.000-07:00</published><updated>2009-06-23T08:37:30.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='Listener'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>Hibernate Event Listeners with Spring</title><content type='html'>&lt;span style="font-family:verdana;"&gt;You can configure your Hibernate event listeners via your spring-context.xml.&lt;br /&gt;When you declare your Bean from type org.springframework.orm.hibernate3.LocalSessionFactoryBean you can initilize the property "eventListeners". This attribute is from type Map. The key defines the type of the event listeners (e.g. flush, load, delete, etc.). The value defines the corresponding class which implements the EventListener interface or extend the DefaultEventListener implementation class.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;"&gt;Sample of your context.xml&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;bean id=&amp;quot;sessionFactory&amp;quot; class=&amp;quot;org.springframework.orm.hibernate3.LocalSessionFactoryBean&amp;quot;&amp;gt;&lt;br /&gt; ...&lt;br /&gt; &amp;lt;property name=&amp;quot;eventListeners&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;map&amp;gt;  &lt;br /&gt;   &amp;lt;entry key=&amp;quot;flush&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;bean class=&amp;quot;org.j4fry.hibernate.eventlisteners.FlushEventListener&amp;quot; /&amp;gt;&lt;br /&gt;   &amp;lt;/entry&amp;gt;&lt;br /&gt;  &amp;lt;/map&amp;gt;&lt;br /&gt; &amp;lt;/property&amp;gt;  &lt;br /&gt; ...&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;span style="font-weight: bold;font-family:verdana;"&gt;Sample of a FlushEventListener&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;package org.j4fry.hibernate.eventlisteners;&lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt;import org.hibernate.HibernateException;&lt;br /&gt;import org.hibernate.event.FlushEvent;&lt;br /&gt;import org.hibernate.event.def.DefaultFlushEventListener;&lt;br /&gt;&lt;br /&gt;public class FlushEventListener extends DefaultFlushEventListener {&lt;br /&gt;    public void onFlush(FlushEvent fe) throws HibernateException {&lt;br /&gt;        super.onFlush(fe);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;span style="font-weight: bold;font-family:verdana;width:200px"&gt;List of keys and the corresponding Interfaces and implementation-classes&lt;/span&gt;&lt;table style="font-family:verdana;border:0px"&gt;&lt;tr&gt;&lt;th&gt;Map-Key&lt;/th&gt;&lt;th&gt;Interface&lt;/th&gt;&lt;th&gt;Default implementation class&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;auto-flush&lt;/td&gt;&lt;td&gt;AutoFlushEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;delete&lt;/td&gt;&lt;td&gt;DeleteEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dirty-check&lt;/td&gt;&lt;td&gt;DirtyCheckEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;evict&lt;/td&gt;&lt;td&gt;EvictEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;flush-entity&lt;/td&gt;&lt;td&gt;FlushEntityEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;flush&lt;/td&gt;&lt;td&gt;FlushEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;load-collection&lt;/td&gt;&lt;td&gt;InitializeCollectionEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;load&lt;/td&gt;&lt;td&gt;LoadEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;lock&lt;/td&gt;&lt;td&gt;LockEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;merge&lt;/td&gt;&lt;td&gt;MergeEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;create-onflush&lt;/td&gt;&lt;td&gt;PersistEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;post-delete&lt;/td&gt;&lt;td&gt;PostDeleteEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;post-insert&lt;/td&gt;&lt;td&gt;PostInsertEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;post-load&lt;/td&gt;&lt;td&gt;PostLoadEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;post-update&lt;/td&gt;&lt;td&gt;PostUpdateEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;pre-delete&lt;/td&gt;&lt;td&gt;PreDeleteEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;pre-insert&lt;/td&gt;&lt;td&gt;PreInsertEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;pre-load&lt;/td&gt;&lt;td&gt;PreLoadEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;pre-update&lt;/td&gt;&lt;td&gt;PreUpdateEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;refresh&lt;/td&gt;&lt;td&gt;RefreshEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;replicate&lt;/td&gt;&lt;td&gt;ReplicateEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;save-update&lt;/td&gt;&lt;td&gt;SaveOrUpdateEventListener&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-3941526343330847384?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/3941526343330847384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=3941526343330847384&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/3941526343330847384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/3941526343330847384'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/06/hibernate-event-listeners-with-spring.html' title='Hibernate Event Listeners with Spring'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-1110388217110554291</id><published>2009-06-20T11:04:00.000-07:00</published><updated>2009-07-04T03:52:32.056-07:00</updated><title type='text'>IE8 script cache and AJAX script replace</title><content type='html'>Today I tried debugging the MyFaces 2.0 AJAXS scripts in IE8. The debugger is quite nice. The hard side came in when I starting changing the scripts and tried testing my new script versions. IE8 prooved to be a resilient beast like it's anchestors and insisted on running an old script version. The nice button "clear browser cache" in the developer tools didn't do anything. What finally helped was the first menu option in menu "cache" - in german it says: Immer vom Server aktualisieren.&lt;br /&gt;Now that I could step into my Javascript code things got even weirder. I had a simple&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;span id="test"&amp;gt;&amp;lt;script ... &amp;gt;&amp;lt;/span&amp;gt;&lt;/pre&gt;&lt;br /&gt;construction and I tried do replace element "test" with an AJAX call. So what do you think happened? I did:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;item.insertAdjacentHTML('beforeBegin', '&amp;lt;span id="test"&amp;gt;&amp;lt;script ... &amp;gt;&amp;lt;/span&amp;gt;');&lt;/pre&gt;&lt;br /&gt;and then checked item.previousSibling. I turned out IE8 had inserted:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;span id="test"&amp;gt;&amp;lt;/span&amp;gt;&lt;/pre&gt;&lt;br /&gt;It just left out my new script. I changed the HTML code to look like (don't ask me what gave me the idea to do so, years of suffering train intuition):&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;span id="test"&amp;gt;&lt;br /&gt;&amp;lt;input type="hidden" /&amp;gt;&lt;br /&gt;&amp;lt;script ... &amp;gt;&lt;br /&gt;&amp;lt;/span&amp;gt;&lt;/pre&gt;&lt;br /&gt;and suddenly IE inserted it all like it should. If you want to know which tricks are necessary to trigger script execution have a look at the MyFaces repository:&lt;br /&gt;&lt;a href="http://svn.apache.org/repos/asf/myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/_util/_Utils.js"&gt;http://svn.apache.org/repos/asf/myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/_util/_Utils.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's interesting code - external and embedded scripts need to be treated differently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-1110388217110554291?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/1110388217110554291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=1110388217110554291&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/1110388217110554291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/1110388217110554291'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/06/ie8-script-cache-and-ajax-script.html' title='IE8 script cache and AJAX script replace'/><author><name>Ganesh</name><uri>http://www.blogger.com/profile/17657313358712817254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_-HiIp0W4YLk/SWkJ_mz0j8I/AAAAAAAAAAM/MGAlg2zd5D8/S220/09-01-09_0742.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-5970839732645924889</id><published>2009-06-19T02:11:00.000-07:00</published><updated>2009-06-19T06:01:53.080-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>HowTo integrate JUnit and WebBeans</title><content type='html'>&lt;span style="font-family:verdana;"&gt;WebBeans provides an easy way to integrate it with JUnit.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;I use for the examples WebBeans 1.0.0.PREVIEW1 and Junit4.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Follw these steps to integrate JUnit and WebBeans.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;1. Create a base class called AbstractWebBeansContextTest&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;This super class contains the setup of the WebBeans Context and makes the WebBeans Manager available for its subclasses. You have to add the webbeans-se.jar to your build path. This jar provides the possibility to initialize the WebBeans context within a SE (Java StandardEdtion) environment.&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;import javax.inject.manager.Manager;&lt;br /&gt;import org.jboss.webbeans.CurrentManager;&lt;br /&gt;import org.jboss.webbeans.environment.se.StartMain;&lt;br /&gt;&lt;br /&gt;public abstract class AbstractWebBeansContextTest {&lt;br /&gt;    public static final Manager manager;&lt;br /&gt;    static {&lt;br /&gt;        StartMain.main(new String[]{});&lt;br /&gt;        manager = CurrentManager.rootManager();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;2. Put a beans.xml into the root-source directory of your testing project&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;In that beans.xml you could define your testing deployment types (e.g. @Mock, etc.). In our case this beans.xml left blank.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;3. Create your test class&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Create a new test class which is a subclass of AbstractWebBeansContextTest. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Annotate a method with @BeforeClass and initialize your WebBeans which you wan to use in your test case.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Annotate some other methods with @Test and use your initialized WebBeans.&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;public class MyTestCase extends AbstractWebBeansContextTest {&lt;br /&gt;&lt;br /&gt;    public static MyService service;&lt;br /&gt;&lt;br /&gt;    @BeforeClass&lt;br /&gt;    public static void startup() {&lt;br /&gt;        service = manager.getInstanceByType(MyService.class);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testServiceMethod() throws Exception {&lt;br /&gt;        ...&lt;br /&gt;        service.myServiceMethod();&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-5970839732645924889?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/5970839732645924889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=5970839732645924889&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/5970839732645924889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/5970839732645924889'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/06/howto-integrate-junit-and-webbeans.html' title='HowTo integrate JUnit and WebBeans'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-7675059159667198463</id><published>2009-06-17T00:53:00.000-07:00</published><updated>2009-06-19T02:11:32.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dojo'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><title type='text'>JSF 2.0 and dojo create NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7 on Safari</title><content type='html'>&lt;span style="font-family:verdana;"&gt;When testing our &lt;a href="http://j4fry.org/dojoFacelets.shtml"&gt;dojo facelets&lt;/a&gt; examples in Safari I realized that they don't work with Mojarra 2.0. After some investigation it turned out that Mojarra 2.0 sends a reponse-header Content-Type: application/xhtml+xml thus triggering a bug in Safari.With JSF 1.2 (also with Facelets) it was always Content-Type: text/html. The result is that Safari throws NO_MODIFICATION_ALLOWED_ERR on some DOM operations that are needed from the dojo side.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; I added a Listener to set the Content-Type to text/html and - helas! - it works just fine.&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;public void beforePhase(PhaseEvent event) {&lt;br /&gt;   FacesContext context = FacesContext.getCurrentInstance();&lt;br /&gt;   ExternalContext extContext = context.getExternalContext();&lt;br /&gt;   Object response = extContext.getResponse();&lt;br /&gt;   if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) {&lt;br /&gt;        String contentType = "text/html; charset=UTF-8";&lt;br /&gt;      if (response instanceof ServletResponse) {&lt;br /&gt;         ((ServletResponse) response).setContentType(contentType);&lt;br /&gt;      } else if (response instanceof RenderResponse) {&lt;br /&gt;         ((RenderResponse) response).setContentType(contentType);&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-7675059159667198463?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/7675059159667198463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=7675059159667198463&amp;isPopup=true' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/7675059159667198463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/7675059159667198463'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/06/jsf-20-and-dojo-create.html' title='JSF 2.0 and dojo create NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7 on Safari'/><author><name>Ganesh</name><uri>http://www.blogger.com/profile/17657313358712817254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_-HiIp0W4YLk/SWkJ_mz0j8I/AAAAAAAAAAM/MGAlg2zd5D8/S220/09-01-09_0742.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-6904936327897832991</id><published>2009-06-16T08:12:00.000-07:00</published><updated>2009-06-17T06:11:59.589-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><title type='text'>JSF 2.0 AJAX overview</title><content type='html'>&lt;span style="font-family: verdana;"&gt; Many AJAX JSF frameworks are on the market - but the moment you start combining them you may get random results due to incompatibilities. JSF 2.0 will help with this! Specifying the AJAX API will help assemble the different approaches under one roof. The spec (&lt;/span&gt;&lt;a style="font-family: verdana;" href="http://jcp.org/en/jsr/detail?id=314"&gt;JSR-314&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;) defines an f:ajax tag as well as a javscript API together with an AJAX enhanced JSF lifecycle. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt; I helped implement one of the numerous AJAX JSF approaches for years (the &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.j4fry.org/jsfAjax.shtml"&gt;fry:ajax&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; tag from J4Fry) and during the last months this approach was integrated into Apache MyFaces 2.0 while adapting it's interfaces to the new spec. The spec covers a lot of the basic features in a generic and flexible way. Btw.: MyFaces 2.0 is on its way, we're currently gluing everything together and I'm &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.nabble.com/-MyFaces-2.0--discussion-on-alpha-plans-td23932255.html"&gt;hoping for an alpha by end of august&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt; The most basic part of an AJAX implementation is replacing parts of the document. These are the features the JSF 2.0 API provides: &lt;/span&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;execute - The components that will be processed on the server in a blank separated list. Only the components named within this parameter get their decode, validate and updateModel methods called during phase 2-4. There is an @all keyword you can use to process the entire component tree. &lt;/li&gt;&lt;li&gt; render - The components that will be rendered and replaced within the HTML page in a blank separated list. &lt;/li&gt;&lt;li&gt; onevent - A JS callback that is triggered with three different events: &lt;ul&gt;&lt;li&gt;         begin - occurs immediately before the request is sent&lt;br /&gt;&lt;/li&gt;&lt;li&gt;         complete - occurs after the AJAX request has completed but before DOM manipulation has taken place&lt;br /&gt;&lt;/li&gt;&lt;li&gt;         success - occurs after DOM manipulation has taken place (only for successfull request, else see onerror) &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; onerror - A JS callback that is triggered when the server signalizes that an error has occured. &lt;/li&gt;&lt;li&gt; params - An object that may include additional parameters to include in the request. &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: verdana;"&gt; There have been discussions on both the MyFaces and Mojarra &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.nabble.com/-Fwd%3A-Re%3A-f%3Aajax-not-working-inside-composite-components---td23527093.html#a23570812"&gt;mailing lists&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; on the nature of the ids in the execute and render parameters. Are they HTML ids or component ids? Here's the truth: The f:ajax tag can take either component ids that resolve relative to the nearest naming container or HTML ids. There is an algorithm that tries both. The procedural interface jsf.ajax.request(source, event, {execute: ..., render: ...}) requires HTML ids. The f:ajax tag will resolve the component and generate a behaviour that is in fact a call to jsf.ajax.request.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt; f:ajax provides three more attributes that offer JSF specific enhancements: &lt;/span&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt; disabled - Indicates whether the AJAX behavior script should not be rendered. &lt;/li&gt;&lt;li&gt; listener - A method binding to execute when the AJAX request is processed on the server. &lt;/li&gt;&lt;li&gt; immediate - same as the attribute you know from the standard JSF action sources. &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: verdana;"&gt; For Tomahawk 2.0 we are preparing a t:ajax tag that will include a bunch of extra options. Implementation will happen in J4Fry JSF 2.0 with a fry:ajax tag (targeted for end of juli) which will be repackaged for Tomahawk 2.0 when it is ready. This is the list of extra options we want to support: &lt;/span&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt; timout - How long to wait for the HTTP response before aborting the request. &lt;/li&gt;&lt;li&gt; delay - How long to wait before issuing a request (helpfull with onkeyup or mouse move events to avoid tons of requests). &lt;/li&gt;&lt;li&gt; queuesize - Number of requests to queue (discard the oldest when the queue is full and a new one arrives). &lt;/li&gt;&lt;li&gt;partial submit - The current spec requires submission of the entire form though only the elements named in the execute parameter are being processed. Setting partial submit (or pps) to true could reduce the submit volume to the actually processed values. &lt;/li&gt;&lt;li&gt; disable - HTML id's of the components to disable while the request is running (can be implemented via onevent). &lt;/li&gt;&lt;li&gt; loadingbar - HTML id of an img tag to make visible while the request is running (can also be implemented via onevent). &lt;/li&gt;&lt;li&gt;errorhandling for errors that occur within the javascript - can be done with the onerror parameter, but the spec doesn't mention this use. &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: verdana;"&gt;Just in case you've made it up to here (which would only happen if you are really deep into JSF and AJAX technology) you will be keen to know whether JSF 2.0 AJAX will do an auto eval on incoming scripts. If you rerender a portion of your markup that contains a script then auto eval will execute the newly arrived scripts. The spec doesn't mention this issue, Mojarra 2.0 (in it's current beta state) doesn't do auto eval but MyFaces 2.0 will. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-6904936327897832991?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/6904936327897832991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=6904936327897832991&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/6904936327897832991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/6904936327897832991'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/06/jsf-20-ajax-overview.html' title='JSF 2.0 AJAX overview'/><author><name>Ganesh</name><uri>http://www.blogger.com/profile/17657313358712817254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_-HiIp0W4YLk/SWkJ_mz0j8I/AAAAAAAAAAM/MGAlg2zd5D8/S220/09-01-09_0742.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-7147996391710188959</id><published>2009-06-04T22:35:00.000-07:00</published><updated>2009-06-05T14:35:31.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>HowTo integrate Apache Axis and WebBeans</title><content type='html'>&lt;span style="font-family: verdana;"&gt;IMO WebBeans becomes a pretty cool dependency injection framework for Java. It works in a type-safe way (greetz to Spring ;-)) by using annotations. It provides Interceptors, Decorators and Event-Processing as well.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;On the other hand Axis is a powerful framework to implement WebServices.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;If you want to use the WebBeans benefits in your Axis Services you have to integrate both technologies. Axis provides two simple ways to do this:&lt;/span&gt;&lt;br /&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;with a custom MessageReceiver&lt;/li&gt;&lt;li&gt;with a ServiceObjectSupplier&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family: verdana;"&gt;So lets integrate WebBeans into Axis.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;I'm running on Tomcat 6.0.18 with Apache Axis2 1.4.1 and WebBeans 1.0.0. Preview1.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Create a WebBeans integration class&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;package org.j4fry.webbeans;&lt;br /&gt;import javax.inject.manager.Manager;&lt;br /&gt;import org.apache.axis2.AxisFault;&lt;br /&gt;import org.apache.axis2.Constants;&lt;br /&gt;import org.apache.axis2.description.AxisService;&lt;br /&gt;import org.apache.axis2.description.Parameter;&lt;br /&gt;import org.jboss.webbeans.CurrentManager;&lt;br /&gt;&lt;br /&gt;public abstract class WebBeansIntegration {&lt;br /&gt;    public static Object createInstance(AxisService axisService) throws AxisFault {&lt;br /&gt;        Parameter parameterServiceClass = axisService.getParameter(Constants.SERVICE_CLASS);&lt;br /&gt;        Class serviceClass = null;&lt;br /&gt;        try {&lt;br /&gt;            serviceClass = Class.forName(parameterServiceClass.getValue().toString());&lt;br /&gt;        } catch (ClassNotFoundException e) {&lt;br /&gt;          throw new AxisFault("There's not valid serviceClass specified", "serviceClass");&lt;br /&gt;        }&lt;br /&gt;        Manager manager = CurrentManager.rootManager();&lt;br /&gt;        return manager.getInstanceByType(serviceClass);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Possibility 1: Adjust Axis to use this integration class via a &lt;span style="font-style: italic;"&gt;custom Message Receiver&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;package org.j4fry.webbeans;&lt;br /&gt;import org.apache.axis2.AxisFault;&lt;br /&gt;import org.apache.axis2.context.MessageContext;&lt;br /&gt;&lt;br /&gt;public class CustomMessageReceiver extends org.apache.axis2.rpc.receivers.RPCMessageReceiver {&lt;br /&gt;    @Override&lt;br /&gt;    protected Object makeNewServiceObject(MessageContext msgCtx) throws AxisFault {&lt;br /&gt;        return WebBeansIntegration.createInstance(msgCtx.getAxisService());&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Possibility 2: Adjust Axis to use this integration class via &lt;span style="font-style: italic;"&gt;ServiceObjectSupplier&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;package org.j4fry.webbeans;&lt;br /&gt;import org.apache.axis2.AxisFault;&lt;br /&gt;import org.apache.axis2.ServiceObjectSupplier;&lt;br /&gt;import org.apache.axis2.description.AxisService;&lt;br /&gt;&lt;br /&gt;public class WebBeansObjectSupplier implements ServiceObjectSupplier {&lt;br /&gt;    public Object getServiceObject(AxisService axisService) throws AxisFault {&lt;br /&gt;        return WebBeansIntegration.createInstance(axisService);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Tomcat Configuration&lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt; - web.xml&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Tomcat's &lt;/span&gt;&lt;span style="font-style: italic; font-family: verdana;"&gt;web.xml&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; have to reference the WebBeans Manager (of course you have to include the AxisServlet and the mapping information as well)&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;resource-env-ref&amp;gt;&lt;br /&gt;    &amp;lt;description&amp;gt;WebBeans Manager&amp;lt;/description&amp;gt;&lt;br /&gt;    &amp;lt;resource-env-ref-name&amp;gt;app/Manager&amp;lt;/resource-env-ref-name&amp;gt;&lt;br /&gt;    &amp;lt;resource-env-ref-type&amp;gt;javax.inject.manager.Manager&amp;lt;/resource-env-ref-type&amp;gt;&lt;br /&gt;&amp;lt;/resource-env-ref&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Axis Service Configuration - services.xml&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;The services.xml from your Axis-Service archive (.aar file)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;If you choose possibility 1 you have to include your custom Message Receiver with the following tag inside the &lt;/span&gt;&lt;service style="font-family: verdana;"&gt; service-element:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;messageReceivers&amp;gt;&lt;br /&gt;    &amp;lt;messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="org.j4fry.webbeans.CustomMessageReceiver"/&amp;gt;&lt;br /&gt;&amp;lt;/messageReceivers&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;If you choose possiblity 2 you have to add the "ServiceObjectSupplier" parameter to your service element like this&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;parameter name="ServiceObjectSupplier"&amp;gt;org.j4fry.webbeans.WebBeansObjectSupplier&amp;lt;/parameter&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Use WebBeans Annotation inside your Service class&lt;/span&gt;&lt;br /&gt;If you've finished the previous steps you can use the WebBeans Annotations to inject some resources in your service class.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Resources&lt;/span&gt;&lt;br /&gt;WebBeans RI 1.0.0 Preview1 (thanks to JBoss): &lt;a href="http://downloads.sourceforge.net/jboss/webbeans-1.0.0.PREVIEW1.zip"&gt;http://downloads.sourceforge.net/jboss/webbeans-1.0.0.PREVIEW1.zip&lt;/a&gt;&lt;br /&gt;Apache Axis2 1.4.1: &lt;a href="http://ws.apache.org/axis2/"&gt;http://ws.apache.org/axis2/&lt;/a&gt;&lt;br /&gt;&lt;/service&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-7147996391710188959?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/7147996391710188959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=7147996391710188959&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/7147996391710188959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/7147996391710188959'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/06/howto-integrate-apache-axis-and.html' title='HowTo integrate Apache Axis and WebBeans'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-8620259140907665582</id><published>2009-05-20T08:12:00.000-07:00</published><updated>2009-05-20T08:39:04.645-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Subversive'/><category scheme='http://www.blogger.com/atom/ns#' term='Putty'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Use Subversive and Putty together on Windows</title><content type='html'>&lt;span style="font-family: verdana; font-weight: bold;"&gt;1. Download Eclipse Ganymede &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;From &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.eclipse.org/"&gt;http://www.eclipse.org/&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;2. Download Putty &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;From &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html"&gt;http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;3. Extract Putty &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Extract the putty.zip under C:\Apps\putty\ for instance.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;4. Install Subversive (Subversion Plugin) and SVN Connectors&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Open Eclipse and select "&lt;span style="font-style: italic;"&gt;Help&lt;/span&gt;"-&gt;"&lt;span style="font-style: italic;"&gt;Software Updates...&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Click on "Available Software" Tab&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;You need these two update sites:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Subversive Plugin: &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://download.eclipse.org/technology/subversive/0.7/update-site/"&gt;http://download.eclipse.org/technology/subversive/0.7/update-site/&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;SVN Connectors: &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/"&gt;http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;So add these two sites by clicking on "&lt;span style="font-style: italic;"&gt;Add Site...&lt;/span&gt;" Button (two times)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Afterwards you see in your "&lt;span style="font-style: italic;"&gt;Available Software&lt;/span&gt;" Panel the new two sites.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Expand the "&lt;span style="font-style: italic;"&gt;Subversive Site&lt;/span&gt;" and select the following plugins:&lt;/span&gt;&lt;br /&gt;&lt;strong style="font-weight: normal; font-family: verdana;"&gt;&lt;span style="font-style: italic;"&gt;Subversive SVN Team Provider Plugin&lt;/span&gt;&lt;br /&gt;Now expand the "&lt;span style="font-style: italic;"&gt;Subversive SVN Connectors Site&lt;/span&gt;" and select the following plugins:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Subversive SVN Connectors&lt;/span&gt;&lt;br /&gt;After these steps click the "&lt;span style="font-style: italic;"&gt;Install...&lt;/span&gt;" Button&lt;br /&gt;If the installation is finished you have to restart Eclipse.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. Configure PLINK&lt;/span&gt;&lt;br /&gt;Add a new environment variable&lt;br /&gt;Name: &lt;span style="font-style: italic;"&gt;SVN_SSH&lt;/span&gt;&lt;br /&gt;Value: &lt;span style="font-style: italic;"&gt;C:\\Apps\\putty\\plink.exe -ssh -2 -A -l mySvnUser&lt;/span&gt;&lt;br /&gt;You have to adjust the svn user.&lt;br /&gt;Now start the PAGEANT and select your Private Key&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6. Configure SVN Connectors&lt;/span&gt;&lt;br /&gt;In Eclipse go to "&lt;span style="font-style: italic;"&gt;Window&lt;/span&gt;"-&gt;"&lt;span style="font-style: italic;"&gt;Preferences&lt;/span&gt;"&lt;br /&gt;Select the "&lt;span style="font-style: italic;"&gt;Team&lt;/span&gt;"-&gt;"&lt;span style="font-style: italic;"&gt;SVN&lt;/span&gt;"&lt;br /&gt;Select the "&lt;span style="font-style: italic;"&gt;SVN Connector&lt;/span&gt;" Tab&lt;br /&gt;Set the Option "&lt;span style="font-style: italic;"&gt;SVN Connector&lt;/span&gt;" to "&lt;span style="font-style: italic;"&gt;Native JavaHL (svn:1.6.0 (r36650) jni:0.9.0)&lt;/span&gt;"&lt;br /&gt;Click the "&lt;span style="font-style: italic;"&gt;Apply&lt;/span&gt;" Button&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7. Add a new Repository Location&lt;/span&gt;&lt;br /&gt;Go to "&lt;span style="font-style: italic;"&gt;Window&lt;/span&gt;"-&gt;"&lt;span style="font-style: italic;"&gt;Open Perspective&lt;/span&gt;"-&gt;"&lt;span style="font-style: italic;"&gt;Other...&lt;/span&gt;" and select "&lt;span style="font-style: italic;"&gt;SVN Repository Exploring&lt;/span&gt;"&lt;br /&gt;Switch to the SVN Repository Perspective and click the Button "&lt;span style="font-style: italic;"&gt;New Repository Location&lt;/span&gt;"&lt;br /&gt;Now enter your SVN Repository (for example: &lt;span style="font-style: italic;"&gt;svn+ssh://example.org/var/svn/myRepo&lt;/span&gt;)&lt;br /&gt;Click the "&lt;span style="font-style: italic;"&gt;Finish&lt;/span&gt;" Button.&lt;br /&gt;&lt;br /&gt;There's one harm: Everytime when you use the Subversive Plugin via PLINK a DOS Prompt is opened by Windows :-(&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-8620259140907665582?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/8620259140907665582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=8620259140907665582&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/8620259140907665582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/8620259140907665582'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/05/use-subversive-and-putty-together-on.html' title='Use Subversive and Putty together on Windows'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-3962422054116483315</id><published>2009-03-15T05:53:00.000-07:00</published><updated>2009-12-29T00:16:57.289-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FuzzyString'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='Soundex'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>Fuzzy String Match in PostgreSQL with Debian</title><content type='html'>&lt;span style="font-family: verdana;"&gt;If you want to use FuzzyStringMatching in PostgreSQL you have to do the following steps. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Prerequisites: Debian 4.0 Etch (or higher), installed PostgreSQL 8.3, existing database in postgres&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;1. Install the postgresql-contrib package via apt&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;apt-get install postgresql-contrib&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;2. Switch to your postgres user&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;su - postgres&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;3. Open the psql interactive terminal with the following options database, user, password and the installation file for the fuzzy string functions&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;psql -d myDatabase -U myUser --password myPassword -h localhost -f /usr/share/postgresql/8.3/contrib/fuzzystrmatch.sql&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Afterwards you can use the soundex, levenshtein, metaphone and double metaphone functions in your sql statements.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Offical documentation about the fuzzy string match functions: &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.postgresql.org/docs/8.3/static/fuzzystrmatch.html"&gt;http://www.postgresql.org/docs/8.3/static/fuzzystrmatch.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-3962422054116483315?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/3962422054116483315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=3962422054116483315&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/3962422054116483315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/3962422054116483315'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/03/fuzzy-string-match-in-postgresql-with.html' title='Fuzzy String Match in PostgreSQL with Debian'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-6729338067441642027</id><published>2009-02-24T08:24:00.001-08:00</published><updated>2009-03-03T23:54:44.690-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facelets'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='Dojo'/><title type='text'>Comparing RIA Frameworks</title><content type='html'>&lt;span style="font-family:verdana;"&gt;If you are interested in RIA Frameworks you can have a look at that comparison &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://sonymathew.blogspot.com/2009/02/comparing-ria-frameworks.html"&gt;http://sonymathew.blogspot.com/2009/02/comparing-ria-frameworks.html&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; (Thanks to &lt;/span&gt;&lt;span class="post-author"  style="font-family:verdana;"&gt;Sony Mathew)&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;. ADF Oracle Faces RC you can find &lt;a href="http://blogs.oracle.com/jruiz/2009/03/comparing_ria_frameworks.html"&gt;here&lt;/a&gt;, thanks to &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;Juan Camilo Ruiz.&lt;br /&gt;Unfortunately JavaFX as well as Microsoft Silverlight is not mentioned in that comparison. That's why you can find the "missing" JavaFX column here:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Platform/Technology:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; JavaFX/Java&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;User Experience:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; Modest Rich if you're familar with Java. Is exactly like a Desktop App. No Page refreshes, all data-access &amp;amp; rendering in the background. Includes also data-bindings from variables to GUI-widgets. JavaFX wraps some Swing components to use them in a JavaFX GUI. &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://java.sun.com/javafx/1.1/docs/api/index.html"&gt;JavaFX 1.1 API&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Browser Support:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; Support all browser. You can deploy JavaFX applications via an Java Applet, Java-WebStart (JNLP - Java Network Launching Protocol) or stand-alone applications on the desktop. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Throu Java Web Start a one-click installation is possible. Awesome feature: You drag an applet from the browser to your desktop.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;UI Code:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; JavaFX Scripting and Java. Via JavaFX you can describe your GUI in a declarative way. JavaFX allows to bind variables to GUI-widgets (data-bindings) and provide a possibility to add triggers to variables.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;     You can develop the business logic in Java. There's a plugin for different Adobe Tools (e.g. Photoshop) for designing your GUI.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Access Remote Services &amp;amp; Data:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; You can invoke remote Java-Services via RMI. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Code Complexity Management:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; JavaFX files (JavaFX Script Programming Language), Java files, Organize into Class/Object hierarchies, Packages. It's statically typed and a compiled language.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Tool Support / Eclipse Integration:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; There's a JavaFX Plugin for Netbeans. The plugin in provides Code-Completion, Live-Preview of the GUI and so on. &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://javafx.com/downloads/all.jsp"&gt;Download page&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Refactoring &amp;amp;  Code-Completion Support:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; All Java Refactoring &amp;amp; Code Completion with NebBeans.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;JEE Integration:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; You can invoke EJBs like in any other stand-alone Java-Application.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Migration:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; You can use existing Backend-Services. Of course you can use existing any Java-Code inside a JavaFX-Application&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Performance: &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;Partial downloading of the JRE is one of the performances pros. So you can use JavaFX-Applications on clients which haven't got a full installed version of the JRE.  Modest download-time to browser because of modularized JRE (Entire JRE: 14,5MB but you need in most cases only the Typical Applet version 4,6MB)&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Static-Content    (Externally Managed):&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; You can style your widgehts with CSS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Requirements:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; You need JRE 1.6 Update 10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Search Engine Optimization:&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; Not compatible.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Currently J4Fry is working on some Dojo-Tags for Facelets for RIA feelings in JSF applications.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The declarative Tag should ease the use of Dojo in JSF Applications.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;There'll be news about J4Fry-DojoFaces-Project when there's a beta version for testing.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-6729338067441642027?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/6729338067441642027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=6729338067441642027&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/6729338067441642027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/6729338067441642027'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/02/comparing-ria-frameworks.html' title='Comparing RIA Frameworks'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-3300019413976834500</id><published>2009-01-21T23:14:00.000-08:00</published><updated>2009-01-21T23:33:02.423-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facelets'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='Action'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaServer Faces'/><category scheme='http://www.blogger.com/atom/ns#' term='Parameter'/><title type='text'>Pass action as Facelets-Parameter</title><content type='html'>&lt;span style="font-family: verdana;"&gt;There is a problem to pass an action as a Facelet-Parameter to a Fragment via ui:include an ui:param.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;With the J4Fry-Action-Wrapper (&lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.j4fry.org/jsfErrorhandling.shtml"&gt;http://www.j4fry.org/jsfErrorhandling.shtml&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;) as a part of the J4Fry-JSF-Components (&lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.j4fry.org/jsfComponents.shtml#"&gt;http://www.j4fry.org/jsfComponents.shtml&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;) you've got the possibility to pass the action (e.g. for a h:commandButton) to a Facelets-Fragment.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Example&lt;/span&gt;&lt;br /&gt;&lt;u&gt;Main-Page&lt;/u&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;ui:include src=&amp;quot;Fragments/myFragment.xhtml&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;ui:param name=&amp;quot;myAction&amp;quot; value=&amp;quot;myBean.doSomething&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/ui:include&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;u&gt;Fragment&lt;/u&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;h:commandButton value=&amp;quot;Execute doSomething&amp;quot; action=&amp;quot;#{action[myAction].trigger}&amp;quot; /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;To use that solution you have to download the J4Fry-JSF-Components (with dependencies described here: &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.j4fry.org/jsfComponents.shtml"&gt;http://www.j4fry.org/jsfComponents.shtml&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;) and place the JAR-File into your lib-directory from the webapplication. Thats it!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-3300019413976834500?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/3300019413976834500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=3300019413976834500&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/3300019413976834500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/3300019413976834500'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/01/pass-action-as-faclets-parameter.html' title='Pass action as Facelets-Parameter'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-6611320952280837862</id><published>2009-01-16T13:28:00.000-08:00</published><updated>2009-01-16T04:42:52.419-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaServer Faces'/><category scheme='http://www.blogger.com/atom/ns#' term='VariableResolver'/><category scheme='http://www.blogger.com/atom/ns#' term='PropertyResolver'/><title type='text'>JSF VariableResolver &amp; PropertyResolver</title><content type='html'>&lt;span style="font-weight: bold;font-family:verdana;" &gt;Resolving&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Mit Hilfe des VariableResolvers und des PropertyResolvers löst JSF die EL-Expressions auf. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Der VariableResolver ist zuständig für den linken Teil der Expression. Für den restlichen rechten Teil ist der PropertyResolver zuständig.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Beispiel:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Bean Person:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;public class PersonBean implements java.io.Serializable {&lt;br /&gt;    private Address address;&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Klasse Address&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;public class Address implements java.io.Serializable {&lt;br /&gt;     private City city;&lt;br /&gt;     private String street;&lt;br /&gt;     private String zipCode;&lt;br /&gt;     ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Klasse City&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;public class City implements java.io.Serializable {&lt;br /&gt;     private String name;&lt;br /&gt;     ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;JSF-Tag&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;inputField value="&lt;b&gt;#{personBean.address.city.name}&lt;/b&gt;" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Der VariableResolver löst "personBean" auf.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Der PropertyResolver löst in Teilschritten zuerst "address" und anschließend "city" auf um zum Schluß auf die Property "name" der Klasse City zuzugreifen.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Implementierung eigener Variable- und PropertyResolver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;u&gt;Schritt 1&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Anlegen der Klassen CustomVariableResolver und CustomPropertyResolver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Klasse CustomVariableResolver&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;package org.j4fry.jsf;&lt;br /&gt;public class CustomVariableResolver extends VariableResolver {&lt;br /&gt;    private Logger log = Logger.getLogger(CustomVariableResolver.class);&lt;br /&gt;    &lt;br /&gt;    // Ursprünglicher VariableResolver&lt;br /&gt;    private VariableResolver variableResolver;&lt;br /&gt; &lt;br /&gt;    public CustomVariableResolver(VariableResolver variableResolver) {&lt;br /&gt;        this.variableResolver = variableResolver;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public Object resolveVariable(FacesContext arg0, String arg1)&lt;br /&gt;            throws EvaluationException {&lt;br /&gt;        log.info("resolve: " + arg1);&lt;br /&gt;        // Delegation an ursprünglichen VariableResolver&lt;br /&gt;        return variableResolver.resolveVariable(arg0, arg1);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Klasse CustomPropertyResolver&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;package org.j4fry.jsf;&lt;br /&gt;public class CustomPropertyResolver extends PropertyResolver {&lt;br /&gt;    private Logger log = Logger.getLogger(CustomPropertyResolver.class);&lt;br /&gt;&lt;br /&gt;    // Ursprünglicher PropertyResolver&lt;br /&gt;    private PropertyResolver propertyResolver;&lt;br /&gt;&lt;br /&gt;    public CustomPropertyResolver(PropertyResolver propertyResolver) {&lt;br /&gt;        this.propertyResolver = propertyResolver;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public Object getValue(Object fromObject, Object property)&lt;br /&gt;            throws EvaluationException, PropertyNotFoundException {&lt;br /&gt;        log.debug("getValue: fromObject[" + fromObject + "] property[" + property + "]");&lt;br /&gt;        // Delegation an ursprünglichen PropertyResolver&lt;br /&gt;        return propertyResolver.getValue(fromObject, property);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void setValue(Object toObject, Object property, Object value)&lt;br /&gt;            throws EvaluationException, PropertyNotFoundException {&lt;br /&gt;        log.debug("setValue: toObject[" + toObject + "] property[" + property + "] value[" + value + "]");&lt;br /&gt;        // Delegation an ursprünglichen PropertyResolver&lt;br /&gt;        propertyResolver.setValue(toObject, property, value);&lt;br /&gt;    }   &lt;br /&gt;   &lt;br /&gt;    // Bei den restlichen Methoden wird einfach an den PropertyResolver delegiert&lt;br /&gt;   &lt;span style="color:grey"&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void setValue(Object arg0, int arg1, Object arg2)&lt;br /&gt;            throws EvaluationException, PropertyNotFoundException {&lt;br /&gt;        propertyResolver.setValue(arg0, arg1, arg2);&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    @Override&lt;br /&gt;    public Class&lt;?&gt; getType(Object arg0, int arg1) throws EvaluationException,&lt;br /&gt;            PropertyNotFoundException {&lt;br /&gt;        return propertyResolver.getType(arg0, arg1);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public Class&lt;?&gt; getType(Object arg0, Object arg1) throws EvaluationException,&lt;br /&gt;            PropertyNotFoundException {&lt;br /&gt;        return propertyResolver.getType(arg0, arg1);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public Object getValue(Object arg0, int arg1) throws EvaluationException,&lt;br /&gt;            PropertyNotFoundException {&lt;br /&gt;        return propertyResolver.getValue(arg0, arg1);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public boolean isReadOnly(Object arg0, int arg1)&lt;br /&gt;            throws EvaluationException, PropertyNotFoundException {&lt;br /&gt;        return propertyResolver.isReadOnly(arg0, arg1);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public boolean isReadOnly(Object arg0, Object arg1)&lt;br /&gt;            throws EvaluationException, PropertyNotFoundException {&lt;br /&gt;        return propertyResolver.isReadOnly(arg0, arg1);&lt;br /&gt;    }&lt;br /&gt;   &lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Die Klassen werden jeweils von den JSF-eigenen Resolvern abgeleitet. Zudem bekommt jeder CustomResolver einen Konstruktor der den ursprünglichen Resolver übergeben bekommt. Das ist wichtig um in den Methoden ggf. die Verarbeitung an diesen Resolver zu delegieren.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;u&gt;Schritt 2&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;CustomResolver in der faces-config.xml bekannt machen&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;application&amp;gt;&lt;br /&gt;    &amp;lt;variable-resolver&amp;gt;&lt;br /&gt;        org.j4fry.jsf.CustomVariableResolver&lt;br /&gt;    &amp;lt;/variable-resolver&amp;gt;&lt;br /&gt;    &amp;lt;property-resolver&amp;gt;&lt;br /&gt;        org.j4fry.jsf.CustomPropertyResolver&lt;br /&gt;    &amp;lt;/property-resolver&amp;gt;&lt;br /&gt;&amp;lt;/application&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;u&gt;Interpretierung der Log-Ausgaben&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Als Beispiel dient die o.g. EL-Expression &lt;b&gt;#{personBean.address.city.name}&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;i&gt;Lesender Zugriff&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;1.&lt;/b&gt; Auflösen von personBean durch VariableResolver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Logausgabe: resolve: personBean&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;2.&lt;/b&gt; Auflösen von address durch PropertyResolver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Logausgabe: getValue: fromObject[org.j4fry.beans.PersonBean@1f68572]  property[address]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;3.&lt;/b&gt; Auflösen von city durch PropertyResolver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Logausgabe: getValue: fromObject[org.j4fry.model.Address@1b335b7]  property[city]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;4.&lt;/b&gt; Auflösen von name durch PropertyResolver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Logausgabe: getValue: fromObject[org.j4fry.model.City@15c018]  property[name]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;i&gt;Schreibender Zugriff&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;1.&lt;/b&gt; Auflösen von personBean durch VariableResolver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Logausgabe: resolve: personBean&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;2.&lt;/b&gt; Auflösen von address durch PropertyResolver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Logausgabe: getValue: fromObject[org.j4fry.beans.PersonBean@1f68572]  property[address]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;3.&lt;/b&gt; Auflösen von city durch PropertyResolver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Logausgabe: getValue: fromObject[org.j4fry.model.Address@1b335b7]  property[city]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;4.&lt;/b&gt; Setzen von name durch PropertyResolver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Logausgabe: setValue: toObject[org.j4fry.model.City@15c018]  property[name] value[Munich]&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-6611320952280837862?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/6611320952280837862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=6611320952280837862&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/6611320952280837862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/6611320952280837862'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/01/jsf-variableresolver-propertyresolver.html' title='JSF VariableResolver &amp; PropertyResolver'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-1805051998079415017</id><published>2009-01-15T07:29:00.000-08:00</published><updated>2009-01-15T08:02:50.755-08:00</updated><title type='text'>HttpURLConnection connection pool</title><content type='html'>&lt;span style="font-family:Verdana;"&gt;Lately i had to set up a server to server HTTP connection with up to 200 parallel open connections. After some fiddling I succeeded with a nice and small sized URLConnection solution. It' identical for HttpURLConnection and HttpsURLConnection (with SSL). At first, you need to know that URLConnection's design requires a new URLConnection instance for every request you want to make. Cast the URLConnection to HttpURLConnection to gain access to the HTTP specific properties like requestMethod and connectionTimeout:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;URL url = new URL("HTTPS", server, port, serverPath);&lt;br /&gt;huc = (HttpURLConnection) url.openConnection();&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Now you need some configuration. These are the properties I needed (using org.apache.commons.util.Base64):&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;huc.setDoOutput(true);&lt;br /&gt;huc.setReadTimeout(socketTimeout);&lt;br /&gt;huc.setConnectTimeout(connectionTimeout);&lt;br /&gt;huc.setRequestMethod("POST");&lt;br /&gt;authorizationString = "Basic " + new String(Base64.encode(username + ":" +password)).getBytes("ISO-8859-1")), "ISO-8859-1");&lt;br /&gt;huc.setRequestProperty ("Authorization", authorizationString);&lt;br /&gt;os = huc.getOutputStream();&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Write your request (it goes to the buffer):&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;os.write(request);&lt;br /&gt;os = huc.getOutputStream();&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;When you call getInputStream() your request is issued to the server and you get the response stream for further processing. You need to close the InputStream to free the underlying Socket for reuse. It's internally pooled:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;try {&lt;br /&gt; is = huc.getInputStream();&lt;br /&gt; response = readResponse(is, huc.getContentLength());&lt;br /&gt;} finally {&lt;br /&gt; is.close();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private String readResponse(InputStream is, int length) throws IOException {&lt;br /&gt; ByteArrayOutputStream baos = new ByteArrayOutputStream();&lt;br /&gt; int b = 0;&lt;br /&gt; int read = 0;&lt;br /&gt; while (read &lt; length) {&lt;br /&gt;  b = is.read();&lt;br /&gt;  baos.write(b);&lt;br /&gt; }&lt;br /&gt; return baos.toString("ISO-8859-1");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Configure your connection pool with Java system properties:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;-Dhttp.maxConnections=200&lt;br /&gt;-Dsun.net.http.errorstream.enableBuffering=true&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-1805051998079415017?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/1805051998079415017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=1805051998079415017&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/1805051998079415017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/1805051998079415017'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/01/httpurlconnection-connection-pool.html' title='HttpURLConnection connection pool'/><author><name>Ganesh</name><uri>http://www.blogger.com/profile/17657313358712817254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_-HiIp0W4YLk/SWkJ_mz0j8I/AAAAAAAAAAM/MGAlg2zd5D8/S220/09-01-09_0742.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-8610264831267556226</id><published>2009-01-12T12:44:00.000-08:00</published><updated>2009-01-12T12:47:54.298-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MyFaces'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaServer Faces'/><title type='text'>Upgrading from MyFaces 1.1.5 to JSF 1.2 RI</title><content type='html'>&lt;span style="font-family: verdana;"&gt;When upgrading the example project I encountered 7 issues: &lt;/span&gt;&lt;br /&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;Using the same tag attribute for a JSF tag twice was silently ignored with 1.1.5 and now throws an exception with 1.2&lt;/li&gt;&lt;li&gt;Using less columnClasses than columns in a panelGrid rendered the remaining columns without CSS class with 1.1.5 and now repeats the columnClasses for the remaining columns with 1.2&lt;/li&gt;&lt;li&gt;MyFaces 1.1.5 rendered either a name or and id attribute for each tag, so scripts could always identify them. 1.2 RI renders commandLinks with neither name nor id, imposing minor scripting changes&lt;/li&gt;&lt;li&gt;MyFaces 1.1.5 updated the model with null, when a radio button not clicked and the bean property is a String, the 1.2 RI updates with ""&lt;/li&gt;&lt;li&gt;1.2 RI writes an exception stacktrace to the log when a phase listener throws a bug. MyFaces 1.1.5 was silently ignoring them&lt;/li&gt;&lt;li&gt;When a bean implemented Map and a bean property was set through DI in faces-config, MyFaces 1.1.5 called Map.put(). 1.2 RI doesn't, so implementing a separate setter for upgrading was necessary&lt;/li&gt;&lt;li&gt;When a property of a bean in session scope is set through DI (faces-config) and the property is a bean in request scope this would silently upgrade the ssecond beans life to session scope. MyFaces 1.1.5 would ignore this while 1.2 RI throws an exception&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: verdana;"&gt; Thanks to Ganesh for identifying the differences.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-8610264831267556226?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/8610264831267556226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=8610264831267556226&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/8610264831267556226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/8610264831267556226'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/01/upgrading-from-myfaces-115-to-jsf-12-ri.html' title='Upgrading from MyFaces 1.1.5 to JSF 1.2 RI'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-7724598122564652794</id><published>2009-01-12T12:26:00.000-08:00</published><updated>2009-01-12T12:40:37.585-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MissingResourceException'/><category scheme='http://www.blogger.com/atom/ns#' term='Facelets'/><title type='text'>Fehlendes Bundle com.sun.el.Messages</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Auf Grund von einem fehlenden Bundle kann es bei der Nutzung von Faclets zu folgender &lt;b&gt;java.util.MissingResourceException&lt;/b&gt; kommen:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;java.util.MissingResourceException: Can't find bundle for base name com.sun.el.Messages, locale de_DE &lt;br /&gt;    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:836) &lt;br /&gt;    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:805) &lt;br /&gt;    at java.util.ResourceBundle.getBundle(ResourceBundle.java:549) &lt;br /&gt;    at com.sun.el.util.MessageFactory.&lt;clinit&gt;(Unknown Source) &lt;br /&gt;    at com.sun.el.parser.AstValue.getTarget(Unknown Source) &lt;br /&gt;    at com.sun.el.parser.AstValue.getType(Unknown Source) &lt;br /&gt;    at com.sun.el.ValueExpressionImpl.getType(Unknown Source) &lt;br /&gt;    at com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:60) &lt;br /&gt;    at com.sun.facelets.el.LegacyValueBinding.getType(LegacyValueBinding.java:94) &lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Ein Grund für die Exception könnte ein NullPointer innerhalb einer EL-Expression sein die JSF bzw. Facelets versucht aufzulösen.&lt;/span&gt; &lt;span style="font-family: verdana;"&gt;&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Um die ursprüngliche (etwas aussagekräftigere ;-)) Exception zu sehen könnt ihr einfach folgendes JAR-File in eure Webapplication einbinden: &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://j4fry.org/resources/el-messages.jar"&gt;http://j4fry.org/resources/el-messages.jar&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Enthalten sind die englischen und deutschen Property-Files.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-7724598122564652794?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/7724598122564652794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=7724598122564652794&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/7724598122564652794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/7724598122564652794'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/01/fehlendes-bundle-comsunelmessages.html' title='Fehlendes Bundle com.sun.el.Messages'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-762603165876617249</id><published>2009-01-10T01:46:00.000-08:00</published><updated>2009-01-12T06:55:17.958-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Template'/><category scheme='http://www.blogger.com/atom/ns#' term='Facelets'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaServer Faces'/><category scheme='http://www.blogger.com/atom/ns#' term='Parameter'/><title type='text'>Facelets Template-Parameter</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Es gibt mehrere Möglichkeiten Facelets-Templates zu parameterisieren.&lt;/span&gt;&lt;br /&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;Über ui:insert und ui:define&lt;/li&gt;&lt;li&gt;Über EL und ui:param&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:verdana;"&gt;Facelets Template:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;  &amp;lt;head&amp;gt;&lt;br /&gt;      &amp;lt;link rel="stylesheet" type="text/css" href="&lt;b&gt;#{myStylesheet}&lt;/b&gt;" media="screen, projection" /&amp;gt;&lt;br /&gt;  &amp;lt;/head&amp;gt;&lt;br /&gt;  &amp;lt;body&amp;gt;&lt;br /&gt;      &lt;b&gt;&amp;lt;ui:insert name="myContent"&amp;gt;No content supplied.&amp;lt;/ui:insert&amp;gt;&lt;/b&gt;&lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Facelets Template-Client:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;ui:composition template=&amp;quot;MyTemplate.xhtml&amp;quot;&amp;gt;&lt;br /&gt;  &lt;b&gt;&amp;lt;ui:param name=&amp;quot;myStylesheet&amp;quot; value=&amp;quot;http://my.host.com/css/style.css&amp;quot; /&amp;gt;&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;&amp;lt;ui:define name=&amp;quot;content&amp;quot;&amp;gt;&lt;/b&gt;&lt;br /&gt;    &amp;lt;h1&amp;gt;My Content&amp;lt;/h1&amp;gt;&lt;br /&gt;  &lt;b&gt;&amp;lt;/ui:define&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;/ui:composition&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Über ui:insert ist es möglich Blockplatzhalter zu definieren.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Mit ui:param können auch Inline-Passagen definiert werden.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:78%;"  &gt;Die Frage wurde in unserem XING JSF-Developers-Forum (&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;a style="font-family: verdana;" href="https://www.xing.com/net/jsf"&gt;https://www.xing.com/net/jsf&lt;/a&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:78%;"  &gt;) gestellt.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2217566475688601537-762603165876617249?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/762603165876617249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=762603165876617249&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/762603165876617249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/762603165876617249'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/01/facelets-template-parameter.html' title='Facelets Template-Parameter'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2217566475688601537.post-2511084145305101888</id><published>2009-01-10T01:06:00.000-08:00</published><updated>2009-01-12T06:45:48.999-08:00</updated><title type='text'>Welcome! / Willkommen!</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Welcome to the J4Fry Blog.&lt;br /&gt;In this blog the J4Fry members have got the opportunity to post sth about Java especially about Java-Web-Development.&lt;br /&gt;We're looking foward to read some comments to our blog posts.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;br /&gt;So long, cheerz Alex&lt;br /&gt;____________________________________&lt;br /&gt;&lt;br /&gt;Willkommen im J4Fry Blog.&lt;br /&gt;In diesem werden wir J4Fry Members hin und wieder etwas über Java speziell über Java-Webentwicklung posten.&lt;br /&gt;Wir freuen uns eure Kommentare zu unseren Posts zu lesen.&lt;br /&gt;&lt;br /&gt;Viel Spaß!&lt;br /&gt;mfg Alex&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;____________________________________&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;J4Fry Website: &lt;a href="http://www.j4fry.org/"&gt;http://www.j4fry.org/&lt;/a&gt;&lt;br /&gt;J4Fry Team: &lt;a href="http://www.j4fry.org/team.shtml"&gt;http://www.j4fry.org/team.shtml&lt;/a&gt;&lt;br /&gt;Webprofil Alexander Bell: &lt;a href="http://www.j4fry.org/alexanderbell.shtml"&gt;http://www.j4fry.org/alexanderbell.shtml&lt;/a&gt;&lt;br /&gt;Webprofil Ganesh Jung: &lt;a href="http://www.gpsjava.de/"&gt;http://www.gpsjava.de/&lt;/a&gt;&lt;/span&gt;&lt;br /&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/2217566475688601537-2511084145305101888?l=j4fry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j4fry.blogspot.com/feeds/2511084145305101888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2217566475688601537&amp;postID=2511084145305101888&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/2511084145305101888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2217566475688601537/posts/default/2511084145305101888'/><link rel='alternate' type='text/html' href='http://j4fry.blogspot.com/2009/01/welcome-willkommen.html' title='Welcome! / Willkommen!'/><author><name>Alexander Bell</name><uri>https://profiles.google.com/104673922741618832718</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-iUK9Q6SYJMs/AAAAAAAAAAI/AAAAAAAAAAA/2woYm_gHI4w/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry></feed>
