<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gridshore &#187; JAOO</title>
	<atom:link href="http://www.gridshore.nl/tag/jaoo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gridshore.nl</link>
	<description>A weblog about software engineering, Architecture, Technology an other things we like.</description>
	<lastBuildDate>Tue, 13 Dec 2011 15:36:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Doing JAOO day 3</title>
		<link>http://www.gridshore.nl/2008/10/02/doing-jaoo-day-3/</link>
		<comments>http://www.gridshore.nl/2008/10/02/doing-jaoo-day-3/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 21:40:38 +0000</pubDate>
		<dc:creator>jettro</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[conference report]]></category>
		<category><![CDATA[JAOO]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/?p=262</guid>
		<description><![CDATA[<p>At the moment I am already home, we had a long drive from 10 hours, a good night sleep, and a day at work. I owe you all the report of the last day at the JAOO and maybe some final thoughts.</p> <p>This post tells a story about jpa and internal domain specific languages, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.gridshore.nl/wp-content/uploads/jaoologo-entry.gif" alt="jaoologo_entry.gif" border="0" width="175" height="79" align="left" />At the moment I am already home, we had a long drive from 10 hours, a good night sleep, and a day at work. I owe you all the report of the last day at the JAOO and maybe some final thoughts.</p>
<p>This post tells a story about jpa and internal domain specific languages, read on if you want to learn more.</p>
<p><span id="more-262"></span>
<p>The first presentation I saw this day was by Patrick Linskey. He talked about JPA, a short introduction of jpa 1 and some features of the upcoming jpa 2.</p>
<p>One thing I liked about the overview of jpa 1 is that I actually learned some new tricks. The best trick I missed completely before is the <em>getReference</em> method. When programming a delete method I used to load the object first before deleting it. This is not very optimal. I did not know of the existence of the getReference method. </p>
<p><strong>&lt;T> T getReference(Class&lt;T> entityClass, Object primaryKey)</strong></p>
<p>Using this method you can program your delete method like this:</p>
<p><strong>entityManager.delete(entityManager.getReference(Order.class,17));</strong></p>
<p>What I remembered from the presented new features is the inclusion of features in the specification that all implementations already have. Think about features like: cache handling, logging sql statements, creation of schema. Another new feature is pessimistic locking next to optimistic locking.</p>
<p>The final thing I want to mention is a project that is an abstraction (or dsl like Microsoft Linq) for querying collections or entity managers. This project looks promising. It is still young, I&#8217;ll get back to this when I have actually tried it.</p>
<p><a href="http://quaere.codehaus.org/">http://quaere.codehaus.org/</a></p>
<p>The last talk I attended was presented by Martin Fowler. Man he was fast, I did grasp the basics of domain specific languages (DSLs). Martin was talking about a book he is writing. The focus was on internal DSLs. I mentioned Linq before, I like the idea. So I will do some more research. I am not going to try to explain what it is about, check the following website of Martin if you want to learn more. Focus on fluent interfaces and builders on top of normal domain type of objects.</p>
<p><a href="http://martinfowler.com/dslwip/">http://martinfowler.com/dslwip/</a></p>
<h3>The end of JAOO</h3>
<p>So that was the end of JAOO 2008. It was a nice conference. To be honest, not the best content out there. A bit more in depth knowledge, more code, would have been nice. Nevertheless I got some interesting view points. It is clear we have to learn additional languages in the future. I am not sure though which one(s) to chose. Maybe a scripting language? Just more JavaScript, or groovy, we&#8217;ll see. For know I&#8217;ll focus on things like Flex, GWT and maybe Wicket. On the server side we need to learn more about cloud computing and how to keep your systems in the air. I end with the best thing, especially for some of my colleagues. Everybody must start using timeouts and of course the circuit breaker pattern.</p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2008%2F10%2F02%2Fdoing-jaoo-day-3%2F&amp;title=Doing%20JAOO%20day%203&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2008/10/02/doing-jaoo-day-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doing JAOO day 2</title>
		<link>http://www.gridshore.nl/2008/10/01/doing-jaoo-day-2/</link>
		<comments>http://www.gridshore.nl/2008/10/01/doing-jaoo-day-2/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 12:06:48 +0000</pubDate>
		<dc:creator>jettro</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[conference report]]></category>
		<category><![CDATA[JAOO]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/?p=260</guid>
		<description><![CDATA[<p> After a good night with drinks and fun we started of with the second day. A keynote about google v8, their java script engine. Hmm, not my thing. It does look incredibly fast by the way. So as a user I am interested. The next presentation is what this blog post is about, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.gridshore.nl/wp-content/uploads/jaoologo-entry.gif" alt="jaoologo_entry.gif" border="0" width="175" height="79" align="left" /> After a good night with drinks and fun we started of with the second day. A keynote about google v8, their java script engine. Hmm, not my thing. It does look incredibly fast by the way. So as a user I am interested. The next presentation is what this blog post is about, Failure comes in flavors. The other presentations I attended about RIA&#8217;s were not very interesting and based on the feedback, I did not miss anything by not attending any of the last presentations.</p>
<p>More about the good news, the extra long presentation (two sessions) about Failures in Java was very interesting. I got a lot of ideas out of it. If you continue reading, I&#8217;ll share some of these ideas.</p>
<p><span id="more-260"></span>
<p>The presentation was by Michael T Nygard. The first thing he introduced was a new term: FOM, meaning Failure Oriented Mindset. He was talking about the biggest part of application brake downs. Most of them (around 96%) are due to application problems. After having seen a lot of these problems he could categorize the problems. It all boils down to the difference between feature complete and production ready. Usually we test for things that we expect to happen and if you are doing a good job you are also testing things that might go wrong. We never test for things we do not know. There are two things that you can do. First of all make your special Test Harness that does simulate these very strange things and throw them at your application. Concentrate on the integration points with other applications. Michael calls this the Test Harness. To me a more important thing is the fail gracefully. Of course fail as fast as possible but do it gracefully. Try to take down just a part of the application. Just make it fail fast and not come into some kind of vicious circle.</p>
<p>Good example is a not responding website, users tend to keep pushing the button because the website does not seem to be responding. Usually the website is just very busy trying to respond (due to various reasons). Making more requests does not help the system to get out of this state.</p>
<p>Another nice example is a horizontally scaled application. If one server gets to busy and breaks down, all traffic will be transferred to the other servers. Now the other servers take the burden and will be more busy. One after one they will fail and your whole cluster will break down.</p>
<p>A lot of these problems are related to sessions being created for any type of user. Try not to use sessions if you do not need them. Like I said before, the integration points with other applications result in problems often.</p>
<p>So, what is there to do? Well there are a few words: timeouts, a-synchronous and Circuit breaker. The first two are pretty obvious, the third maybe not. So let&#8217;s focus on that on for now.</p>
<h3>CircuitBreaker pattern</h3>
<p>Let me stress that this might have another name, but this is what I got out of it. What does it do? It is a mechanism for failing gracefully but fast. Imagine you have an integration point with a web service. Suddenly the web service changes it&#8217;s contract and you did not know. Your integration gives an error and every call that does need this service takes a long time and comes to the conclusion it does not work. A circuit breaker would be a sort of wrapper for the integration point. It passes the request and does not do a lot when everything goes well. Now the contract has changed and within a very short amount of time three calls are erroneous. Then the circuit breaker steps in. He cuts the connection and immediately throws an exception to the client. Now you can implement logic in the circuit breaker that waits for 5 minutes and try it with 1 client again. If it fails the connection keeps being closed, if it goes well, the connection is opened again.</p>
<p>In case of the mentioned example we might need a new deployment to actually overcome the problem. But what if the service was not very responsive due to heavy load. The circuit breaker could use time outs and track the amount of time outs taking place. That way you can help the called web service to recover and in the end start using it again without interference of an administrator.</p>
<p>It was a very interesting talk and I think there will be more info on this blog the coming weeks.</p>
<p>The night was shorter and with less drinks than the other two. So I am ready for day three and the drive back.</p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2008%2F10%2F01%2Fdoing-jaoo-day-2%2F&amp;title=Doing%20JAOO%20day%202&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2008/10/01/doing-jaoo-day-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doing JAOO day 1</title>
		<link>http://www.gridshore.nl/2008/09/30/doing-jaoo-day-1/</link>
		<comments>http://www.gridshore.nl/2008/09/30/doing-jaoo-day-1/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 12:32:00 +0000</pubDate>
		<dc:creator>jettro</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[conference report]]></category>
		<category><![CDATA[JAOO]]></category>

		<guid isPermaLink="false">http://www.gridshore.nl/?p=258</guid>
		<description><![CDATA[<p>From monday to wednesday I am attending JAOO in Denmark with 6 other colleagues. I am not going to give an extensive report, but some notes and remarks might interest you guys. Therefore a brief summary of what I have seen, the presentations I attended and the most interesting things I remember.</p> <p>The first [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.gridshore.nl/wp-content/uploads/jaoologo-entry.gif" alt="jaoologo_entry.gif" border="0" width="175" height="79" align="left" />From monday to wednesday I am attending JAOO in Denmark with 6 other colleagues. I am not going to give an extensive report, but some notes and remarks might interest you guys. Therefore a brief summary of what I have seen, the presentations I attended and the most interesting things I remember.</p>
<p>The first day in just a few words, not necessarily in order: Linq (why don&#8217;t we have this is java?), performance and scalability (still important), programming the cloud (gives new things to think about), google apis (wow there is really a lot you can do), scala (just not my thing), beer (there is enough here)</p>
<p>Read on if you also want to read more details</p>
<p><span id="more-258"></span>
<p>The first day started of with the key note. It was a talk about microsoft technology. Not interested, well, kinda interesting. It followed the functional programming is the future hype. Talking and showing F#, well oke, not for me. But Anders Hejlsberg also showed Linq. This is more about internal functional programming. A nice abstraction of using sql quesries using fluent interfaces and immutable objects. I reall like the idea and will do some research in the future. Maybe there is a java alternative that I do not know of.</p>
<p>My next session was from Patrick Linskey about designing your aplication for scalability. I liked the talk, good speaker. Some things that I wrote down are</p>
<ul>
<li>optimizing IO communication, for instance sing the jdbc prepared statement batching.</li>
<li>Use synchronization with care when trying to get your multi processor systems to work. The different processes will all have to stop on a synchronization point.</li>
<li>When needing shared state, we often use a database, it might be much better to separate your tiers. You could create a service tier with ejb&#8217;s for instance.</li>
<li>Other languages like Scala or Erlang support concurrency out of the box. Not that they are perfect by the way, see my later comment on scala.</li>
</ul>
<p>Gregor Hohpe talked about programming the cloud. This was a very good presentation and an interesting as well. Using a cloud for doing processes or store data is different than our every day database app. Think about big websites like flickr, google search, facebook. They do not use two phase commit. They use other ways called compensation. W as users learn how to compensate for things that go wrong. Our programs should act in a similar way. A nice comparison is two phase commit and starbucks, just google for the article. Another comparison I liked was ACID in the traditional transaction way and his ACID. In traditional way it is about Predictive and Accurate, in the new way more about Flexible and redundant. As a side step, Gregor talked about the google api&#8217;s. I was surprised about what you can do with the apis of for instance google calendar. I had to try out the google platform using python. It was  very easy to do, my first tutorial is published within half an hour. You can look at it here. <a href="http://jettrofirst.appspot.com/">http://jettrofirst.appspot.com/</a>. If you want to learn more about google apis go here : <a href="http://code.google.com/apis">http://code.google.com/apis</a></p>
<p>After Gregor I went to Jonas Jacobi, a guy I knew from the past days when doing Oracle UIX. He know is working for a small company called <a href="http://www.kaazing.com/">Kaazing</a>. He demonstrated avery interesting project called the Kaazing Gateway. It is an open source implementation of the upcoming HTML 5 WebSocket. Not that it is supported by any browser, but they have found a way to use the flash plugin to overcome this problem for now. What it is about? Real push technology. Opening a tcp/ip connection with a neat trick of downgrading the HTTP connection. That way you do have the full duplex connection an push technology becomes reality. It is a very interesting technology that I will try out in the near future.</p>
<p>The last presentation of day 1 I attended was not the best one. I wanted to hear something about the big buzz scala. I am going to be short. There are two possibilities: the first is that Bill cannot realy explain what it all is about, the second is that scala is just not my thing. To much of a coupling between the normal implementation and the functional programming way. Hard to read, not to maintain.</p>
<p>That is it for now, we ended the day with a good meal and enough to drink.</p>
<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.gridshore.nl%2F2008%2F09%2F30%2Fdoing-jaoo-day-1%2F&amp;title=Doing%20JAOO%20day%201&amp;t=2' height='25' width='155' frameborder='0' scrolling='no'></iframe></div></div><div style='clear:both'></div></div><!-- Social Buttons Generated by Digg Digg plugin v4.5.3.4, 
    Author : Yong Mook Kim
    Website : http://www.diggdigg2u.com -->]]></content:encoded>
			<wfw:commentRss>http://www.gridshore.nl/2008/09/30/doing-jaoo-day-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

