<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://purl.org/atom/ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="0.3">
	<title>Newest RIFERS blogs entries</title>
	<link rel="alternate" href="http://rifers.org/blogs" type="text/html" />
	<author>
		<name>Rifers Blogs: https://rifers.org/blogs</name>
	</author>
	<copyright>Copyright of the content contained is attributed to the original authors</copyright>
	<info>The feeds of the Rifers community blogs</info>
	<modified>2008-07-20T04:38:10+0200</modified>
	<dc:creator>Rifers Blogs: https://rifers.org/blogs</dc:creator>
	<dc:date>2008-07-20T04:38:10+0200</dc:date>
	<dc:language>en</dc:language>
	<dc:rights>Copyright of the content contained is attributed to the original authors</dc:rights>
	
	
		<entry>
			<title>Channel Intelligence vs. Uwyn : thoughts after the first day</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/7/19/thoughts_after_first_day" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-07-19T10:34:53+0200</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;Thanks a lot everyone for all your helpful comments. It&apos;s heartwarming to see how many people care and manifest their support.&lt;/p&gt;

&lt;p&gt;I already had some informal legal assistance and it seems that causing a patent to be revoked is a very expensive process. That is the only thing that prior art can be used for. Since the patent is there and has been granted by the US patent office, its validity cannot be challenged unless it&apos;s entirely revoked. What I can do is challenge the relevance of the patent in regards to Bla-bla List. I&apos;m now waiting for replies from several open-source foundations that are supposed to provide free legal assistance is cases like this. If they don&apos;t come through, I&apos;ll have to hire a patent lawyer in Belgium.&lt;/p&gt;

&lt;p&gt;I&apos;ve also contacted the lawyers that sent me this letter directly to ask them for concrete suggestions about the amicable resolve that they propose. At least this will give me a picture about what they&apos;re after. This what I sent them:&lt;/p&gt;

&lt;div class=&quot;quotebody&quot;&gt;&lt;p&gt;Dear sir,&lt;/p&gt;

&lt;p&gt;I just received a fedex about your claim that http://blablalist.com would infringe intellectual property rights that are allegedly held by Channel Intelligence, Inc. in US patent No. 6,917,941.&lt;/p&gt;

&lt;p&gt;The service provided at http://blablalist.com has been free of charge and the technology is actually made available for free under an open-source license that has been approved by the Free Software Foundation. Uwyn has never received any payments from the users of the service nor made any profits from it.&lt;/p&gt;

&lt;p&gt;As you suggest in the last paragraph of your letter, I&apos;m ready to discuss ways to resolve this amicably. What are your suggestions?&lt;/p&gt;

&lt;p&gt;Best regards,&lt;/p&gt;

&lt;p&gt;Geert&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;There seem to be a collection of possible reasons that I can use to dismiss myself as a defendant. I didn&apos;t know that the legal system worked this way, but apparently it&apos;s common for patent infringement cases to target a whole laundry list of defendants. They all typically try to be dismissed and only one valid reason is needed for this to happen. If the suggestions for an amicable resolve don&apos;t satisfy me, aiming for a dismissal will probably be my next course of action.&lt;/p&gt;

&lt;p&gt;I&apos;ll keep you all posted!&lt;/p&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/7/19/thoughts_after_first_day</id>
			<issued>2008-07-19T10:34:53+0200</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-07-19T10:34:53+0200</dc:date>
		</entry>
	
		<entry>
			<title>Request for help : first time I have to deal with a patent infringement complaint</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/7/18/request_for_help_first_time_i_h" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-07-18T11:15:19+0200</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;I&apos;m reaching out to the collective experience of my readers. Today I received a letter from a US attorney that claims that &lt;a href=&quot;http://blablalist.com&quot;&gt;Bla-bla List&lt;/a&gt; infringes on &lt;a href=&quot;http://www.google.com/patents?vid=USPAT6917941&quot;&gt;US Patent No. 6,917,941&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bla-bla List has just been an experiment for me with Rich Internet Applications. It has always been an open-source effort and I made it available as a free service to see how well it would fare out in the wild. Since this service never generated any revenue for me, paying for a lawyer to dig into this is something that I&apos;d like the avoid (though maybe I can&apos;t).&lt;/p&gt;
