<?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>Matt's Blog</title>
	<atom:link href="http://blog.rueedlinger.ch/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rueedlinger.ch</link>
	<description>Software Engineering and Java</description>
	<lastBuildDate>Fri, 03 Feb 2012 21:59:24 +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>MySQL Workbench Visual C++ 2010 redistributable package not found</title>
		<link>http://blog.rueedlinger.ch/2012/02/mysql-workbench-visual-c-2010-redistributable-package-not-found/</link>
		<comments>http://blog.rueedlinger.ch/2012/02/mysql-workbench-visual-c-2010-redistributable-package-not-found/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 05:00:52 +0000</pubDate>
		<dc:creator>Matthias Rüedlinger</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.rueedlinger.ch/?p=447</guid>
		<description><![CDATA[I tried to start the MySQL Workbench ZIP (Archive) version on Windows and run I some trouble. The MySQL Workbench did not start up correctly and I got a message from windows that the program crashed. I also tried to &#8230; <a href="http://blog.rueedlinger.ch/2012/02/mysql-workbench-visual-c-2010-redistributable-package-not-found/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I tried to start the MySQL Workbench ZIP (Archive) version on Windows and run I some trouble.</p>
<p>The MySQL Workbench did not start up correctly and I got a<br />
message from windows that the program crashed.</p>
<p>I also tried to install the MySQL Workbench as MSI package but I got<br />
an error message that the <strong>Visual C++ 2010 redistributable package</strong> was not found.</p>
<p>To solve the problem you can download the Visual C++ 2010 redistributable package at<br />
<a href="http://www.microsoft.com/download/en/details.aspx?id=5555">http://www.microsoft.com/download/en/details.aspx?id=5555</a></p>
<p>After you have installed the Visual C++ 2010 redistributable package, the MySQL Workbench ZIP (Archive) version will start up correctly on Windows.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rueedlinger.ch/2012/02/mysql-workbench-visual-c-2010-redistributable-package-not-found/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reviewing Apache Maven Cookbook</title>
		<link>http://blog.rueedlinger.ch/2011/11/reviewing-apache-maven-cookbook/</link>
		<comments>http://blog.rueedlinger.ch/2011/11/reviewing-apache-maven-cookbook/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 17:09:49 +0000</pubDate>
		<dc:creator>Matthias Rüedlinger</dc:creator>
				<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://blog.rueedlinger.ch/?p=409</guid>
		<description><![CDATA[Packt publishing was so kind to give me an e-book version of their book Apache Maven Cookbook. The book has 9 Chapters and over 200 pages. As the name suggest, there some receipt for some common problems. For example when &#8230; <a href="http://blog.rueedlinger.ch/2011/11/reviewing-apache-maven-cookbook/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Packt publishing was so kind to give me an e-book version of their book <a href="http://www.packtpub.com/apache-maven-3-0-cookbook/book">Apache Maven Cookbook</a>. The book has 9 Chapters and  over 200 pages.<br />
As the name suggest, there some receipt for some common problems. For example when you want to start a new maven project with flex, hibernate, integrate hudson or create your own maven remote repository. </p>
<p><a href="http://www.packtpub.com/apache-maven-3-0-cookbook/book"><img src="http://blog.rueedlinger.ch/wp-content/uploads/2011/10/Apache-Maven-3-Cookbook.png" alt="" title="Apache Maven 3 Cookbook" width="125" height="152" class="alignnone size-full wp-image-412" /></a></p>
<p>When you are new to maven and want a broad overview how you can use maven in different setups then this book is just right for you.  This book is ideal addition for beginners which want to get started with maven very quickly. But when you want a detailed overview about the internals of maven this is not the right book for you. </p>
<p>Personally for me the interesting part was the chapter Extending Apache Maven. In this chapter it&#8217;s explained how you can easily write a apache maven plugin (MOJO). </p>
<h2>Conclusion</h2>
<p>So if you are new to maven and want a broad overview then this book is just right for you. It will give you in a quick way answers to common problems and  how to solve them. </p>
<p>If you have already experience with maven and use it with a SCM and CI server like Hudson, then this book is definitively not for you. </p>
<h2>Should I buy the book?</h2>
<p>It depends how experienced you are with maven?  But to be honestly some years earlier this book would be great to save us some time for our project setup.  It&#8217;s also a good addition to the other packt publishing book Apache Maven 2 Effective Implementation.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rueedlinger.ch/2011/11/reviewing-apache-maven-cookbook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to pass Professional Scrum Master I (PSM I)</title>
		<link>http://blog.rueedlinger.ch/2011/04/how-to-pass-professional-scrum-master-i-psm-i/</link>
		<comments>http://blog.rueedlinger.ch/2011/04/how-to-pass-professional-scrum-master-i-psm-i/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 18:49:52 +0000</pubDate>
		<dc:creator>Matthias Rüedlinger</dc:creator>
				<category><![CDATA[woolly thoughts]]></category>

		<guid isPermaLink="false">http://blog.rueedlinger.ch/?p=392</guid>
		<description><![CDATA[Few weeks ago I took a course for the Professional Scrum Master I (PSM I) in Zürich. It was a very good course which gives you some useful tips and a fundamental understating for the role as scrum master. After &#8230; <a href="http://blog.rueedlinger.ch/2011/04/how-to-pass-professional-scrum-master-i-psm-i/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Few weeks ago I took a course for the <a href="http://www.scrum.org/psmoverview/">Professional Scrum Master I (PSM I)</a> in Zürich. It was a very good course which gives you some useful tips and a fundamental understating for the role as scrum master.</p>
<p>After the two day course you can take the online assessment to receive the PSM I certificate. You can also take the online assessment without the two day course but I would not recommend it, because you changes to succeed will not as good when you take the course.</p>
<p>This was not my first assessment in English for a certificate, but honestly I was not so easy as I tough to pass.</p>
<p>For someone which English is a foreign language there are some tough and complex questions.     </p>
<p>When you take the course, read and and understand the <a href="http://www.scrum.org/scrumguides/">scrum guide</a>, have some experience with scrum and prepare yourself with the <a href="http://www.scrum.org/assessments/">open assessment</a> then you have a good change to pass the exam. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rueedlinger.ch/2011/04/how-to-pass-professional-scrum-master-i-psm-i/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Oracel 10g XE on Ubuntu 10.10 (64bit)</title>
		<link>http://blog.rueedlinger.ch/2011/03/oracel-10g-xe-on-ubuntu-10-10-64bit/</link>
		<comments>http://blog.rueedlinger.ch/2011/03/oracel-10g-xe-on-ubuntu-10-10-64bit/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 11:17:03 +0000</pubDate>
		<dc:creator>Matthias Rüedlinger</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.rueedlinger.ch/?p=366</guid>
		<description><![CDATA[So this post is based on the article form the following site http://littlebrain.org/2008/05/12/how-to-install-oracle-xe-in-ubuntu-64-bit/ and an addition to my previous blog how to install Oracle XE and GlassFish on an Ubuntu Linux. When you have a Ubuntu 64bit system you probably &#8230; <a href="http://blog.rueedlinger.ch/2011/03/oracel-10g-xe-on-ubuntu-10-10-64bit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So this post is based on the article form the following site<br />
<a href="http://littlebrain.org/2008/05/12/how-to-install-oracle-xe-in-ubuntu-64-bit/">http://littlebrain.org/2008/05/12/how-to-install-oracle-xe-in-ubuntu-64-bit/</a> and an addition to my previous blog how to install <a href="http://blog.rueedlinger.ch/2010/09/glassfish-3-and-oracle-10g-xe-on-ubuntu-linux-9-10/">Oracle XE and GlassFish on an Ubuntu Linux</a>. </p>
<p>
When you have a Ubuntu 64bit system you probably get the following error during the installation which was base on my previous post during an <strong>apt-get update</strong>.
</p>
<pre>
W: Failed to fetch http://oss.oracle.com/debian/dists/unstable/Release
Unable to find expected entry  main/binary-amd64/Packages in
Meta-index file (malformed Release file?)

E: Some index files failed to download, they have been
ignored, or old ones used instead.
</pre>
<p>Or when you install the packages manually you would get the following error:</p>
<pre>
dpkg: error processing libaio_0.3.104-1_i386.deb (--install):
 package architecture (i386) does not match system (amd64)
Errors were encountered while processing:
 libaio_0.3.104-1_i386.deb
</pre>
<p>So you have the download the packages <strong>libaio_0.3.104-1_i386.deb</strong> and <strong>oracle-xe-universal_10.2.0.1-1.1_i386.deb</strong>.</p>
<ul>
<li><a href="http://oss.oracle.com/debian/dists/unstable/main/binary-i386/libaio_0.3.104-1_i386.deb">http://oss.oracle.com/debian/dists/unstable/main/binary-i386/libaio_0.3.104-1_i386.deb</a></li>
<li><a href="http://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/oracle-xe-universal_10.2.0.1-1.1_i386.deb">http://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/oracle-xe-universal_10.2.0.1-1.1_i386.deb</a></li>
</ul>
<p>After that we must force the installation with option &#8211;force-architecture.</p>
<pre>
sudo dpkg -i --force-architecture libaio_0.3.104-1_i386.deb
sudo dpkg -i --force-architecture oracle-xe-universal_10.2.0.1-1.1_i386.deb
</pre>
<p>Now we can configure the Oracle XE. </p>
<pre>
sudo /etc/init.d/oracle-xe configure
</pre>
<p>In this configuration we change the apex default port from 8080 to 8081 because when you want to install GlassFish later there will be no conflict. GlassFish use 8080 as the default port an we want to keep it that way.</p>
<pre>
Specify the HTTP port that will be used for
Oracle Application Express = 8081

Specify a port that will be used for the
database listener = 1521

Specify a password to be used for database
accounts (SYS and SYSTEM) = system

Do you want Oracle Database 10g Express
Edition to be started on boot  = yes
</pre>
<p>After that we only must add the <strong>ORACLE_HOME</strong> and modify the <strong>PATH</strong> variable in our <strong>bashrc </strong>file.</p>
<pre>
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export ORACLE_SID=XE

export PATH
</pre>
<p>To install GlassFish an use with a Orcle XE Database go back to my previous post:<br />
<a href="http://blog.rueedlinger.ch/2010/09/glassfish-3-and-oracle-10g-xe-on-ubuntu-linux-9-10/">http://blog.rueedlinger.ch/2010/09/glassfish-3-and-oracle-10g-xe-on-ubuntu-linux-9-10/</a></p>
<p><strong>Reference:</strong><br />
How To Install Oracle XE in Ubuntu 64 Bit, Aldiantoro Nugroho, 2008,  <a href="http://littlebrain.org/2008/05/12/how-to-install-oracle-xe-in-ubuntu-64-bit/">http://littlebrain.org/2008/05/12/how-to-install-oracle-xe-in-ubuntu-64-bit/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rueedlinger.ch/2011/03/oracel-10g-xe-on-ubuntu-10-10-64bit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GlassFish 3 and Oracle 10g XE on Ubuntu Linux 9.10</title>
		<link>http://blog.rueedlinger.ch/2010/09/glassfish-3-and-oracle-10g-xe-on-ubuntu-linux-9-10/</link>
		<comments>http://blog.rueedlinger.ch/2010/09/glassfish-3-and-oracle-10g-xe-on-ubuntu-linux-9-10/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 13:43:48 +0000</pubDate>
		<dc:creator>Matthias Rüedlinger</dc:creator>
				<category><![CDATA[GlassFish]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.rueedlinger.ch/?p=192</guid>
		<description><![CDATA[This is an example infrastructure setup for a development environment which uses Oracle database 10g XE and GlassFish 3 as application server on an Ubuntu Linux 9.10. I wrote this blog post because I wanted to use GlassFish and Oracle &#8230; <a href="http://blog.rueedlinger.ch/2010/09/glassfish-3-and-oracle-10g-xe-on-ubuntu-linux-9-10/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is an example infrastructure setup for a development environment which uses Oracle database 10g XE and GlassFish 3 as application server on an Ubuntu Linux 9.10. </p>
<p>I wrote this blog post because I wanted to use GlassFish and Oracle XE on my laptop to test some examples and I thought maybe someone else could find this step by step guide useful.  </p>
<h2>Oracle 10g XE installation</h2>
<p><strong>Note</strong>: Some of the explanation how to install Oracle on ubuntu is based on the wiki entry from the ubuntu site. See <a href="https://help.ubuntu.com/community/Oracle10g">https://help.ubuntu.com/community/Oracle10g</a>.</p>
<p><b>Ubuntu 64bit</b></p>
<p>
If you try to follow this tutorial with an Ubuntu 64 bit check out the following site post <a href="http://blog.rueedlinger.ch/2011/03/oracel-10g-xe-on-ubuntu-10-10-64bit/">Oracel 10g XE on Ubuntu 10.10 (64bit)</a>.
</p>
<p>Before we install Oracle XE with apt-get we need to download and add the Oracle public key as trusted key.</p>
<pre>
wget&nbsp;http://oss.oracle.com/el4/RPM-GPG-KEY-oracle
sudo apt-key add RPM-GPG-KEY-oracle
</pre>
<p>Add the Oracle sources to <strong>/etc/apt/sources.list</strong> file.</p>
<pre>
deb http://oss.oracle.com/debian unstable main non-free
</pre>
<p>Update the sources and install Oracle XE.</p>
<pre>sudo apt-get update
sudo apt-get install oracle-xe-universal</pre>
<p>After the installation we can configure our Oracle XE installation with the following command.</p>
<pre>
sudo /etc/init.d/oracle-xe configure
</pre>
<p>The script asks for some configurations settings. It is important that you set the port for Oracle Application Express not to 8080, because GlassFish will use this port for the web applications. So we use instead the port 8081 for the Oracle Application Express (APEX).</p>
<pre>
Specify the HTTP port that will be used for
Oracle Application Express = <strong>8081</strong>

Specify a port that will be used for the
database listener = <strong>1521</strong>

Specify a password to be used for database
accounts (SYS and SYSTEM) = <strong>system</strong>

Do you want Oracle Database 10g Express
Edition to be started on boot  = <strong>yes</strong>
</pre>
<p><strong>Note</strong>: When the option startup on boot is set to NO then you will have problems to start and stop Oracle XE with the <strong>/etc/init.d/oracle-xe</strong> script. See <a href="http://forums.oracle.com/forums/thread.jspa?threadID=944382">http://forums.oracle.com/forums/thread.jspa?threadID=944382</a> for more details.</p>
<p>When you have problems (set started on boot = NO) this workaround could help. Start Oracle XE with</p>
<pre>
sudo /etc/init.d/oracle-xe enabled
sudo /etc/init.d/oracle-xe start
</pre>
<p>and stop it with</p>
<pre>
sudo /etc/init.d/oracle-xe stop
sudo /etc/init.d/oracle-xe disabled
</pre>
<p><strong>Note</strong>: With the script argument <strong>enabled</strong> / <strong>disabled</strong> you specifies if Oracle XE should automatically start when the system starts up.</p>
<p>The next step is to adjust the PATH settings, so that we can use sqlplus on our command line. The PATH variable is set in the <strong>.bashrc</strong> file.</p>
<p><strong>.bashrc</strong></p>
<pre>
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export ORACLE_SID=XE

export PATH
</pre>
<p>After the installation there are some shortcuts (Start Database, Run SQL Command Line, etc.) in our start menu so we need to add our system user to the <strong>dba</strong> group so that we are allowed to use them.</p>
<pre>
sudo usermod -g dba <em>my_user</em>
</pre>
<p>We create a directory where Oracle can store our tablespaces and give the system user <strong>oracle</strong> the rights to this directory.</p>
<pre>
sudo mkdir /var/local/oracle
sudo chown oracle /var/local/oracle/
</pre>
<h2>Setup the database</h2>
<p>To create a tablespace and database user we start sqlplus as database user system. </p>
<pre>
sqlplus system/my_password
</pre>
<p>For our example we create a tablespace glassfish_app and a database user. I created just a simple tablespace with the size of 10M and a maximum size of 200M. Be sure that your project have other requirements and adjust this settings to your need. See <a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7003.htm">http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7003.htm</a> for more details.</p>
<pre>
CREATE TABLESPACE glassfish_app DATAFILE '/var/local/oracle/glassfish.dbf'
     SIZE 10M
     AUTOEXTEND ON NEXT 200K
     MAXSIZE 200M;
</pre>
<p>For the tablespace glassfish_app we create our user glassfish and give him all rights. In a more serious environment you have to specify the privileges a bit better than I did.</p>
<pre>
CREATE USER glassfish
    IDENTIFIED BY glassfish
    DEFAULT TABLESPACE glassfish_app;

GRANT ALL PRIVILEGES TO glassfish;
</pre>
<h2>GlassFish installation</h2>
<p>Download the Platform-independent GlassFish (Full Platform) 3.0.1 ZIP from the <a href="https://glassfish.dev.java.net/">GlassFish</a> homepage and unzip the file.</p>
<pre>
unzip glassfish-3.0.1.zip
</pre>
<p>There should now be the directory glassfishv3 with the follwing content. </p>
<pre>
glassfishv3
            |-- bin
            |-- glassfish (1)
            |-- javadb (2)
            |-- mq (3)
            '-- pkg
</pre>
<ol>
<li>GlassFish the application server</li>
<li>The Derby database</li>
<li>Open MQ the message broker</li>
</ol>
<p>Next we need to install Java SDK 6.</p>
<pre>
sudo apt-get install sun-java6-jdk
</pre>
<p><strong>Note</strong>: GlassFish Installations require JDK 6. The minimum and certified version required version is 1.6.0_20. This is not a problem with the newest update of Ubuntu Linux 9.10 (Karmic Koala).</p>
<p>Again we modify our <strong>.bashrc</strong> file and add the GlassFish directory to the PATH variable. Set the $GLASSFISH_DIR variable to the directory where you have unzipped your GlassFish installation.</p>
<p><strong>.bashrc</strong></p>
<pre>
GLASSFISH_DIR=/home/mr/bin/glassfishv3
GLASSFISH_HOME=$GLASSFISH_DIR/glassfish
DERBY_HOME=$GLASSFISH_DIR/javadb
OPEN_MQ_HOME=$GLASSFISH_DIR/mq

PATH=$PATH:$GLASSFISH_HOME/bin:$DERBY_HOME/bin:$OPEN_MQ_HOME/bin
export GLASSFISH_HOME
export DERBY_HOME
export OPEN_MQ_HOME

export PATH
</pre>
<p>To use the scripts from Open MQ and Derby we put their bin directories also into the PATH variable.</p>
<p>The next step is to add the Oracle JDBC driver to the GlassFish lib directory. You should find the Oracle JDBC driver <strong>ojdbc14.jar</strong> in $ORACLE_HOME/jdbc/lib. Copy the ojdbc14.jar in your GlassFish domain lib/ext directory. The default domain in GlassFish is named domain1, so when your domain has a different name you should replace domain1 with your GlassFish domain name.</p>
<pre>
cp $ORACLE_HOME/jdbc/lib/ojdbc14.jar \
    $GLASSFISH_HOME/domains/domain1/lib/ext
</pre>
<p><strong>Note</strong>: When you want to install GlassFish 3 as service then these blog entries could help you: </p>
<ul>
<li><a href="http://blogs.sun.com/foo/entry/how_to_run_glassfish_v3">http://blogs.sun.com/foo/entry/how_to_run_glassfish_v3</a></li>
<li><a href="http://blogs.sun.com/foo/entry/run_glassfish_v3_as_a">http://blogs.sun.com/foo/entry/run_glassfish_v3_as_a</a></li>
</ul>
<h2>GlassFish configuration</h2>
<p>Now we have to start GlassFish and go to the GlassFish admin console http://localhost:4848 </p>
<pre>
asadmin start-domain
</pre>
<p><strong>Note</strong>: By default there is no password set. A password can be set in the menu Enterprise Server > Administrator Password. </p>
<p>We create now our Connection Pool with the following settings.</p>
<pre>
Pool Name: OraclePool
Resource Type: javax.sql.DataSource
Datasource Classname: oracle.jdbc.pool.OracleDataSource
</pre>
<p><a href="http://blog.rueedlinger.ch/wp-content/uploads/2010/09/oracle_pool.png"><img src="http://blog.rueedlinger.ch/wp-content/uploads/2010/09/oracle_pool-300x119.png" alt="" title="oracle_pool" width="300" height="119" class="alignnone size-medium wp-image-275" /></a></p>
<p>In the additional properties  we have to set password, username and the connection url. </p>
<pre>
URL: jdbc:oracle:thin:@localhost:1521:xe
Password: glassfish
User: glassfish
</pre>
<p><a href="http://blog.rueedlinger.ch/wp-content/uploads/2010/09/oracle_pool_properties.png"><img src="http://blog.rueedlinger.ch/wp-content/uploads/2010/09/oracle_pool_properties-300x79.png" alt="" title="oracle_pool_properties" width="300" height="79" class="alignnone size-medium wp-image-276" /></a></p>
<p>To test the connection click on the <strong>ping</strong> button. When all settings are valid you should receive a <em>&#8220;ping succeeded&#8221;</em>.<br />
<a href="http://blog.rueedlinger.ch/wp-content/uploads/2010/09/oracle_ping.png"><img src="http://blog.rueedlinger.ch/wp-content/uploads/2010/09/oracle_ping.png" alt="" title="oracle_ping" width="209" height="42" class="alignnone size-full wp-image-277" /></a><br />
<strong>Note</strong>: When the ojdbc14.jar is note found you should get a message like  <em>Class name is wrong or classpath is not set for : oracle.jdbc.pool.OracleDataSource Please check the server.log for more details.</em></p>
<p>The next step is to create a JDBC resource. Here we specify the Connection Pool and a JNDI name for our JDBC resource which can be used by our next Java EE project.</p>
<pre>
JNDI Name: jdbc/dbOraclePool
Pool Name: OraclePool
</pre>
<p><a href="http://blog.rueedlinger.ch/wp-content/uploads/2010/09/oracle_jdbc.png"><img src="http://blog.rueedlinger.ch/wp-content/uploads/2010/09/oracle_jdbc-300x135.png" alt="" title="oracle_jdbc" width="300" height="135" class="alignnone size-medium wp-image-278" /></a></p>
<h2>Finally&#8230;</h2>
<p>So it&#8217;s time for the fun part create a Java EE project which uses our new JDBC resource.<br />
I hope this post was useful and you get a quick start to setup your development infrastructure.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rueedlinger.ch/2010/09/glassfish-3-and-oracle-10g-xe-on-ubuntu-linux-9-10/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Initialize log4j with an EJB 3.1 Startup Bean</title>
		<link>http://blog.rueedlinger.ch/2010/09/initialize-log4j-with-an-ejb-3-1-startup-bean/</link>
		<comments>http://blog.rueedlinger.ch/2010/09/initialize-log4j-with-an-ejb-3-1-startup-bean/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 18:35:59 +0000</pubDate>
		<dc:creator>Matthias Rüedlinger</dc:creator>
				<category><![CDATA[EJB 3.1]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.rueedlinger.ch/?p=100</guid>
		<description><![CDATA[Some of you may be familiar with following log statement in your console or log file. log4j:WARN No appenders could be found for logger (com.foo.xxx). log4j:WARN Please initialize the log4j system properly. This happens when your application or a framework &#8230; <a href="http://blog.rueedlinger.ch/2010/09/initialize-log4j-with-an-ejb-3-1-startup-bean/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Some of you may be familiar with following log statement in your console or log file.</p>
<pre>log4j:WARN No appenders could be found for logger (com.foo.xxx).
log4j:WARN Please initialize the log4j system properly.</pre>
<p>This happens when your application or a framework like spring, hibernate, etc. tries to make a log statement and log4j is not yet initialized. The point is that you must configure your log4j before your application or framework tries to log something.</p>
<h2>Old School Servlet Approach</h2>
<p>In a web environment you could use a servlet with <strong>load-on-startup</strong> which specifies that the servlet should be loaded when the web application is started.  In that servlet you could initialize log4j, but that’s the old-fashioned way</p>
<pre>&lt;servlet&gt;
  &lt;servlet-name&gt;log4j-init&lt;/servlet-name&gt;
  &lt;servlet-class&gt;com.foo.Log4jInit&lt;/servlet-class&gt;
  &lt;init-param&gt;
    &lt;param-name&gt;log4j-init-file&lt;/param-name&gt;
    &lt;param-value&gt;WEB-INF/classes/log4j.lcf&lt;/param-value&gt;
  &lt;/init-param&gt;
<strong>  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</strong>
&lt;/servlet&gt;</pre>
<p>See <a href="http://logging.apache.org/log4j/1.2/manual.html">http://logging.apache.org/log4j/1.2/manual.html</a> for more Details.</p>
<h2>EJB 3.1 Approach</h2>
<p>With Java EE 6, especially EJB 3.1 we have the possibility to write an EJB 3.1 Application Startup Bean which can do the initialization of log4j for use.</p>
<pre>
@Singleton
@Startup
public class Log4jStartupBean{

   @PostConstruct
   private void startup() { ... }

   @PreDestroy
   private void shutdown() { ... }

    ...
}
</pre>
<p>What we need is our log4j.xml configuration file. I choose the approach to put the configuration file it in the META-INF directory and get the file path with <strong>Class.getResource(String name)</strong>. An alternative could be to use <strong>System.getProperty(String key)</strong> to get the file path to a system wide log4j configuration file set by your application server or by resource injection <strong>@Resource(name=&#8221;&#8230;&#8221;)</strong> from the EJB container.  </p>
<p>For the META-INF approach a typical mavenized project with a resources folder is all we need. </p>
<pre>
my-app
|-- pom.xml
`-- src
    |-- main
    |   |-- java
    |   |   `-- com
    |   |       `-- mycompany
    |   |           `-- app
    |   |               `-- Log4jStartupBean.java
    |   `-- resources
    |       `-- META-INF
    |           `-- log4j.xml
    `-- test
</pre>
<p><strong>Note</strong>: When your EJB 3.1 project is a WAR module and you use the META-INF approach you have to add the resources directory as <strong>webResources</strong> by the maven-war-plugin. See <a href="http://maven.apache.org/plugins/maven-war-plugin/">http://maven.apache.org/plugins/maven-war-plugin/</a></p>
<p>So now we just need to initialize log4J in the <strong>startup()</strong> Method in the <strong>Log4jStartupBean</strong> class.</p>
<pre>
@Singleton
@Startup
public class Log4jStartupBean{

   private static final String LOG4J_XML = "/META-INF/log4j.xml";
   private Logger logger = null;

     ...

   @PostConstruct
   public void startup() {
	URL url = this.getClass().getResource(LOG4J_XML);

	if(url == null || url.getFile().length() == 0) {
		throw new RuntimeException("Log4j config file "+ LOG4J_XML +" not found");
	}

	DOMConfigurator.configure(url.getFile());
	logger = Logger.getLogger(this.getClass());
	logger.info("logger initialized with "+ LOG4J_XML + "...");
         ...
   }
 ...
}
</pre>
<p>In this example code we used the <strong>DOMConfigurator</strong> class to configure log4j with a XML file. More information about the XML configuration can be found on the <a href="http://wiki.apache.org/logging-log4j/Log4jXmlFormat">log4j wiki</a> page.<br />
You could use a log4j properties file for the configuration but then you have to use the <strong>PropertyConfigurator</strong> class.</p>
<p>When you have other singelton startup beans and these beans also need to use log4j, we must determine the starting order of the beans with the <strong>@DependsOn</strong> Annotation.</p>
<p>For further Reading about EJB 3.1 I would recommend you the following sites:</p>
<ul>
<li><a href="http://blogs.sun.com/enterprisetechtips/entry/a_sampling_of_ejb_3">http://blogs.sun.com/enterprisetechtips/entry/a_sampling_of_ejb_3</a></li>
<li><a href="http://openejb.apache.org/singleton-ejb.html">http://openejb.apache.org/singleton-ejb.html</a></li>
</ul>
<p><strong>Note</strong>: How to configure multiple log4j for different war modules in a single EAR see <a href="http://stackoverflow.com/questions/762918/how-to-configure-multiple-log4j-for-different-wars-in-a-single-ear">http://stackoverflow.com/questions/762918/how-to-configure-multiple-log4j-for-different-wars-in-a-single-ear</a></p>
<p><strong>Note</strong>: I tested this example with <a href="https://glassfish.dev.java.net/">GlassFish 3.0.1</a> as WAR module.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rueedlinger.ch/2010/09/initialize-log4j-with-an-ejb-3-1-startup-bean/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pencil a cool open source GUI prototyping tool</title>
		<link>http://blog.rueedlinger.ch/2010/09/pencil-a-cool-open-source-gui-prototyping-tool/</link>
		<comments>http://blog.rueedlinger.ch/2010/09/pencil-a-cool-open-source-gui-prototyping-tool/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 17:49:55 +0000</pubDate>
		<dc:creator>Matthias Rüedlinger</dc:creator>
				<category><![CDATA[woolly thoughts]]></category>

		<guid isPermaLink="false">http://blog.rueedlinger.ch/?p=84</guid>
		<description><![CDATA[Recently I a coworker showed me the open source tool pencil, which is by the way very a cool tool for making diagrams and GUI prototyping. The following screenshots are taken from the pencil homepage (http://pencil.evolus.vn). Pencil is available as &#8230; <a href="http://blog.rueedlinger.ch/2010/09/pencil-a-cool-open-source-gui-prototyping-tool/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!-- p { margin-bottom: 0.08in; } -->Recently I  a coworker showed  me the open source tool <a href="http://pencil.evolus.vn">pencil</a>, which is by the way very a cool tool for making diagrams and GUI prototyping. The following screenshots are taken from the pencil homepage (<a href="http://pencil.evolus.vn">http://pencil.evolus.vn</a>).</p>

<a href='http://blog.rueedlinger.ch/2010/09/pencil-a-cool-open-source-gui-prototyping-tool/picturehandler-ashx/' title='PictureHandler.ashx'><img width="150" height="150" src="http://blog.rueedlinger.ch/wp-content/uploads/2010/09/PictureHandler.ashx_-150x150.jpg" class="attachment-thumbnail" alt="PictureHandler.ashx" title="PictureHandler.ashx" /></a>
<a href='http://blog.rueedlinger.ch/2010/09/pencil-a-cool-open-source-gui-prototyping-tool/picturehandler2-ashx/' title='PictureHandler2.ashx'><img width="150" height="150" src="http://blog.rueedlinger.ch/wp-content/uploads/2010/09/PictureHandler2.ashx_-150x150.jpg" class="attachment-thumbnail" alt="PictureHandler2.ashx" title="PictureHandler2.ashx" /></a>

<p><a href="http://pencil.evolus.vn">Pencil</a> is available as standalone application for linux and windows and can also be used as firefox plugin. For the next GUI prototyping session I will definitely give it a try.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rueedlinger.ch/2010/09/pencil-a-cool-open-source-gui-prototyping-tool/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eclipse with Ubuntu 9.10 (karmic)</title>
		<link>http://blog.rueedlinger.ch/2010/02/eclipse-with-ubuntu-9-10-karmic/</link>
		<comments>http://blog.rueedlinger.ch/2010/02/eclipse-with-ubuntu-9-10-karmic/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 21:43:56 +0000</pubDate>
		<dc:creator>Matthias Rüedlinger</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.rueedlinger.ch/?p=67</guid>
		<description><![CDATA[I had some problems running eclipse 3.5 with Ubuntu 9.10 (Gnome 2.28.0 and GTK+ 2.18). When I clicked on an &#8220;open window&#8221; button nothing happens. So after some googling I found that the problem is related with gtk. In version &#8230; <a href="http://blog.rueedlinger.ch/2010/02/eclipse-with-ubuntu-9-10-karmic/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I had some problems running eclipse 3.5 with Ubuntu 9.10 (Gnome 2.28.0 and GTK+ 2.18). When I clicked on an &#8220;open window&#8221; button nothing happens.</p>
<p>So after some googling I found that the problem is related with gtk. In version 2.18, GDK has been changed to use client-side windows.</p>
<p>I added the following start script for eclipse and the problem seems to be gone.</p>
<pre class="code">#!/bin/bash
GDK_NATIVE_WINDOWS=1  /home/mr/bin/eclipse-3.5/eclipse
</pre>
<p>Source:</p>
<p><a href="http://library.gnome.org/devel/gtk/2.18/gtk-migrating-ClientSideWindows.html ">http://library.gnome.org/devel/gtk/2.18/gtk-migrating-ClientSideWindows.html </a></p>
<p><a href="https://bugs.launchpad.net/ubuntu/+source/gtk+2.0/+bug/442078">https://bugs.launchpad.net/ubuntu/+source/gtk+2.0/+bug/442078</a> 9.10</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rueedlinger.ch/2010/02/eclipse-with-ubuntu-9-10-karmic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More readable and typeable&#8230;</title>
		<link>http://blog.rueedlinger.ch/2009/02/more-readable-and-typeable/</link>
		<comments>http://blog.rueedlinger.ch/2009/02/more-readable-and-typeable/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 22:27:00 +0000</pubDate>
		<dc:creator>Matthias Rüedlinger</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.rueedlinger.ch/?p=42</guid>
		<description><![CDATA[Hamcrest allows you to write readable constraints, which for example can be used with an assert statement. Hamcrest is included since JUnit 4.4 and it is the first time that third-party classes have been included in JUnit. But when you &#8230; <a href="http://blog.rueedlinger.ch/2009/02/more-readable-and-typeable/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/hamcrest/">Hamcrest</a> allows you to write readable constraints, which for example can be used with an assert statement. <a href="http://code.google.com/p/hamcrest/">Hamcrest</a> is included since <a href="http://junit.sourceforge.net/doc/ReleaseNotes4.4.html">JUnit 4.4</a> and it is the first time that third-party classes have been included in JUnit. But when you play around with Hamcrest and the <strong>assertThat</strong> statement you don&#8217;t want go back to old complex and unreadable assert statements.</p>
<h3>JUnit and assertThat</h3>
<p>With Hamcrest it&#8217;s very easy to write readable assert statements in a JUnit test case . In the following example we want to check if a person is older than 21 years.</p>
<pre class="code">import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.*;

...

Person person1 = new Person();
person1.setName("Bob");
person1.setAge(22);

<strong>assertThat</strong>(person1.getAge(), greaterThan(21));</pre>
<p>As you can see the assert statement is pretty straightforward. The second parameter of an assertThat statement is a Matcher which evaluates if the first parameter is greater than the integer value from the Matcher. This syntax allows you to think in terms of subject, verb, object and not in assertEquals.</p>
<p>Hamcrest uses Matcher which are responsible to evaluate a given statement. A good overview about Hamcrest is the <a href="http://code.google.com/p/hamcrest/wiki/Tutorial">official tutorial</a>.</p>
<p>JUnit currently ships with a few matchers, defined in <strong>org.hamcrest.CoreMatchers</strong> and <strong>org.junit.matchers.JUnitMatchers</strong>. To use the other matchers download the <strong>hamcrest-all.*.jar</strong> library.</p>
<h3>hamcrest-collections</h3>
<p><a href="http://code.google.com/p/hamcrest-collections/">hamcrest-collections</a> implements features such as select, reject, map, reduce and zip which can be used on collections. This is a useful library which uses Hamcrest to operate on collections.</p>
<p>The following example show how to select from a List of integers all numbers between 5 and 9.</p>
<pre class="code">import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrestcollections.Selector.*;

...

List&lt;Integer&gt; numbers = new ArrayList&lt;Integer&gt;();
for (int i = 0; i &lt;= 10; i++) {
	numbers.add(i);
}

Iterable&lt;Integer&gt; items = select(numbers, allOf(greaterThan(5), lessThan(9)));

System.out.println(items);</pre>
<p>Which genearte the following output:</p>
<pre class="code">[6, 7, 8]</pre>
<h3>Further reading&#8230;</h3>
<p>A good starting point as already mention is the <a href="http://code.google.com/p/hamcrest/">official Hamcrest Homepage</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rueedlinger.ch/2009/02/more-readable-and-typeable/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JYaml &#8211; YAML for Java</title>
		<link>http://blog.rueedlinger.ch/2009/02/jyaml-yaml-for-java/</link>
		<comments>http://blog.rueedlinger.ch/2009/02/jyaml-yaml-for-java/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 21:45:43 +0000</pubDate>
		<dc:creator>Matthias Rüedlinger</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.rueedlinger.ch/?p=41</guid>
		<description><![CDATA[“YAML Ain’t Markup Language” (abbreviated YAML) is a data serialization language designed to be human-friendly according to the official Yaml homepage. One implementation for the Java language is the JYaml framework. There are a lot of other YAML frameworks for &#8230; <a href="http://blog.rueedlinger.ch/2009/02/jyaml-yaml-for-java/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>“YAML Ain’t Markup Language” (abbreviated YAML) is a data serialization language designed to be human-friendly according to the official <a href="http://www.yaml.org">Yaml</a> homepage. One implementation for the Java language is the <a href="http://jyaml.sourceforge.net/">JYaml</a> framework.</p>
<p>There are a lot of other YAML frameworks for different languages. You find a list of some frameworks on the official <a href="http://www.yaml.org">Yaml</a> homepage.</p>
<h3>Short Introduction to YAML</h3>
<p>In YAML there are different kinds of nodes:</p>
<ul>
<li>Scalar is a value that can be presented as a series of zero or more Unicode characters.</li>
<li>Sequence is an ordered series of zero or more nodes.</li>
<li>Mapping is an unordered set of key: value node pairs, with the restriction that each of the keys is unique.</li>
</ul>
<p>YAML uses three dashes (“<strong>- &#8211; -</strong>”) to show that a document begins.  A comment is denoted by a <strong>#</strong>. In the following sections we now have a look at the YAML constructs sequences, mappings, tags, anchors and aliases.</p>
<p><strong>Sequence</strong><br />
A sequence is  a series of nodes, each denoted by a leading “<strong>-</strong>” indicator.</p>
<pre class="code">- Memoirs Found in a Bathtub
- Snow Crash
- Ghost World
</pre>
<p><strong>Mapping</strong><br />
A mapping represents a key: value pair.</p>
<pre class="code">Stanislaw Lem: Memoirs Found in a Bathtub
Neal Stephenson: Snowcrash
Daniel Clowes: Ghost World
</pre>
<p><strong>Tag</strong><br />
YAML represents type information of native data structures with a simple identifier, called a tag (<strong>!</strong>). The tag serves to restrict the set of possible values the content can have. In this example from JYaml the tag specifies from which type of class the node is.</p>
<pre class="code"><strong>!</strong>my.app.yaml.model.Book
</pre>
<p><strong>Anchors and Aliases</strong><br />
In the representation graph, a node may appear in more than one collection. An anchor is denoted by the <strong>“&amp;</strong>” indicator and an alias node by the “<strong>*</strong>” indicator. The alias refers to the most recent preceding node  having the same anchor.</p>
<pre class="code">- !my.app.yaml.model.Book
  authors:
    - <strong>&amp;3 </strong>!my.app.yaml.model.Author
      firstName: Gary
      lastName: Michaels
- !my.app.yaml.model.Book
  authors:
    - !my.app.yaml.model.Author
      firstName: Bob
      lastName: Jackson
    - <strong>*3</strong>
</pre>
<p>You find more detail about the YAML standard in the <a href="http://yaml.org/spec/1.2/">YAML specification</a>.</p>
<p><strong>Note</strong>: Some of the examples are from the homepage <a href="http://yaml.kwiki.org/?YamlInFiveMinutes">Yaml In Five Minutes</a>.</p>
<h3>JYaml</h3>
<p>When you want to serialize and deserialize Java classes with JYaml then all these classes have to obey the following Java beans naming convention.</p>
<ul>
<li>The class must have a public default constructor.</li>
<li>Set/get methods for properties</li>
</ul>
<p>JYaml currently supports the serialization and deserialization of the following types of Java objects:</p>
<ul>
<li>Primitives and respective wrapper classes</li>
<li>Collection (List and Set)</li>
<li>Maps</li>
<li>Arrays</li>
<li>BigInteger and BigDecimal</li>
<li>Date</li>
<li>Custom Java Objects by implementing ObjectsWrappers yourself</li>
</ul>
<p>JYaml is also in the maven repository. You have just to add the following lines in your <strong>pom.xml</strong> file.</p>
<pre class="code">&lt;dependency&gt;
 &lt;groupId&gt;org.jyaml&lt;/groupId&gt;
 &lt;artifactId&gt;jyaml&lt;/artifactId&gt;
 &lt;version&gt;1.3&lt;/version&gt;
&lt;/dependency&gt;</pre>
<h3>Data structure</h3>
<p>So we want to serialize and deserialize our data structure which are books and authors. The following line of codes shows you the simple data structure as Java code.</p>
<pre class="code">public class Book {

	private String isbn;
	private String title;
	private int pages;	

	private List&lt;Author&gt; authors = new ArrayList&lt;Author&gt;();

	public String getIsbn() {
		return isbn;
	}

	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public int getPages() {
		return pages;

	}

	public void setPages(int pages) {
		this.pages = pages;
	}

	public List&lt;Author&gt; getAuthors() {
		return authors;
	}

	public void setAuthors(List&lt;Author&gt; authors) {
		this.authors = authors;
	}
}

public class Author {

	private String firstName;
	private String lastName;

	private Date dateOfBirth;

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public Date getDateOfBirth() {
		return dateOfBirth;
	}

	public void setDateOfBirth(Date dateOfBirth) {
		this.dateOfBirth = dateOfBirth;
	}
}
</pre>
<h3>Serialize</h3>
<p>The serialize step is quite simple all work is done with the static methods from the <strong>org.ho.yaml.Yaml</strong> class.</p>
<pre class="code">List&lt;Book&gt; books = new ArrayList&lt;Book&gt;();

Book book1 = new Book();
book1.setIsbn("123-x");
book1.setTitle("YAML in Action");
book1.setPages(330);

Author author1 = new Author();
author1.setDateOfBirth(new Date());
author1.setFirstName("Gary");
author1.setLastName("Michaels");

book1.getAuthors().add(author1);

books.add(book1);

Book book2 = new Book();
book2.setIsbn("897-x");
book2.setTitle("JYAML for dummies");
book2.setPages(230);

Author author2 = new Author();

author2.setDateOfBirth(new Date());
author2.setFirstName("Bob");
author2.setLastName("Jackson");
book2.getAuthors().add(author2);
book2.getAuthors().add(author1);

books.add(book2);

// write to file
<strong>Yaml.dump(books, new File("books.yml"));</strong>
</pre>
<p>The output after the serialization process looks as follow:</p>
<pre class="code">---
- !my.app.yaml.model.Book
  authors:
    - &amp;3 !my.app.yaml.model.Author
      dateOfBirth: !java.util.Date "1234212351636"
      firstName: Gary
      lastName: Michaels
  isbn: 123-x
  pages: 330
  title: YAML in Action
- !my.app.yaml.model.Book
  authors:
    - !my.app.yaml.model.Author
      dateOfBirth: !java.util.Date "1234212351636"
      firstName: Bob
      lastName: Jackson
    - *3
  isbn: 897-x
  pages: 230
  title: JYAML for dummies
</pre>
<h3>Deserialize</h3>
<p>To obtain the Java objects from a YAML file you have just to add the following line of code:</p>
<pre class="code">List&lt;Book&gt; out = Yaml.loadType(new File("books.yml"), ArrayList.class);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.rueedlinger.ch/2009/02/jyaml-yaml-for-java/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