&lt;p&gt;Has anyone here ever had to defend himself again such a claim? Does the software being open-source or the service being free make any difference?&lt;/p&gt;
&lt;p&gt;Thanks for any help or recommendations that you can give me.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;update:&lt;/b&gt; people have asked me for the lawyer&apos;s letter and the claim, I scanned it and you can download it as a 1MB PDF from &lt;a href=&quot;http://blablalist.com/ca-08-437.pdf&quot;&gt;http://blablalist.com/ca-08-437.pdf&lt;/a&gt; or browse through it online at &lt;a href=&quot;http://www.docstoc.com/docs/document-preview.aspx?doc_id=953027&quot;&gt;http://www.docstoc.com/docs/document-preview.aspx?doc_id=953027&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;update 2:&lt;/b&gt; seems I&apos;m not alone in this, they have sued about any list application out there : &lt;a href=&quot;http://www.techcrunch.com/2008/07/17/channel-intelligence-sues-just-about-everyone-who-offers-wishlists/&quot;&gt;http://www.techcrunch.com/2008/07/17/channel-intelligence-sues-just-about-everyone-who-offers-wishlists/&lt;/a&gt;&lt;/p&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/7/18/request_for_help_first_time_i_h</id>
			<issued>2008-07-18T11:15:19+0200</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-07-18T11:15:19+0200</dc:date>
		</entry>
	
		<entry>
			<title>Beware, Apple TV warranty isn&apos;t worldwide</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/7/16/apple_tv_warranty_isnt_worldwide" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-07-16T10:00:26+0200</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;When I was in the USA I bought an Apple TV and brought it back home to Belgium.&lt;/p&gt;
&lt;p&gt;Last night, it broke down entirely after just a couple of months of operation. When I hook it up to the power socket, nothing happens. The front light doesn&apos;t light up, and I can hear no noises of the hard drive spinning up either. Seems to me that either a fuse broke, or something else just fried.&lt;/p&gt;
&lt;p&gt;I spent some time with the Apple support line, both in the USA and in Belgium and they both say that I can only have it services in USA. I&apos;ll thus have to wait &apos;till my next trip to San Francisco in October to have the Apple TV repaired.&lt;/p&gt;
&lt;p&gt;This sucks, I thought that all Apple products had worldwide warranties, apparently some of them don&apos;t.&lt;/p&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/7/16/apple_tv_warranty_isnt_worldwide</id>
			<issued>2008-07-16T10:00:26+0200</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-07-16T10:00:26+0200</dc:date>
		</entry>
	
		<entry>
			<title>Gotcha: using RIFE&apos;s bean-centric validation with Terracotta (or any entity container/cache)</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/7/16/gotcha_rife_terracotta_validatio" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-07-16T09:37:30+0200</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;RIFE has a unique approach towards validation which is centralized around bean instances and not bean classes.&lt;/p&gt;
&lt;p&gt;Instead of having an external validation service, each bean instance publishes meta data about its constraints. Every part of the system (validation, form generation, database structure creation, ...) will inspect the meta data and peruse it. Validation is an exception in that after inspecting the meta data, the results of the validation are contributed back for each specific bean instance as &lt;code&gt;ValidationError&lt;/code&gt;s. This again allows every part of the system to easily access the validation results and act accordingly.&lt;/p&gt;
&lt;p&gt;Instead of implementing a container that keeps track of all the mappings between bean instances, their meta data and the validation errors, I decided that each bean instance will actually hold this data into fields. However, since people generally dont want to pollute their bean classes with framework-specific constructs, I created the &lt;a href=&quot;http://rifers.org/wiki/display/RIFE/Meta+data+merging&quot;&gt;meta-data merging facility&lt;/a&gt;. This automatically looks for a class with the &lt;code&gt;MetaData&lt;/code&gt; suffix when a bean class is loaded. Through byte code instrumentation, the capabilities of the &lt;code&gt;MetaData&lt;/code&gt; class are merged into the original class and you can safely cast each instance of the original class to any of the interfaces that the &lt;code&gt;MetaData&lt;/code&gt; class implements. (you can find more details about this feature in the &lt;a href=&quot;http://rifers.org/wiki/display/RIFE/Meta+data+merging&quot;&gt;RIFE wiki&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;All this is very intuitive when you use it in practice and develop a database-backed website. RIFE&apos;s database layer doesn&apos;t use an entity container either but rather creates and populates new bean instances each time an entity is fetched from the database. This has the benefit of each thread having a dedicated version of the entity which can be manipulated without risking data races. Only when all the operations are finished, the entity is stored back into the database through an explicit save call.&lt;/p&gt;
&lt;p&gt;The code could be like this when editing an existing &lt;code&gt;User&lt;/code&gt; entity:&lt;/p&gt;
&lt;div class=&quot;paste&quot;&gt;
&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_type&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;database&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;restore&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;userId&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;fillSubmissionBean&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(((&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;Validated&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;database&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;setBlock&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;success&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generateForm&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;However, when using Terracotta (or something else, like a cache), you typically don&apos;t want every entity to go back to the database. Instead, you want to keep them in memory and only store certain parts into the database. So instead of having a database manager, you have some kind of in-memory service that is able to find and store entities.&lt;/p&gt;
&lt;p&gt;Intuitively and naively you would replace the code above with the following &lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;broken code&lt;/span&gt;:&lt;/p&gt;

&lt;div class=&quot;paste&quot; style=&quot;border: 1px solid red&quot;&gt;
&lt;div&gt;&lt;code&gt;&lt;span style=&quot;background-color: rgb(255,200,200); color: red; font-weight: bold;&quot;&gt;// this code is broken, read below to know why&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgb(255,200,200);&quot;&gt;&lt;code&gt;
&lt;span class=&quot;java_type&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;service&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;userId&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div style=&quot;background-color: rgb(255,200,200);&quot;&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;fillSubmissionBean&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(((&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;Validated&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div style=&quot;background-color: rgb(255,200,200);&quot;&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;service&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;setBlock&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;success&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generateForm&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;The problem relies in the fact that each and every thread will be working with the same instance of the &lt;code&gt;User&lt;/code&gt;. Your initial reaction might be to just synchronize the accesses to this instance, but hang on, think about what&apos;s happening. You actually &lt;b&gt;don&apos;t want&lt;/b&gt; every thread to have the same instance. You want the instances to be different and isolated, they all have to contain the data that was submitted through their respective web forms, and you all want them to have their own validation errors. This is &lt;b&gt;exactly the same&lt;/b&gt; as what happens when you get a new instance from the database.&lt;/p&gt;
&lt;p&gt;So, instead of retrieving the user from the service to modify it with possibly invalid data, you want to create a new instance of the entity that will be in local scope until the validation has succeeded. Only then you want to store it back into the service. This guarantees that your data is always correct and also allows perfectly concurrent access on users with the same identifier.&lt;/p&gt;
&lt;p&gt;The correct code would thus be:&lt;/p&gt;
&lt;div class=&quot;paste&quot;&gt;
&lt;div&gt;&lt;code&gt;&lt;!--  : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class=&quot;java_type&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;getSubmissionBean&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;setId&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;userId&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(((&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;Validated&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;service&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;setBlock&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;content&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;&quot;success&quot;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generateForm&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;user&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;This had me scratching my head when I was bitten by the broken code above. However, if you think about it, it&apos;s perfectly logical. Working with in-memory containers is fundamentally different from working with relational database, where your data is stored independently from the actual objects that you&apos;re using. You have to remember that an in-memory container is a store too, and you don&apos;t want invalid or intermediate results to end up in there. However, this is what you risk to happen when you directly manipulate the fields of the instances that are already in the in-memory container ... but it&apos;s oh so tempting to do!&lt;/p&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/7/16/gotcha_rife_terracotta_validatio</id>
			<issued>2008-07-16T09:37:30+0200</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-07-16T09:37:30+0200</dc:date>
		</entry>
	
		<entry>
			<title>Videocast : Terracotta tuning and statistics recorder</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/7/4/videocast_terracotta_tuning_stat" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-07-04T09:48:42+0200</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;At this year&apos;s TSSJS Europe in Prague, we recorded a demo of how to tune an application for Terracotta. By changing the granularity of locks, I demonstrate how our statistics recorder allows you to visualize the application&apos;s behavior. This makes is easy to get a cluster-wide view of your application&apos;s characteristics and makes it a lot easy to identify areas that can be optimized.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://library.theserverside.com/detail/RES/1214576610_869.html?asrc=RSS_BP_KABPSOFTDEV&quot;&gt;You can watch the webcast here&lt;/a&gt;, after filling in a simple registration form.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/7/4/videocast_terracotta_tuning_stat</id>
			<issued>2008-07-04T09:48:42+0200</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-07-04T09:48:42+0200</dc:date>
		</entry>
	
		<entry>
			<title>Speaking at TSSJS 2008 Europe in Prague</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/5/21/speaking_at_tssjs_2008_europe" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-05-21T12:41:09+0200</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;Next month I&apos;ll be speaking at &lt;a href=&quot;http://javasymposium.techtarget.com/europe/speakers.html#GBevin&quot;&gt;TheServerSide.com Java Symposium&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The topics I will cover are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://javasymposium.techtarget.com/europe/sessions.html#GBevinBold&quot;&gt;Boldly Go Where the Java Language Has Never Gone Before&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://javasymposium.techtarget.com/europe/sessions.html#GBevinJVM&quot;&gt;JVM Clustering in the Real World&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;ve done both sessions before and they&apos;re pretty solid now.&lt;/p&gt;
&lt;p&gt;The &apos;Boldly go...&apos; one has been a huge success at JavaOne as it was booked completely full and I did a repeat session on Friday that still had quite good attendance.&lt;/p&gt;
&lt;p&gt;See you in Prague!&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://javasymposium.techtarget.com/europe/index.html&quot;&gt;&lt;img src=&quot;http://rifers.org/images/ImSpeakingatTSSJS.gif&quot; width=&quot;100&quot; height=&quot;100&quot; alt=&quot;speaking at TSSJS 2008&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/5/21/speaking_at_tssjs_2008_europe</id>
			<issued>2008-05-21T12:41:09+0200</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-05-21T12:41:09+0200</dc:date>
		</entry>
	
		<entry>
			<title>My first YouTube video : Robert Plant cover song</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/5/20/first_youtube_video" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-05-20T10:10:47+0200</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;I picked music back up after a loooong hiatus of 7 years. I decided to evolve together with the world and to broadcast myself &lt;img src=&quot;http://rifers.org/images/blog/emoticon-wink.gif&quot; width=&quot;16&quot; height=&quot;16&quot; alt=&quot;;)&quot; /&gt;.&lt;/p&gt;

&lt;p&gt;Did the first one last night. The song is &quot;All The Kings Horses&quot; from Robert Plant and the Strange Sensation. When I heard it playing last afternoon from my iTunes collection, I couldn&apos;t help picking up my guitar to figure out the chords and such. This recording is the result of a couple of hours searching and rehearsing. I&apos;m considering adding it to a concert repertoire I&apos;m preparing, as one of the few cover songs.&lt;/p&gt;

&lt;p&gt;Anyways, my YouTube channel is located at &lt;a href=&quot;http://www.youtube.com/gbevin&quot;&gt;http://www.youtube.com/gbevin&lt;/a&gt; and I&apos;ll be posting new entries as I learn and compose songs.&lt;/p&gt;

&lt;p&gt;Hope you enjoy it, and if you don&apos;t, still be nice &lt;img src=&quot;http://rifers.org/images/blog/emoticon-normal.gif&quot; width=&quot;16&quot; height=&quot;16&quot; alt=&quot;:)&quot; /&gt;&lt;/p&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.youtube.com/watch?v=Vwa0ZwxX_x8&quot;&gt;http://www.youtube.com/watch?v=Vwa0ZwxX_x8&lt;/a&gt;
&lt;/div&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
document.write(&quot;&lt;object width=\&quot;425\&quot; height=\&quot;373\&quot;&gt;&lt;param name=\&quot;movie\&quot; value=\&quot;http://www.youtube.com/v/Vwa0ZwxX_x8&amp;amp;hl=en&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6&amp;amp;border=1\&quot;&gt;&lt;/param&gt;&lt;param name=\&quot;wmode\&quot; value=\&quot;transparent\&quot;&gt;&lt;/param&gt;&lt;embed src=\&quot;http://www.youtube.com/v/Vwa0ZwxX_x8&amp;amp;hl=en&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6&amp;amp;border=1\&quot; type=\&quot;application/x-shockwave-flash\&quot; wmode=\&quot;transparent\&quot; width=\&quot;425\&quot; height=\&quot;373\&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&quot;);
//--&gt;
&lt;/script&gt;
&lt;noscript&gt;
&lt;object width=&quot;425&quot; height=&quot;373&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/Vwa0ZwxX_x8&amp;amp;hl=en&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;/object&gt;
&lt;/noscript&gt;
&lt;/div&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/5/20/first_youtube_video</id>
			<issued>2008-05-20T10:10:47+0200</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-05-20T10:10:47+0200</dc:date>
		</entry>
	
		<entry>
			<title>ScreenFlow : Finally a Mac screen capturing app that kicks ass</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/2/29/screenflow_finally_a_mac_screen" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-02-29T08:24:39+0100</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;I&apos;ve been recording all my screen casts with SnapzPro and then re-recording them with Camtasia Studio on Windows to be able to edit them. This is to say the least, extremely tedious.&lt;/p&gt;
&lt;p&gt;Yesterday I stumbled into &lt;a href=&quot;http://www.varasoftware.com/products/screenflow/&quot;&gt;ScreenFlow&lt;/a&gt;, an all-in one screen recording and video editing application with very cool features like call outs, video actions, key press display, etc. You can even capture audio from multiple sources and record your iSight at the same time as doing your screen cast. Afterwards you can combine them by manipulating the individual tracks and for example get a cool narrator call out that sits in a corner of the screen cast.&lt;/p&gt;
&lt;p&gt;I also like their approach towards the recording operation itself. You don&apos;t have to constraint yourself by deciding which area of the screen has to be recorded beforehand. With ScreenFlow you just record everything and crop it in the editor afterwards. They are using a custom algorithm that only records changes that appeared on the screen, so even my 2560x1600 resolution was recorded together with audio and the iSight video, without any sign of a hick-up. I love it!&lt;/p&gt;
&lt;p&gt;It might be a tad on the expensive side ($99), but considering the functionality that you get, I don&apos;t think it&apos;s exaggerated.&lt;/p&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/2/29/screenflow_finally_a_mac_screen</id>
			<issued>2008-02-29T08:24:39+0100</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-02-29T08:24:39+0100</dc:date>
		</entry>
	
		<entry>
			<title>Terracotta lightning talk at Fosdem 2008</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/2/15/terracotta_lightning_talk" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-02-15T11:09:33+0100</modified>
			<content type="text/html" mode="escaped">The yearly open-source Fosdem conference takes place again in Brussels on February the 23rd and the 24th.&lt;br /&gt;
&lt;br /&gt;
I&apos;m giving a 15 minute lightning talk about Terracotta on Saturday the 23rd at 15h40. Given the available time, I will not be able to say much and will just try to wet everybody&apos;s appetite. I&apos;ll stick around for a while afterwards to answer question and give demos and such.&lt;br /&gt;
&lt;br /&gt;
You can find the details here:&lt;br /&gt;
&lt;a href=&quot;http://fosdem.org/2008/schedule/events/456&quot; target=&quot;_blank&quot;&gt;http://fosdem.org/2008/schedule/events/456&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Looking forward to the conference and catching up with everyone in real life &lt;img src=&quot;http://rifers.org/images/blog/emoticon-nose.gif&quot; width=&quot;16&quot; height=&quot;16&quot; alt=&quot;:-)&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
</content>
			<id>http://rifers.org/blogs/gbevin/2008/2/15/terracotta_lightning_talk</id>
			<issued>2008-02-15T11:09:33+0100</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-02-15T11:09:33+0100</dc:date>
		</entry>
	
		<entry>
			<title>Laszlo in Action hits the shelves</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/2/5/laszlo_in_action" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-02-05T10:43:47+0100</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.manning.com/klein/&quot;&gt;&lt;img src=&quot;http://www.manning.com/klein/klein_cover150.jpg&quot; alt=&quot;cover&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;After many months of editing and fine-tuning, Manning finally published &lt;a href=&quot;http://www.manning.com/klein/&quot;&gt;Laszlo in Action&lt;/a&gt;, the first comprehensive guide towards OpenLaszlo besides the reference documentation.&lt;/p&gt;
&lt;p&gt;I received a final copy through DHL yesterday. Norman Klein and Max Carlson really did a great job explaining the technology behind this vast RIA framework, and it has been a pleasure to review several chapters of the earlier drafts.&lt;/p&gt;
&lt;p&gt;I&apos;m sure this book will make it much easier for people to develop with OpenLaszlo as it clarifies some of the lesser known intricacies.&lt;/p&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/2/5/laszlo_in_action</id>
			<issued>2008-02-05T10:43:47+0100</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-02-05T10:43:47+0100</dc:date>
		</entry>
	
		<entry>
			<title>Programming while lying on my back (lumbar disc hernia)</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/2/4/programming_while_lying_on_back" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-02-04T23:03:43+0100</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;After several months of constant pain in my back, I finally decided to get scans made of my spine. Turns out I have a double lumbar disc hernia (L4-L5 left and L5-S1 right). Luckily they are minor, so there not even talk of needing an operation.&lt;/p&gt;
&lt;p&gt;For the hernias to go away, I need to rest. I&apos;m supposed to lie flat on my back all the time with my legs folded in an angle. This should reduce the tension in my back and allow it to cure by itself. This position makes it however very difficult - almost impossible - to program while holding a laptop. I searched the web for appropriate laptop stands and stumbled into &lt;a href=&quot;http://lappyvator.cyberknights.com.au/&quot;&gt;&apos;The Lappyvator&apos;&lt;/a&gt;, a build-it-yourself project that is easy to execute. The only downside seems to me that your arms are in a vertical position and don&apos;t rest on anything at all, which is bound to be very tiring. Luckily, I use the &lt;a href=&quot;http://www.alphagrips.com/&quot;&gt;AlphaGrip&lt;/a&gt; as my keyboard, so I don&apos;t need to touch the laptop, eliminating this problem.&lt;/p&gt;
&lt;p&gt;Now I&apos;m able to work regular hours and totally rest my back. I haven&apos;t tried it yet, but it also seems like an awesome approach to watch movies or series in bed with the laptop.&lt;/p&gt;
&lt;p&gt;Below are the pictures of my own lappyvator. I&apos;ve built it so that I can easily remove the horizontal feet and take it with my in a suitcase when I travel: at last comfortable computing in hotel rooms!&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;640&quot; height=&quot;480&quot; src=&quot;http://gbevin.com/gallery2/main.php?g2_view=core.DownloadItem&amp;amp;g2_itemId=5518&amp;amp;g2_serialNumber=1&quot; alt=&quot;laptop stand bed 1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;640&quot; height=&quot;480&quot; src=&quot;http://gbevin.com/gallery2/main.php?g2_view=core.DownloadItem&amp;amp;g2_itemId=5520&amp;amp;g2_serialNumber=1&quot; alt=&quot;laptop stand bed 2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;640&quot; height=&quot;480&quot; src=&quot;http://gbevin.com/gallery2/main.php?g2_view=core.DownloadItem&amp;amp;g2_itemId=5522&amp;amp;g2_serialNumber=1&quot; alt=&quot;laptop stand bed 3&quot; /&gt;&lt;/p&gt;
</content>
			<id>http://rifers.org/blogs/gbevin/2008/2/4/programming_while_lying_on_back</id>
			<issued>2008-02-04T23:03:43+0100</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-02-04T23:03:43+0100</dc:date>
		</entry>
	
		<entry>
			<title>Closing several JDBC statements cleanly</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/1/30/closing_several_jdbc_statements" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-01-30T18:11:23+0100</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;It&apos;s been a while since I wrote some raw JDBC code. I didn&apos;t remember that it was so tedious to manually close a series of &lt;code&gt;PreparedStatement&lt;/code&gt; objects and make sure that any exception was properly handled and reported.&lt;/p&gt;
&lt;p&gt;Note that the &lt;a href=&quot;http://docs.google.com/View?docid=dffxznxr_1nmsqkz&quot;&gt;ARM blocks&lt;/a&gt; or &lt;a href=&quot;http://javac.info/&quot;&gt;BGGA closures&lt;/a&gt; proposals don&apos;t make this easier since this cleanup should be done after the prepared statements have been used for a while in various other methods, it doesn&apos;t automatically have to be done at the end of a lexical scope.&lt;/p&gt;
&lt;p&gt;This is what I came up with.&lt;/p&gt;
&lt;p&gt;Of course, you could write an alternative implementation that creates some kind of repository for the prepared statements in a map and then provide a method that closes them all by going over the entries of the map while preserving the exceptions in a similar manner. Any other suggestions or comments for this to be done better?&lt;/p&gt;
&lt;div class=&quot;paste&quot;&gt;
					
						&lt;div&gt;&lt;code&gt;&lt;!--  : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class=&quot;java_keyword&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;PreparedStatement&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;psStmt1&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_keyword&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;PreparedStatement&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;psStmt2&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_keyword&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;PreparedStatement&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;psStmt3&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_keyword&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;cleanup&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;throws&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;SQLException&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;SQLException&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;exception&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;psStmt1&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;psStmt1&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;SQLException&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exception&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;finally&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;psStmt1&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;psStmt2&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;psStmt2&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;SQLException&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;exception&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;setNextException&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;exception&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exception&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;finally&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;psStmt2&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;psStmt3&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;psStmt3&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_type&quot;&gt;SQLException&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;exception&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;setNextException&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;exception&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exception&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;finally&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;psStmt3&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;exception&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_operator&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_literal&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_keyword&quot;&gt;throw&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;exception&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_plain&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
						&lt;div&gt;&lt;code&gt;
&lt;span class=&quot;java_separator&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;java_plain&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
					
					
					
					
				&lt;/div&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/1/30/closing_several_jdbc_statements</id>
			<issued>2008-01-30T18:11:23+0100</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-01-30T18:11:23+0100</dc:date>
		</entry>
	
		<entry>
			<title>Custom constraints and validation in RIFE</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/1/29/custom_constraints_validation" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-01-29T17:52:51+0100</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;Joshua Hansen wrote a nice example of how to create custom meta data constraints and display dedicated validation error messages with RIFE. He also shows how easy it is to make RIFE/Crud display your validation errors for beans that use your custom constraints.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://rifers.org/wiki/display/RIFE/Custom+constraints+and+validation+cheatsheet&quot;&gt;Read the article in the RIFE wiki.&lt;/a&gt;&lt;/p&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/1/29/custom_constraints_validation</id>
			<issued>2008-01-29T17:52:51+0100</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-01-29T17:52:51+0100</dc:date>
		</entry>
	
		<entry>
			<title>Java Champions interviews at JavaPolis 2007</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/1/4/jc_javapolis_interviews" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-01-04T19:20:25+0100</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;At JavaPolis 2007, Aaron Houston the coordinator of the &lt;a href=&quot;https://java-champions.dev.java.net/&quot;&gt;Sun Java Champions program&lt;/a&gt;, recorded a whole collection of short interviews with the Java Champions that were present at the conference (2-8 mins).&lt;/p&gt;
&lt;p&gt;If you&apos;re wondering what the Java Champions are up to, or even who or what they are, this is a easy and quick way to find out.&lt;/p&gt;
&lt;p&gt;The interviews can be found on the Java Champions &lt;a href=&quot;https://java-champions.dev.java.net/&quot;&gt;homepage&lt;/a&gt; and will eventually move to the &lt;a href=&quot;https://java-champions.dev.java.net/content/JCLibrary.html&quot;&gt;library section&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can listen to my interview directly here (6 min 12 MB):&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://java-champions.dev.java.net/mp3/JP07-geert-bevin.mp3&quot;&gt;https://java-champions.dev.java.net/mp3/JP07-geert-bevin.mp3&lt;/a&gt;&lt;/p&gt;</content>
			<id>http://rifers.org/blogs/gbevin/2008/1/4/jc_javapolis_interviews</id>
			<issued>2008-01-04T19:20:25+0100</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-01-04T19:20:25+0100</dc:date>
		</entry>
	
		<entry>
			<title>Back in the saddle, happy New-Year!</title>
			<link rel="alternate" href="http://rifers.org/blogs/gbevin/2008/1/4/back_in_the_saddle" type="text/html" />
			<author>
				<name>Geert Bevin</name>
			</author>
			<modified>2008-01-04T16:02:47+0100</modified>
			<content type="text/html" mode="escaped">&lt;p&gt;Some people might have been wondering why it has been so quiet on the RIFE front and also why I haven&apos;t been blogging more regularly for almost half a year.&lt;/p&gt;
&lt;p&gt;First of all, I started working at &lt;a href=&quot;http://terracotta.org&quot;&gt;Terracotta&lt;/a&gt; in April 2007 and it has taken me a few months to get comfortable with the code-base, the concepts and the architecture. The technology is truly amazing and my colleagues are extremely smart and friendly. I&apos;ve been learning a lot about concurrency and clustering and made a couple of friends that are already very close to my heart.&lt;/p&gt;
&lt;p&gt;Then, in fall last year, it seems that fate decided to show us that life can&apos;t always be smooth sailing. I&apos;m not complaining, we have been surprisingly fortunate for many years but this series of unfortunate events followed up on each-other so quickly that for the first time in history I truly took an effort to write sincere New-Year wishes to my friends and family. Wishing someone &apos;good health&apos; and &apos;joy&apos; got a whole new meaning.&lt;/p&gt;
&lt;p&gt;First, I had a motorcycle accident and my girlfriend did so too a couple of weeks later. We weren&apos;t significantly hurt, but it does shake you up for a while.&lt;/p&gt;
&lt;p&gt;After that, our youngest daughter almost lost her eye after hitting her head against the table corner. She has nothing permanent except for a small scar in the corner of her left eye.&lt;/p&gt;
&lt;p&gt;A few weeks later, we were all evacuated out of our house with carbon-monoxide poisoning. Our oldest daughter escaped death by a couple of minutes and we had to get intense oxygen treatment to reduce the CO levels in our blood. People, really, &lt;a href=&quot;http://en.wikipedia.org/wiki/Carbon_monoxide_detector&quot;&gt;get CO detectors&lt;/a&gt;! CO poisoning is NOT something that only happens to others! You can die from it in a matter of minutes! I installed the detectors now and had the source of the CO leak fixed.&lt;/p&gt;
&lt;p&gt;Just after that, my father was found on the floor of his kitchen by the police. They forcibly entered his house at my request, since he hadn&apos;t been seen by anyone for several days. He&apos;s got permanent brain damage due to many years of alcohol abuse and will most certainly live the rest of his life in an institution, not remembering 99% of his life and constantly confusing dreams and reality.&lt;/p&gt;
&lt;p&gt;Finally, I lost my dog after she escaped from the enclosed field at the back of our house. After calling all animals shelters in the area, alerting the police and putting up many posters, someone finally contacted us saying that they had found her.&lt;/p&gt;
&lt;p&gt;All in all, after looking back, I actually consider ourselves lucky. All of these events could have had severe consequences, but finally the outcomes were all much more positive than what they could have been.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Happy New-Year to everyone! I wish you a soothing 2008 with lots of joy and pleasant surprises, and also an excellent health for you and your loved ones!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I&apos;m getting back in the saddle. I will be working on RIFE again and will be blogging more frequently.&lt;/p&gt;
</content>
			<id>http://rifers.org/blogs/gbevin/2008/1/4/back_in_the_saddle</id>
			<issued>2008-01-04T16:02:47+0100</issued>
			<dc:creator>Geert Bevin</dc:creator>
			<dc:date>2008-01-04T16:02:47+0100</dc:date>
		</entry>
	
	
</feed>