<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3902685388636650994</id><updated>2012-01-26T03:01:41.122-02:00</updated><category term='ruby'/><category term='SQL'/><category term='capitalize'/><category term='Cygwin'/><category term='javaone2009'/><category term='ebay'/><category term='ebaydevcon08'/><category term='order by'/><category term='upper case'/><category term='Clojure'/><category term='PayPal'/><category term='swapcase'/><category term='include'/><category term='currency'/><category term='rubyonrails'/><category term='array'/><category term='model_auto_completer'/><category term='test'/><category term='find'/><category term='Jetty'/><category term='rails'/><category term='Conference'/><category term='uppercase'/><category term='sun'/><category term='javaOne'/><category term='date_formats'/><category term='ebaydevcon'/><category term='Apache'/><category term='Spring'/><category term='JEE'/><category term='javaone_2009'/><category term='Agile Scrum'/><category term='Struts'/><category term='JBoss'/><category term='lower case'/><category term='auto complete'/><category term='Subversion'/><category term='security'/><category term='Software Development'/><category term='HSQLDB'/><category term='format'/><category term='getResourceAsStream'/><category term='getResource'/><category term='Java'/><category term='Versioning'/><category term='Tomcat'/><category term='ruby on rails'/><category term='downcase'/><category term='Agile'/><category term='Maven'/><category term='HTML'/><category term='Scrum'/><category term='search'/><category term='ror'/><category term='Tools'/><category term='index'/><category term='ubuntu'/><category term='testing'/><category term='model'/><category term='password'/><category term='google'/><title type='text'>The Developer Corner</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thedevelopercorner.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>89</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6903592292293101714</id><published>2009-08-01T21:56:00.002-03:00</published><updated>2009-08-01T21:57:53.237-03:00</updated><title type='text'>Retirement of the blog</title><content type='html'>I do not have enough time to post articles in more than one place, so I will retire (at least temporarily) this blog in favor of my site &lt;a href="http://definenull.com"&gt;definenull&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hope to see you all there!&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Dani&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6903592292293101714?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6903592292293101714&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6903592292293101714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6903592292293101714'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/08/retirement-of-blog.html' title='Retirement of the blog'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-802467017946196066</id><published>2009-06-18T00:13:00.006-03:00</published><updated>2009-08-01T21:42:59.023-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='getResource'/><category scheme='http://www.blogger.com/atom/ns#' term='getResourceAsStream'/><title type='text'>Dude, where are my resources?</title><content type='html'>I was struggling with a stupid problem this week and it took me some time to realize what was going on, so I will post here the solution so nobody else needs to waste time on this matter again (and for future reference for myself as well ;)).&lt;br /&gt;&lt;br /&gt;I wanted to read a .csv (comma separated value) text file that was inside one package in my application. Consider the simplified version of my code in the tree below.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;src&lt;br /&gt;|- main&lt;br /&gt;    |- java&lt;br /&gt;         |- com&lt;br /&gt;             |- App.java&lt;br /&gt;             |- resources&lt;br /&gt;                 |- file.csv&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The App.java had this (simplified) code:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class App {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) throws IOException {&lt;br /&gt;      URL url = App.class.getResource("com/resources/file.csv");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The value of the variable &lt;code&gt;url&lt;/code&gt; was null. And there is one simple (and quite obvious once you find out) reason for this. The resource file was indeed in my src folder, but it was not in my destination folder where the classes were generated. As I am using &lt;a href="http://maven.apache.org"&gt;maven&lt;/a&gt;, this would be the &lt;code&gt;target&lt;/code&gt; folder.&lt;br /&gt;And why is this obvious? Because the &lt;code&gt;getResource&lt;/code&gt; method uses the ClassLoader of the calling class to find the resource you are looking for, and the realm of files the ClassLoader knows are in the classpath. As I was executing the code from my IDE, the classpath would be the compiled classes from sources. On top of that, the problem was that the text files not being copied to the destination folder.&lt;br /&gt;&lt;br /&gt;Thanks to Maven the solution was quite simple. As it is based on convention over configuration, all I did was to move the resources folder to the root of the &lt;code&gt;src/main&lt;/code&gt; folder like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;src&lt;br /&gt;|- main&lt;br /&gt;    |- java&lt;br /&gt;         |- com&lt;br /&gt;             |- App.java&lt;br /&gt;    |- resources&lt;br /&gt;        |- file.csv&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The App.java had this (simplified) new version of the code:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class App {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) throws IOException {&lt;br /&gt;      URL url = App.class.getResource("file.csv");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In summary, just make the resource available somewhere in your classpath: in the &lt;code&gt;target/classes&lt;/code&gt; folder or in the .jar you are generating.&lt;br /&gt;&lt;br /&gt;Find &lt;a href="http://www.definenull.com/node/14"&gt;this article&lt;/a&gt; also on &lt;a href="http://www.definenull.com/"&gt;definenull.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-802467017946196066?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=802467017946196066&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/802467017946196066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/802467017946196066'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/dude-where-are-my-resources.html' title='Dude, where are my resources?'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-4018293387606171012</id><published>2009-06-11T00:54:00.008-03:00</published><updated>2009-08-01T21:45:41.538-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Java in Ubuntu</title><content type='html'>Well, I am now just trying to use Ubuntu as a development environment. First thing I noticed is that there are more than one jre already installed by default in the system, and here is the evidence:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;jars@jars-desktop:~$ locate /rt.jar&lt;br /&gt;/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar&lt;br /&gt;/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/rt.jar&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I really wanted to use the Sun JDK for my development instead of OpenJDK, so I installed the Sun Java.&lt;br /&gt;&lt;br /&gt;Just type the command below and compare the results:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-jdk&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;jars@jars-desktop:/etc/alternatives$ &lt;span style="font-weight:bold;"&gt;sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-jdk&lt;/span&gt;&lt;br /&gt;Reading package lists... Done&lt;br /&gt;Building dependency tree       &lt;br /&gt;Reading state information... Done&lt;br /&gt;sun-java6-bin is already the newest version.&lt;br /&gt;sun-java6-jre is already the newest version.&lt;br /&gt;sun-java6-jre set to manually installed.&lt;br /&gt;Suggested packages:&lt;br /&gt;  sun-java6-demo sun-java6-doc sun-java6-source&lt;br /&gt;The following NEW packages will be installed:&lt;br /&gt;  sun-java6-jdk&lt;br /&gt;0 upgraded, 1 newly installed, 0 to remove and 14 not upgraded.&lt;br /&gt;Need to get 17.4MB of archives.&lt;br /&gt;After this operation, 55.7MB of additional disk space will be used.&lt;br /&gt;Get:1 http://de.archive.ubuntu.com hardy-updates/multiverse sun-java6-jdk 6-07-3ubuntu2 [17.4MB]&lt;br /&gt;Fetched 17.4MB in 3min23s (85.6kB/s)                                           &lt;br /&gt;Preconfiguring packages ...&lt;br /&gt;Selecting previously deselected package sun-java6-jdk.&lt;br /&gt;(Reading database ... 139447 files and directories currently installed.)&lt;br /&gt;Unpacking sun-java6-jdk (from .../sun-java6-jdk_6-07-3ubuntu2_i386.deb) ...&lt;br /&gt;sun-dlj-v1-1 license has already been accepted&lt;br /&gt;Setting up sun-java6-jdk (6-07-3ubuntu2) ...&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;But which of the two JVMs that now reside in my system area going to be used? Here it comes the ass-saving (and brand new to me) Ubuntu command:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo update-java-alternatives -s java-6-sun&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This will define Sun Java-6 as the default JVM in your system. If you prefer to do it step-by-step just type this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;jars@jars-desktop:~$ sudo update-alternatives --config java&lt;br /&gt;&lt;br /&gt;There are 2 alternatives which provide `java'.&lt;br /&gt;&lt;br /&gt;  Selection    Alternative&lt;br /&gt;-----------------------------------------------&lt;br /&gt; +        1    /usr/lib/jvm/java-6-openjdk/jre/bin/java&lt;br /&gt;*         2    /usr/lib/jvm/java-6-sun/jre/bin/java&lt;br /&gt;&lt;br /&gt;Press enter to keep the default[*], or type selection number: &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The next tricky step is to set the prefered order in which your JVMs shoud be used. To set this up just edit the &lt;code&gt;/etc/jvm&lt;/code&gt; file and include your recently installed JVM as the first one, so your file looks more or less like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# This file defines the default system JVM search order. Each&lt;br /&gt;# JVM should list their JAVA_HOME compatible directory in this file.&lt;br /&gt;# The default system JVM is the first one available from top to&lt;br /&gt;# bottom.&lt;br /&gt;&lt;br /&gt;/usr/lib/jvm/java-6-sun&lt;br /&gt;/usr/lib/jvm/java-gcj&lt;br /&gt;/usr/lib/jvm/ia32-java-1.5.0-sun&lt;br /&gt;/usr/lib/jvm/java-1.5.0-sun&lt;br /&gt;/usr&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ok, not ready yet, but I am not willing to return to Windows without doing this until the end! :)&lt;br /&gt;So, next step is setup the environment variables and if you want to set it system wide, edit the &lt;code&gt;/etc/profile&lt;/code&gt; file and append the following lines at the end:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;export JAVA_HOME=/usr/lib/jvm/java-6-sun&lt;br /&gt;export PATH=$PATH:$JAVA_HOME/bin&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You can also set the variables for only one user by editing &lt;code&gt;/home/$user_name$/profile&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Now test it!!&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;jars@jars-desktop:/etc/alternatives$ java -version&lt;br /&gt;java version "1.6.0_07"&lt;br /&gt;Java(TM) SE Runtime Environment (build 1.6.0_07-b06)&lt;br /&gt;Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You find &lt;a href="http://www.definenull.com/node/15"&gt;this article&lt;/a&gt; also on &lt;a href="http://www.definenull.com"&gt;definenull.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-4018293387606171012?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=4018293387606171012&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4018293387606171012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4018293387606171012'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/java-in-ubuntu.html' title='Java in Ubuntu'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6675893196607836982</id><published>2009-06-10T15:41:00.003-03:00</published><updated>2009-06-10T18:25:44.465-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><title type='text'>JavaOne 2009 Slides</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_CSQ--FucGP4/SjABTbAO5KI/AAAAAAAAB2A/qD-GJY2vJRY/s1600-h/san_francisco+(774)+(Medium).JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://2.bp.blogspot.com/_CSQ--FucGP4/SjABTbAO5KI/AAAAAAAAB2A/qD-GJY2vJRY/s320/san_francisco+(774)+(Medium).JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5345774190866654370" /&gt;&lt;/a&gt;&lt;br /&gt;You can download the slides from JavaOne 2009 conference from &lt;a href="http://developers.sun.com/learning/javaoneonline/j1online.jsp?track=embedded&amp;yr=2009"&gt;here&lt;/a&gt;. Just choose the track and find the slides.&lt;br /&gt;&lt;br /&gt;You need to be signed at the Sun Developer Network (SDN) to view/download the pdf.&lt;br /&gt;&lt;br /&gt;Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6675893196607836982?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6675893196607836982&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6675893196607836982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6675893196607836982'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/javaone-2009-slides.html' title='JavaOne 2009 Slides'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_CSQ--FucGP4/SjABTbAO5KI/AAAAAAAAB2A/qD-GJY2vJRY/s72-c/san_francisco+(774)+(Medium).JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-8515493315714339526</id><published>2009-06-04T15:25:00.003-03:00</published><updated>2009-06-04T15:42:48.020-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><title type='text'>JavaOne 2009: RESTful Transaction Systems</title><content type='html'>&lt;b&gt;Mark Little (JBoss CTO) and Michael Musgrove (Red Hat Tx)&lt;br /&gt;RESTful Transaction Systems&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;&lt;b&gt;Atomic Transactions &lt;/b&gt;should have a scoping mechanism that provides "all-or-nothing" semantics, enables shared resources to be protected from concurrent use and have ACID properties (Atomic, Consistent, Isolated, Durable)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;WS-Transactions in the past vas very hard to achieve transactional interaction among WS services; even JTS implementations didn't interoperate but WS provide the opportunity to leverage unparalleled interoparability&lt;/li&gt;&lt;br /&gt; &lt;li&gt;On B2B interaction, one cannot affort to lock resources on behalf of an individual indefinitely and maybe you need to undo a subset of the worh that's been done&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Possible Transaction Models for REST&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Atomic Transaction (XA/XTA) - status: specified and implementd&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Forward Compensation Base (WS-BP)- status: specified&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt; &lt;li&gt;Implementation for REST transaction for JBoss uses an uniform interface with HTTP and the usual methods (GET, PUT and POST) return the usual HTML code and some XML in the body&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Example URLs:&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;&lt;code&gt;GET &amp;lt;s&amp;gt;://&amp;lt;auth&amp;gt;/transaction-coordinator/active&lt;/code&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;&lt;code&gt;POST &amp;lt;s&amp;gt;://&amp;lt;auth&amp;gt;/transaction-coordinator/begin&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt; &lt;li&gt;Demo is using the transaction-coordinator (with a Proxy in Tomcat) and some Web Services in Python, &lt;a href="http://www.jboss.org/jbosstm"&gt;JBoss TM&lt;/a&gt; and RESTeasy&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-8515493315714339526?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=8515493315714339526&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8515493315714339526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8515493315714339526'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/javaone-2009-restful-transaction.html' title='JavaOne 2009: RESTful Transaction Systems'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6759887677550974921</id><published>2009-06-04T14:21:00.002-03:00</published><updated>2009-06-04T14:24:56.252-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><title type='text'>JavaOne 2009: Enterprise Application Integration Patterns</title><content type='html'>&lt;b&gt;Andreas Egloff (Sun) and Bruce Snyder (SpringSource)&lt;br /&gt;Enterprise Integration Patterns in Practice&lt;br /&gt;&lt;/b&gt;"A Design Pattern is a formal way to document a solution to a design problem ina particular field of expertise" - from Wikipedia&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;The presentation is based on the "&lt;a href="http://www.eaipatterns.com"&gt;enterprise integration patterns&lt;/a&gt;" book&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Stencils for Visual Studio in &lt;a href="http://www.eaipatterns.com/downloads.html"&gt;EAI Patterns web site&lt;/a&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Flexibility x Productivity: too little explicit support out-of-the-box but explicit support out-of-the-box is too rigid (does not fit your case or you are forced to go around) - the solution would be to extend those use cases&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Frameworks: &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt; and &lt;a href="https://fuji.dev.java.net/"&gt;Project Fuji&lt;/a&gt; (from OpenESB v3)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Camel supports routing of messages in a simple manner like, for instance, &lt;code&gt;from("A").to("B")&lt;/code&gt; and much more complex stuff like taking decisions in the route and where to route the message to; it also suppors a pipeline routing much like &lt;code&gt;from("file://myfile.txt").choice().when().method("MyBean","matches").to("Q").end().pipeline("B","C","D")&lt;/code&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Some Camel components: Atom, Bean, SEDA, SFTP, HTTP, FTP, Mock, XQuery, XSLT and much more (70+)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Project Fuji is the basis for OpenESB v3 and is a service platform to realize SOA based on Convention - Configuration - Code in that order; Light weight and OSGi based and not centred on JMS but on Services&lt;/li&gt;&lt;br /&gt; &lt;li&gt;The Project Fuji has a Web UI that allows the user to visually declare and configure services and program the connections and routing of services; it also offers a DSL (Integration Flow Language)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Bruce and Andreas went on some slides with examples of the patterns from EAI book and showed how those are implemented in Camel calls using Fuji interface to build them - it seems easy, but as they said in the beginning of the presentation, using out-of-the-box solutions might be too rigid; on the good side, you can write code using DSL and even pure Java, so it really might be an interesting solution for integration&lt;/li&gt;&lt;br /&gt; &lt;li&gt;After the slides, a quick live demo using Eclipse with some tools for Spring and Maven with archetypes for Apache Camel&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6759887677550974921?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6759887677550974921&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6759887677550974921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6759887677550974921'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/javaone-2009-enterprise-application.html' title='JavaOne 2009: Enterprise Application Integration Patterns'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-7212827457682032430</id><published>2009-06-03T20:58:00.005-03:00</published><updated>2009-06-03T21:00:01.222-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><title type='text'>JavaOne 2009: Coding REST and SOAP together</title><content type='html'>Martin Grebac and Jakub Podlesak from Sun Microsystems on Coding REST and SOAP together&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Using &lt;a href="http://metro.dev.java.net"&gt;METRO&lt;/a&gt; = JAXB + JAX-WS + WSIT and &lt;a href="https://jersey.dev.java.net/"&gt;Jersey&lt;/a&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;No deployment descriptors needed (use annotations) but still available if required; part of Java EE 5 and 6&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Why REST? Simplicity, Takes advantage of the existing caches and proxies, Serendipity, Scalability (HTTP load balancers)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Common JAX-WS/RS concepts should be supported&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Heavy using of annotations: @Path, @WebService, @GET, @Produces, @WebMethod, @XmlRootElement, @XmlAttribute etc.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Take care: do not fall into RPC over HTTP (REST-RPC hybrid), use compatible security (Securing SOA does not automatically secure the REST), &lt;b&gt;annotation hell&lt;/b&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Think about the consumers of your services and ask yourself if you really need SOAP and REST; consider using REST only in some parts of your application&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Use @WebMethod annotations to enable control over exposed SOAP methods&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-7212827457682032430?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=7212827457682032430&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7212827457682032430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7212827457682032430'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/coding-rest-and-soap-together.html' title='JavaOne 2009: Coding REST and SOAP together'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-4620599119376385447</id><published>2009-06-03T18:30:00.002-03:00</published><updated>2009-06-03T19:10:43.075-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><title type='text'>JavaOne 2009: Effective Java</title><content type='html'>Joshua Bloch in "Effective Java: still effective after all these years"&lt;br /&gt;First Edition of the famous book Effective Java was in 2001 and is now on its second edition from 2008 and it has new chapters on generics, enums, annotations, varargs, concurrency and Serialization&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;About Generics&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Unlike arrays, generics types are invariant: List &amp;lt;String&amp;gt; is not a subtype of List &amp;lt;Object&amp;gt;; Wildcard provide additional API flexibility&lt;/li&gt;&lt;br /&gt; &lt;li&gt;PECS - Producer extends, Consumer super (Mnemonic for Wildcard usage)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;How to write a container with an arbitrary number of type parameters: typesafe heterogenous container pattern - parameterize selector instead of container; present selector to container to get data; data is strongly typed at compile time; allows for unlimited type parameters&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt; &lt;br /&gt; &lt;li&gt;Enum Types&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;double temp = thermometer.getTemp(true)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;double temp = thermometer.getTemp(Temperature.FAHRENHEIT)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;double temp = thermometer.getTemp(FAHRENHEIT)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;which of the above would you prefer? :)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt; &lt;li&gt;Synchronized collections are largely obsolete; use ConcurrentHashMap and friends and Never sinchronize on a concurrent Collection&lt;/li&gt;&lt;br /&gt; &lt;li&gt;The Serialization Proxy Pattern - don't serialize instances of your class; instead, serialize instances of a small, struct-like class that concisely represents it, then reconstitue instances of your class at read time using a constructor that uses only its public methods - Sun uses this pattern on its EnumSet there is a private static final SerializationProxy&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The presentation is based on lots and lots examples of code, so it's kind of hard to resume them here! ;) In essence, it is probably a good idea to buy the new edition of the book! ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-4620599119376385447?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=4620599119376385447&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4620599119376385447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4620599119376385447'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/javaone-2009-effective-java.html' title='JavaOne 2009: Effective Java'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-5817530039684046804</id><published>2009-06-03T15:52:00.001-03:00</published><updated>2009-06-03T21:01:00.284-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><title type='text'>JavaOne 2009: Enterprise Build and Test in the Cloud</title><content type='html'>Carlos Sanchez from G2iX on Enterprise Build and Test in the Cloud&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tools:&lt;/li&gt;&lt;br /&gt; &lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Build: Apache Maven (build and more, start/stop AS, automatic deployment, execution of tests - &lt;b&gt;note&lt;/b&gt;: most people in the room use maven and not ant)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Test Cases: TestNG (they don't use JUnit) - unit/integration tests, parameterized tests, parallel testing - &lt;b&gt;note&lt;/b&gt;: not many people in the room uses TestNG&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Integration tests: Selenium - UI and integration testing, tests run in the browser, tests can be recorded, firefox plugin&lt;/li&gt;&lt;br /&gt; &lt;/ul&gt;&lt;br /&gt; &lt;li&gt;Continuus Integration: Apache Continuum - tight integration with Maven, dependency handling, trigger builds on defined conditions -  &lt;b&gt;note&lt;/b&gt;: not many people in the room use continuum&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Cloud Computing: Amazon Web Services - storage, queue service, manpower, computation&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Joke of the day: The #1 Programmer Excuse for legitimately slacking off: "my code's compiling" - credits XKCD&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Different setup for selenium grid: using a selenium hub brings no complexity to the developers or to the already written tests; setting up differente remote controls for differente environments (IE on Windows, Firefox on Linux, Safari on Mac) only depends on having the Selenium hub&lt;/li&gt;&lt;br /&gt; &lt;li&gt;TestNG will allow to run the same tests in the different environments that were setup by Selenium Grid&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Test Servers cost money: using the cloud allows to use on-demand servers, pay-per-hour, unlimited number of machines and start in a couple of minutes - no OS X offered by amazon&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Create Amazon Machine Images for each different environment you need to test your application - The machines are killed after the tests are run and you only pay for the time you use those machines&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Use &lt;b&gt;Maven EC2 &lt;/b&gt;plugin to start amazon AMIs, stop at the end of test and pass user data&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Found a &lt;a href="http://www.slideshare.net/carlossg/enterprise-build-and-test-in-the-cloud-apache-con-eu"&gt;different (but up to date) version&lt;/a&gt; of this presentation from Carlos Sanches at slideshare.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-5817530039684046804?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=5817530039684046804&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5817530039684046804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5817530039684046804'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/enterprise-build-and-test-in-cloud.html' title='JavaOne 2009: Enterprise Build and Test in the Cloud'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-5475955911502031268</id><published>2009-06-03T14:42:00.003-03:00</published><updated>2009-06-03T21:01:42.224-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><title type='text'>JavaOne 2009: Lessons Learned in ESB</title><content type='html'>Andreas Egloff and Frank Kleviet: ESB Lessons Learned&lt;br /&gt;Both speakers work now at Sun in the OpenESB project and come from a big vendor that sold EE products.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;ESB as a product comes with risks like, for instance, architecture concerns (good or bad for SOA?), more middleware, over-reliance on one provider&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Light weight non functional requirements: enterprise scale integration, change happens (decouple configuration), long term commitments (today's hot stuff is tomorrow's legacy)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Accomodate large teams: enterprises like to scale by adding people and this makes things harder: easy-to-learn is critical, provide tooling (automated testing &amp; integration) and keep the solution simple&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Tooling is great, but don't let it get in the way!&lt;/li&gt;&lt;br /&gt; &lt;li&gt;In their words: "Consultants tend to think that copying and pasting code make them more productive. And this is not true.!: Prefer convetion and configuration over coding! Support Patterns as first class citizens!&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Frameworks are poweful to reduce code duplication, but sometimes constrain flexibility: Interceptors are a powerful way to add flexibility&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Developers spend a lot of time waiting. It is necessary to shorten the change-build-deploy-test cycle, by reducing build time, deploy time with smapper deployables or in-place editing; increase testability and debuggability with built-in tests and support automation&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Modulartiy improves startuptime and performance by only loading what's necessary when it's needed. Modularity can help control complexity.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Reduce the artifacts per solution or make managing large numbers of artifats possible.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Connectivity Configuration: configuration belongs to run-time and not design or development time; deployables are used in different environments&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Message-based services more robust in face of change so avoid rebuilding the world for small business logic changes: use scripting languages, externalize business logic (e.g. CBR), consider evolution, versions in handling messages, externalize cross-cutting concerns (e.g. Aspects)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Patch Management! OSBi allows to declare a dependency on a specific version of a component, and this way it is not necessary to test the whole enterprise application because you need to upgrade one library&lt;/li&gt;&lt;br /&gt; &lt;li&gt;JMS if often a bottleneck - component-component message-passing can also be done without JMS; in-memory message exchange allows performance improvement. Just use JMS if it is really necessary&lt;/li&gt;&lt;br /&gt; &lt;li&gt;JMS has a proprietary wire protocol, requires yet more infrastructure; HTTP provides proven scalability and interoperability;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Avoid depending on one vendor only so stick with open standards, open-source: portability of skills of developers&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-5475955911502031268?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=5475955911502031268&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5475955911502031268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5475955911502031268'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/lessons-learned-in-esb.html' title='JavaOne 2009: Lessons Learned in ESB'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-353464244485438467</id><published>2009-06-03T13:03:00.002-03:00</published><updated>2009-06-03T21:03:16.077-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><title type='text'>JavaOne 2009: "Bug-free" code on Java 7?</title><content type='html'>Preventing Bugs with pluggable type checking by Michael Ernst&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;New Feature in Java 7&lt;/li&gt;&lt;br /&gt; &lt;li&gt;The motivation of the presentation is to help people to design a type system to solve a specific problem&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Java 7 has a new annotation syntax: e.g. List &lt;@NonNull String&gt; strings; or myGraph = (@Immutable Graph) tmpGraph;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Type Qualifiers improves documentation, find bugs in programs, guarantee the absence of errors and reduces the need for assertions and run-time checks&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Checkers are designed as compiler plug-ins (i.e. annotation processors) and use familiar messages; many checkers are being implementd in Java 7&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Michael said: "If you want to find some bugs in your code, Findbugs is ok. If you are a developer who cares, you'll want to find ALL your bugs, and this is the tool for that"&lt;/li&gt;&lt;br /&gt; &lt;li&gt;It is possible to create your own type checking annotations, and he showed us how to write a quick one to avoid SQL injection in our code that access the database&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Michael showed some statistics comparing FindBugs and the new Java 7 type checking; type checking found 8 bugs (20000 LOC) and findBugs none; on the other hand, type chacking demanded 35 annotations to be written throughout the code&lt;/li&gt;&lt;br /&gt; &lt;li&gt;It is said that annotations like these would clutter your code, but in my opinion it is a good trade-off for having a "bug-free" code&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Another interesting option that Type Checking offers, is that one can start doing the annotation of the code on a per-module or per-class basis, i.e. start with the most important parts of the code&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;The new release of Java 7 will be out this Friday June, 3rd.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-353464244485438467?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=353464244485438467&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/353464244485438467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/353464244485438467'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/bug-free-code-on-java-7.html' title='JavaOne 2009: &quot;Bug-free&quot; code on Java 7?'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-3905632689933294330</id><published>2009-06-02T17:41:00.002-03:00</published><updated>2009-06-03T21:02:21.506-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Clojure'/><title type='text'>JavaOne 2009: Clojures for the JVM by Rich Hickey</title><content type='html'>&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Fundamentals: it is a dynamic language and a new LISP, Functional, Supporting Concurrency, Compiles to JVM bytecode, not OO&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Why not OO? Because OO encourages mutable state and Mutable stateful objects are the new "spaghetti code". His words, not mine! :)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Supports a REPL (read-eval-print-loop)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Load/change code in running program&lt;/li&gt;&lt;br /&gt; &lt;li&gt;On Data Types it has, for example, Arbitrary Precision Integers, Ratios (no precision loss?), doubles, BigDecimals...&lt;/li&gt;&lt;br /&gt; &lt;li&gt;On Composite Data Structures it has, for example, Lists, Vectors, Maps, Sets and everything nests&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Data structures &lt;i&gt;are&lt;/i&gt; the code, not text-based syntax and everything is an expression&lt;/li&gt;&lt;br /&gt; &lt;li&gt;All data structures are immutable; performance problems are avoided by two rules: new versions are not full copies and make use of a structural sharing of data (this last one is kind of hard to put in a few words here)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Abstraction-based library built on concrete classes for structures with a Java Interface&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Clojure supports prallel computation, mostly because it focuses on concurrency, which is made easy by using immutable data; no locks needed&lt;/li&gt;&lt;br /&gt; &lt;li&gt;The only thing that mutate are references themselves, in a controlled way&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Clojure uses MVCC - Multiversion Concurrency Control through the command dosync which is the transactional control done by databases&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Clojure integration with Java is natural beacause the data types are the same as Java; it has debugging support and all the Java bytecode infrastructure works with Closure&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Why is it that everytime I see a brand new language or programming paradigm it reminds me of everything I learned 15 years ago at College? My words, not his! :)&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-3905632689933294330?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=3905632689933294330&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3905632689933294330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3905632689933294330'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/clojures-for-jvm-by-rich-hickey.html' title='JavaOne 2009: Clojures for the JVM by Rich Hickey'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-1861516082689926189</id><published>2009-06-02T15:53:00.002-03:00</published><updated>2009-06-03T21:04:01.178-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><title type='text'>JavaOne 2009: EJB 3.1Overview</title><content type='html'>EJB 3.1 Technology Overview by Kenneth Saks&lt;br /&gt;He spoke about the EJB 3.1 Spec which should be ready by end of the year.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;    &lt;li&gt;Session Bean with Local Business Interface; &amp;quot;No-interface&amp;quot; view client - it calls directly the business method from the EJB and it is not generated by the API&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Java EE Platform packaging will change to a simplified version; same behavior withoud need for ejb-jar&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;EJB 3.1 &amp;quot;lite&amp;quot; API; a small subset of EJB 3.1 API required by JavaEE pPlatform 6 Web Profile, which is made possible by the simplified .war packaging mentioned earlier (local session beans, transactions, declarative security and interceptors)&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Portable global JNDI Names for Remote and Local session beans; portable naming syntax with unique names defined globally, within application and per module&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;b&gt;EJB Component Testing&lt;/b&gt; tries to solve the problem that it is hard to test Local session beans and client-side EJB component; it is possible to run the EJB in an embeddable container in regular JSE&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;New features: &lt;b&gt;Singletons &lt;/b&gt;(new Session Bean component type, Container and Bean Managed Concurrency), Startup/shutdown callbacks, Caledar-based timers (created progammatically or automatically), Asynchronous session bean invocations (available for Stateful, Stateless and Singleton beans), JAX-RS Integration&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Glassfish v3 has the implementation for all these new features.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-1861516082689926189?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=1861516082689926189&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1861516082689926189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1861516082689926189'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/ejb-31overview-javaone.html' title='JavaOne 2009: EJB 3.1Overview'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6680798020725847857</id><published>2009-06-02T13:28:00.002-03:00</published><updated>2009-06-02T13:39:04.949-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='javaone2009'/><title type='text'>JavaOne 2009 General Session</title><content type='html'>The Opening General Session for Java One 2009 has just begun. We had presentations from Verizon, Intel, Sun itself with JavaFx. The first two were a little bit commercial, but the JavaFX quick presentation and introduction was interesting in the way that it showed what this technology is able to do!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6680798020725847857?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6680798020725847857&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6680798020725847857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6680798020725847857'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/06/javaone-2009-general-session.html' title='JavaOne 2009 General Session'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-29621612178536935</id><published>2009-05-16T02:15:00.003-03:00</published><updated>2009-08-01T21:46:46.605-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='swapcase'/><category scheme='http://www.blogger.com/atom/ns#' term='uppercase'/><category scheme='http://www.blogger.com/atom/ns#' term='lower case'/><category scheme='http://www.blogger.com/atom/ns#' term='capitalize'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='downcase'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><category scheme='http://www.blogger.com/atom/ns#' term='upper case'/><title type='text'>Lower Case, Upper Case and Capitalize in Ruby</title><content type='html'>&lt;p&gt;Ruby has some very straightforward methods to change the case of your strings.&lt;/p&gt;Here are some of them:&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;code&gt;"HoMer".downcase    # returns homer&lt;br /&gt;"lisa".upcase      # returns LISA&lt;br /&gt;"margie".capitalize       # returns Margie&lt;br /&gt;"BaRt".swapcase        #returns bArT&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;Just a quick one! :)&lt;br /&gt;&lt;br /&gt;Find &lt;a href="http://www.definenull.com/node/13"&gt;this article&lt;/a&gt; also on &lt;a href="http://www.definenull.com/"&gt;definenull.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-29621612178536935?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=29621612178536935&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/29621612178536935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/29621612178536935'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/05/lower-case-upper-case-and-capitalize-in.html' title='Lower Case, Upper Case and Capitalize in Ruby'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2027725461637626746</id><published>2009-05-16T01:59:00.005-03:00</published><updated>2009-08-01T21:47:30.954-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='array'/><category scheme='http://www.blogger.com/atom/ns#' term='index'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='find'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><category scheme='http://www.blogger.com/atom/ns#' term='include'/><title type='text'>Search an Array in Ruby</title><content type='html'>&lt;p&gt;If you want to search for a value in an array in Ruby you could do something like this:&lt;/p&gt;&lt;br /&gt;&lt;code&gt;array = ['Bart','Lisa','Maggie']&lt;br /&gt;array.include?('Homer') # returns false&lt;br /&gt;array.include?('Lisa') # returns true&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p&gt;Another possibility is to do this:&lt;/p&gt;&lt;br /&gt;&lt;code&gt;array = ['Bart','Lisa','Maggie']&lt;br /&gt;array.index 'Homer' # returns nil&lt;br /&gt;array.index 'Lisa' # returns 1&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p&gt;Both methods should work for searching an array.&lt;/p&gt;&lt;p&gt;For more information check the &lt;a href="http://www.ruby-doc.org/core/classes/Array.html#M002226"&gt;Ruby API for the Array Class.&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Cheers,&lt;/p&gt;&lt;p&gt;Dani&lt;/p&gt;&lt;br /&gt;Find &lt;a href="http://www.definenull.com/node/12"&gt;this article&lt;/a&gt; also on &lt;a href="http://www.definenull.com/"&gt;definenull.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2027725461637626746?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2027725461637626746&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2027725461637626746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2027725461637626746'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/05/search-array-in-ruby.html' title='Search an Array in Ruby'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6535976682601367461</id><published>2009-04-29T00:14:00.003-03:00</published><updated>2009-08-01T21:47:56.586-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cygwin'/><title type='text'>Which binary file am I running in Cygwin?</title><content type='html'>If you want to find out which of the binary versions of some file you are running under Cygwin you can try two commands: "which" and "type".&lt;br /&gt;&lt;br /&gt;&lt;code&gt;type -a ruby&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Should return something similar to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;16:55:17 ~$ type -a ruby&lt;br /&gt;ruby is /usr/bin/ruby&lt;br /&gt;ruby is /bin/ruby&lt;br /&gt;ruby is /usr/bin/ruby&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So would this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;which ruby&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Cheers!&lt;br /&gt;&lt;br /&gt;Find &lt;a href="http://www.definenull.com/node/11"&gt;this article&lt;/a&gt; also on &lt;a href="http://www.definenull.com/"&gt;definenull.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6535976682601367461?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6535976682601367461&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6535976682601367461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6535976682601367461'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/04/which-binary-file-am-i-running-in.html' title='Which binary file am I running in Cygwin?'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-1214350332640549901</id><published>2009-04-18T02:30:00.005-03:00</published><updated>2009-08-01T21:48:26.221-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ror'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='model_auto_completer'/><category scheme='http://www.blogger.com/atom/ns#' term='model'/><category scheme='http://www.blogger.com/atom/ns#' term='auto complete'/><title type='text'>Ruby on Rails Model Auto Completer</title><content type='html'>&lt;p&gt;When developing web applications nowadays, caring about user interaction is mandatory. Using Ajax technology to allow your system to show information without reloading the whole page is one of the features every web user is getting used to.&lt;/p&gt;One good example on this kind of interaction are those text boxes with auto completion. While the user types some name the system will automatically search for matches to those names in the database, offering sugestions on possible existing values.&lt;br /&gt;&lt;br /&gt;However, if such a text edit box is part of a form you also need to populate some hidden fields with the returned ids for the text you found on the database.&lt;br /&gt;&lt;br /&gt;Ruby offers a text edit option that will perform auto completion by searching in the database, but it does not populate another field.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://model-ac.rubyforge.org/" target="_blank"&gt;model_auto_completer&lt;/a&gt; plugin is perfect for this job! If you have, for example the following models, you can type (and lookup) the name of a contact directly in the Transaction form:&lt;br /&gt;&lt;p&gt;&lt;code&gt;class Contact &amp;lt; ActiveRecord::Base&lt;br /&gt;end &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;class Transaction &amp;lt; ActiveRecord::Base&lt;br /&gt;  belongs_to :contact&lt;br /&gt;end &lt;/code&gt;&lt;/p&gt;First thing you gotta do is to install the model_auto_completer plugin using the command:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;script/plugin install http://model-ac.rubyforge.org/svn/trunk/vendor/plugins/model_auto_completer&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;After doing this go ahead and install the default auto_complete plugin from rails:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;script/plugin install auto_complete&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then, in your view file, add the call to the method that will render the text_edit for the contact name and the one for the contact_id (which is hidden) will also be automatically added:&lt;br /&gt;&lt;p&gt;&lt;code&gt;&amp;lt;%= belongs_to_auto_completer :transaction, :contact, :name %&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The method in the Transaction controller which gets called by the ajax method must be named accodingly:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;def auto_complete_belongs_to_for_transaction_contact_name&lt;br /&gt;@contacts = Contact.find(&lt;br /&gt;:all,&lt;br /&gt;:conditions =&amp;gt; ['LOWER(name) LIKE ?', "%#{params[:contact][:name]}%"],&lt;br /&gt;:limit =&amp;gt; 10&lt;br /&gt;)&lt;br /&gt;render :inline =&amp;gt; '&amp;lt;%= model_auto_completer_result(@contacts, :name) %&amp;gt;'&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;One problem you might run into is to get an error messsage regarding the forgery protection. Something like this:&lt;/p&gt;&lt;code&gt;ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):&lt;br /&gt;c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/request_forgery_protection.rb:79:in `verify_authenticity_token'&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;This message is telling you that the POST command you are sending is not being understood by the gorgery protection mechanism. To overcome this problem, just add the command below to your Transactions Controller:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; protect_from_forgery :except =&amp;gt; [:auto_complete_belongs_to_for_transaction_contact_name]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, this is pretty much everything you need to make this plugin work. Have fun!!&lt;br /&gt;&lt;br /&gt;You find &lt;a href="http://www.definenull.com/node/10"&gt;this article&lt;/a&gt; also on &lt;a href="http://www.definenull.com/"&gt;definenull.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-1214350332640549901?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=1214350332640549901&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1214350332640549901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1214350332640549901'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/04/ruby-on-rails-model-auto-completer.html' title='Ruby on Rails Model Auto Completer'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-1995509124035148163</id><published>2009-04-09T04:00:00.001-03:00</published><updated>2009-04-09T04:02:24.846-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ror'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>Using forms in Ruby on Rails</title><content type='html'>I found &lt;a href="http://guides.rails.info/form_helpers.html#making-select-boxes-with-ease"&gt;this great guide&lt;/a&gt; on how to use forms in Ruby on Rails.&lt;br /&gt;It is quite complete and it comes with a lot of examples on how to create HTML form entries using Ruby on Rails.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-1995509124035148163?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=1995509124035148163&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1995509124035148163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1995509124035148163'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/04/using-forms-in-ruby-on-rails.html' title='Using forms in Ruby on Rails'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-4360294775176345572</id><published>2009-04-09T02:43:00.001-03:00</published><updated>2009-04-09T02:47:14.780-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google App Engine with Java</title><content type='html'>Google now offers the &lt;a href="http://code.google.com/appengine/docs/java/overview.html"&gt;possibility to use Java&lt;/a&gt; for its App Engine!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-4360294775176345572?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=4360294775176345572&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4360294775176345572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4360294775176345572'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/04/google-app-engine-with-java.html' title='Google App Engine with Java'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-4054538363316029074</id><published>2009-04-02T23:41:00.005-03:00</published><updated>2009-08-01T21:55:13.465-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ror'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>Running tests in the command line on Ruby on Rails</title><content type='html'>I normally run the test suite for my Ruby on Rails projects using the Netbeans test interface.&lt;br /&gt;&lt;br /&gt;Unfortunately this interface is only useful to run the whole suite. It does not offer (as it does for Java) the possibility to run a single test class or a single test from a test class.&lt;br /&gt;&lt;br /&gt;When I need to this I just go to the command line and type:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;ruby test/functional/accounts_controller_test.rb&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;But what if I need to run one single test from this test class?&lt;br /&gt;No problem, it is actually very easy. Just type:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;ruby test/functional/accounts_controller_test.rb --name test_should_create_account&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That's it!&lt;br /&gt;&lt;br /&gt;You can also find &lt;a href="http://www.definenull.com/node/9"&gt;this article&lt;/a&gt; on &lt;a href="http://www.definenull.com/"&gt;definenull.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-4054538363316029074?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=4054538363316029074&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4054538363316029074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4054538363316029074'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/04/running-tests-in-command-line-on-ruby.html' title='Running tests in the command line on Ruby on Rails'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6410627022127652970</id><published>2009-03-31T23:27:00.005-03:00</published><updated>2009-08-27T09:38:15.086-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ror'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='order by'/><category scheme='http://www.blogger.com/atom/ns#' term='model'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Ruby on Rails Order By Using Associated Model</title><content type='html'>&lt;p&gt;It is very easy to use an 'order by' clause in a model in Ruby on Rails. Supposing you have a Category model it's as simple as doing this:&lt;/p&gt;&lt;br /&gt;&lt;code&gt;@categories = Category.find(:all, :order =&amp;gt; 'title') &lt;/code&gt;&lt;br /&gt;&lt;p&gt;But what if I need to order by the title of the subcategories after ordering by the categories title?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Using the category_id does not work, because it is almost sure that the categories will not be added in alphabetical order, so the command below does not work for me:&lt;/p&gt;&lt;br /&gt;&lt;code&gt;@subcategories = Subcategory.find(:all, :order =&amp;gt; 'category_id,title')&lt;/code&gt;&lt;br /&gt;&lt;p&gt;And neither would work the sentence below, because the resulting SQL query will fail:&lt;/p&gt;&lt;br /&gt;&lt;code&gt;@subcategories = Subcategory.find(:all, :order =&amp;gt; 'category.title, title')&lt;/code&gt;&lt;br /&gt;&lt;p&gt;This last command will fail because rails does not recognize the Category model inside the subcategories model. So all you have to do is tell Rails that you want to include another model in the query, and this is done using the :include option from the find method:&lt;/p&gt;&lt;br /&gt;&lt;code&gt;@categories = Category.find(:all,:include =&amp;gt; :subcategories, :order =&amp;gt; 'categories.title, subcategories .title')&lt;/code&gt;&lt;br /&gt;&lt;p&gt;It is easy after you find out how! ;)&lt;/p&gt;&lt;br /&gt;&lt;a href="http://www.definenull.com/node/8"&gt;This article&lt;/a&gt; can also be found on &lt;a href="http://www.definenull.com/"&gt;definenull.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6410627022127652970?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6410627022127652970&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6410627022127652970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6410627022127652970'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/03/ruby-on-rails-order-by-using-associated.html' title='Ruby on Rails Order By Using Associated Model'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-3882113613396157960</id><published>2009-03-13T16:30:00.002-03:00</published><updated>2009-03-13T16:34:10.284-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='javaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>Sun Java One 2009 - topics released</title><content type='html'>Sun has released the &lt;a href="http://java.sun.com/javaone/2009/topics.jsp"&gt;topics&lt;/a&gt; for the Java One 2009 Conference, with four high-level areas: Mobility, Rich Media Applications and Interactive Content, Services and Core Content.&lt;br /&gt;&lt;br /&gt;It will happen in San Francisco in June, 2nd-5th.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-3882113613396157960?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=3882113613396157960&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3882113613396157960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3882113613396157960'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/03/sun-java-one-2009-topics-released.html' title='Sun Java One 2009 - topics released'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-920139134445091581</id><published>2009-03-07T17:45:00.005-03:00</published><updated>2009-08-01T21:50:28.814-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Cygwin personal setup</title><content type='html'>Some time ago I wrote a &lt;a href="http://thedevelopercorner.blogspot.com/search/label/Cygwin"&gt;post &lt;/a&gt;on how to setup the looks of your Cygwin bash shell using rxvt. Well, I normally add a few more settings to my environment just to make it more useful.&lt;br /&gt;&lt;br /&gt;I add the following lines to my ~/.bash_profile with some aliases to make it easier with directory surfing.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;alias ls='ls --color=auto'&lt;br /&gt;alias ll='ls -lsa'&lt;br /&gt;alias l='ls -la'&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It is also useful to set some preferences for vi, and this is done in the ~/.vimrc file:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;pre&gt;set textwidth=70 background=dark&lt;br /&gt;set is hls ic scs aw ruler ls=2&lt;br /&gt;syntax on&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I also like to create symbolic links at my home dir to allow me to have quick access to some of the original and most used folders in Windows, like:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ln -s /cygdrive/c/Documents\ and\ Settings/dambrosio/Desktop/ windesk&lt;br /&gt;ln -s /cygdrive/c/Documents\ and\ Settings/dambrosio/Meus\ documentos/ mydocs&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Some other useful symbolic links might be the ones pointing to your drives, because it is faster to type &lt;code&gt;cd ~/c &lt;/code&gt; than &lt;code&gt; cd /cygdrive/c &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Quick and clean! ;)&lt;br /&gt;&lt;br /&gt;Find &lt;a href="http://www.definenull.com/node/7"&gt;this article&lt;/a&gt; also on &lt;a href="http://definenull.com/"&gt;definenull.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-920139134445091581?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=920139134445091581&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/920139134445091581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/920139134445091581'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/03/cygwin-personal-setup.html' title='Cygwin personal setup'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-3251824528364101000</id><published>2009-03-03T01:57:00.003-03:00</published><updated>2009-08-01T21:50:58.137-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='format'/><category scheme='http://www.blogger.com/atom/ns#' term='date_formats'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>Change Default Date Format in Ruby on Rails</title><content type='html'>&lt;p&gt;Just a quick and simple hint!&lt;/p&gt;If you need to set the default formatting of dates throughout your whole application in Ruby on Rails, just add the following line to your "&amp;lt;your application&amp;gt;/config/environment.rb"&lt;br /&gt;&lt;code&gt;&lt;br /&gt;my_date_formats = {     :default =&amp;gt; '%d/%m/%Y'   }   &lt;br /&gt;&lt;br /&gt;ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(my_date_formats)  &lt;br /&gt;&lt;br /&gt;ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(my_date_formats) &lt;/code&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note 1&lt;/strong&gt;: Rails uses this :default format when attempting to write dates do the database, so be sure that your DBMS is able to use this new format&lt;/p&gt;&lt;strong&gt;Note 2&lt;/strong&gt;: you will need to restart your server so the changes will be effective.&lt;br /&gt;&lt;br /&gt;Find &lt;a href="http://www.definenull.com/node/6"&gt;this article&lt;/a&gt; also on &lt;a href="http://www.definenull.com/"&gt;Define Null&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-3251824528364101000?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=3251824528364101000&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3251824528364101000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3251824528364101000'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/03/change-default-date-format-in-ruby-on.html' title='Change Default Date Format in Ruby on Rails'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-8603885919686269202</id><published>2009-02-10T01:59:00.005-02:00</published><updated>2009-08-01T21:52:42.306-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='format'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><category scheme='http://www.blogger.com/atom/ns#' term='currency'/><title type='text'>Format Currency in Ruby on Rails</title><content type='html'>&lt;p&gt;I was looking for a way to display currency data coming from the database as a long. I found out that Ruby on Rails has a buil-in Module Helper method called &lt;span class="file-title-prefix"&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#M000520"&gt;ActionView::Helpers::NumberHelper:number_to_currency&lt;/a&gt; which allows one to format a number according to some options:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;:precision - Sets the level of precision (defaults to 2). &lt;/li&gt;&lt;br /&gt;&lt;li&gt;:unit - Sets the denomination of the currency (defaults to "$"). &lt;/li&gt;&lt;br /&gt;&lt;li&gt;:separator - Sets the separator between the units (defaults to "."). &lt;/li&gt;&lt;br /&gt;&lt;li&gt;:delimiter - Sets the thousands delimiter (defaults to ","). &lt;/li&gt;&lt;br /&gt;&lt;li&gt;:format - Sets the format of the output string (defaults to "%u%n").&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Using this method, we could write something like this:&lt;/p&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;%=h number_to_currency @transaction.value, :unit =&amp;gt; 'R$', :separator =&amp;gt; ",", :delimiter =&amp;gt; "." %&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;p&gt;This would work fine, but in this solution we are breaking the DRY (Don't Repeat Yourself) rule, because I would need to set the same parameters in every place I was displaying currency values.&lt;/p&gt;A better solution would be to have a helper method which I could use in every piece of code where I need a currency. So I came up with the solution below, which consists in writing my own helper method in app/helpers/application_helper.rb:&lt;br /&gt;&lt;br /&gt;&lt;code&gt; module ApplicationHelper&lt;br /&gt;&lt;br /&gt;number_to_currency(number,:delimiter =&amp;gt; ".", :unit =&amp;gt; "R$ ",:separator =&amp;gt; ",")&lt;br /&gt;end&lt;br /&gt;end&lt;/code&gt;&lt;br /&gt;&lt;p&gt;Now, in my templates I should write something like this:&lt;/p&gt;&lt;code&gt;&amp;lt;%=h real_currency @transaction.value %&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Ain't that easier?&lt;/p&gt;&lt;br /&gt;Find &lt;a href="http://www.definenull.com/node/5"&gt;this article&lt;/a&gt; also on &lt;a href="http://www.definenull.com/"&gt;Define Null&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-8603885919686269202?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=8603885919686269202&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8603885919686269202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8603885919686269202'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/02/format-currency-in-ruby-on-rails.html' title='Format Currency in Ruby on Rails'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-4380866723159058463</id><published>2009-01-20T02:32:00.002-02:00</published><updated>2009-01-20T02:37:21.962-02:00</updated><title type='text'>Top 25 most dangerous programming errors</title><content type='html'>A colleague at work just sent me &lt;a href="http://www.sans.org/top25errors/"&gt;this interesting list&lt;/a&gt; of the most dangerous programming errors.&lt;br /&gt;I think it a very thorough list considering the type of error the average programmer does and normally does not have the time (or interest, or knowledge, or whatever... :)) to care on a daily basis.&lt;br /&gt;&lt;br /&gt;The comments on what each error is and how to avoid are quite useful!&lt;br /&gt;&lt;br /&gt;Enjoy it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-4380866723159058463?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=4380866723159058463&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4380866723159058463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4380866723159058463'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/01/top-25-most-dangerous-programming.html' title='Top 25 most dangerous programming errors'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-3378723623379007611</id><published>2009-01-15T11:07:00.004-02:00</published><updated>2009-01-15T11:54:53.220-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Scrum - info and links for starters</title><content type='html'>Being a Certified Scrum Master and working with Scrum for over a year, people quite often come to me asking for directions about information on Scrum.&lt;br /&gt;I created this post to keep this information handy for me next time I am asked for this and to share it with the community.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li style="font-weight: bold;"&gt;&lt;a href="http://www.scrumalliance.org/"&gt;The Scrum Alliance&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Is, in their own words, "nonprofit organization committed to delivering articles, resources, courses, and events that will help Scrum users be successful". It was founded by Ken Schwaber, Mike Cohn and Esther Derby some of the founders of Scrum itself. There is one &lt;a href="http://www.scrumalliance.org/pages/what_is_scrum"&gt;specific article&lt;/a&gt; which points the user to important fundamentals of Scrum like sprints and user stories. The &lt;a href="http://www.scrumalliance.org/articles/39-glossary-of-scrum-terms"&gt;Glossary of Terms&lt;/a&gt; of Scrum is very useful tool for anyone browsing through Scum information through the web or books.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;&lt;a href="http://www.controlchaos.com/"&gt;Control Chaos&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Is "the home of the Certified ScrumMasters organization, offering training, gatherings, information, and materials regarding Scrum, including frequent articles". Amongst their resources you can find this &lt;a href="http://www.controlchaos.com/about/"&gt;brief overview&lt;/a&gt; of Scrum and&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;Videos&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://video.google.com/videoplay?docid=-7230144396191025011"&gt;This video&lt;/a&gt; (with legend) from Ken Schwaber is also a great introductory resource. It is a speech given by him at Google.&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;Books&lt;/li&gt;&lt;/ul&gt;In general, all the &lt;a href="http://www.amazon.com/exec/obidos/search-handle-url/ref=ntt_athr_dp_sr_1?_encoding=UTF8&amp;amp;search-type=ss&amp;amp;index=books&amp;amp;field-author=Ken%20Schwaber"&gt;books by Ken Schwaber&lt;/a&gt; regarding Scrum are great (if not the best) references for understanding and starting the use of Scrum in your company. I would begin with "&lt;a href="http://www.amazon.com/Agile-Project-Management-Microsoft-Professional/dp/073561993X"&gt;Agile Project Management With Scrum&lt;/a&gt;" and then, after having the basics in your mind read "&lt;a href="http://www.amazon.com/Enterprise-Scrum-Ken-Schwaber/dp/0735623376/ref=sr_1_4?ie=UTF8&amp;amp;s=books&amp;amp;qid=1232027231&amp;amp;sr=1-4"&gt;The Enterprise and Scrum&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-3378723623379007611?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=3378723623379007611&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3378723623379007611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3378723623379007611'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/01/scrum-info-and-links-for-starters.html' title='Scrum - info and links for starters'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-7236309578643588901</id><published>2009-01-13T01:22:00.004-02:00</published><updated>2009-01-13T01:41:28.730-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='password'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Take Care of your passwords</title><content type='html'>Now that even Barack Obama had his &lt;a href="http://blog.twitter.com/2009/01/monday-morning-madness.html"&gt;twitter password hacked&lt;/a&gt; by some kids using a brute force attack using a simple dictionary, makes a lot of sense to spread the word: take good care of your passwords.&lt;br /&gt;&lt;br /&gt;There is an interesting site called &lt;a href="http://www.passwordmeter.com/"&gt;passwordmeter.com&lt;/a&gt; with some functions that check how strong is a password. Try using it before adopting a new password.&lt;br /&gt;&lt;br /&gt;The site &lt;a href="http://www.whatsmypass.com/"&gt;whatsmypass &lt;/a&gt;just published a list with the worst &lt;a href="http://www.whatsmypass.com/?p=415"&gt;500 passwords ever&lt;/a&gt;. Do you use any of those? :)&lt;br /&gt;&lt;br /&gt;Here are the top 10:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;123456&lt;/li&gt;&lt;li&gt;password&lt;/li&gt;&lt;li&gt;12345678&lt;/li&gt;&lt;li&gt;1234&lt;/li&gt;&lt;li&gt;pussy&lt;/li&gt;&lt;li&gt;12345&lt;br /&gt;&lt;/li&gt;&lt;li&gt;dragon&lt;/li&gt;&lt;li&gt;qwerty&lt;/li&gt;&lt;li&gt;696969&lt;/li&gt;&lt;li&gt;mustang&lt;/li&gt;&lt;/ol&gt;Now, what the hell is "dragon" doing amongst the top 10? Are we really that geek?&lt;br /&gt;&lt;br /&gt;By the way, this list was compiled in a book by Mark Burnett called "Top 500 Worst Passwords Of All Time".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-7236309578643588901?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=7236309578643588901&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7236309578643588901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7236309578643588901'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/01/take-care-of-your-passwords.html' title='Take Care of your passwords'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2645675413702904332</id><published>2009-01-10T18:59:00.002-02:00</published><updated>2009-01-10T19:09:21.824-02:00</updated><title type='text'>Change Netbeans 6.5 IDE language</title><content type='html'>I downloaded and installed today the Netbeans 6.5 and for my surprise its IDE was in Portuguese. I prefer using the IDE in English, so I tried to change it using the way I remembered from previous versions, i.e. at the Tools menu. As it happens, it is not possible to change the language of the IDE through the interface, because it is based on the locale of your machine.&lt;br /&gt;&lt;br /&gt;After some experimenting and searching I found out that it is necessary to pass the locale to the IDE and force it to use something different from your system. So, go to the shortcut which starts your IDE (yep, using Windows here) and pass "--locale en:US" in the command line.&lt;br /&gt;&lt;br /&gt;It should look like something like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;"C:\Program Files\NetBeans 6.5\bin\netbeans.exe" --locale en:US&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2645675413702904332?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2645675413702904332&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2645675413702904332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2645675413702904332'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2009/01/change-netbeans-65-ide-language.html' title='Change Netbeans 6.5 IDE language'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-3629767585309919900</id><published>2008-11-04T10:43:00.003-02:00</published><updated>2008-11-04T10:47:00.755-02:00</updated><title type='text'>Speaker at PMI Congress in Brazil</title><content type='html'>Hello All,&lt;br /&gt;&lt;br /&gt;I will be presenting a case study on my experience on going from formal methodologies of project management into scrum. The &lt;a href="http://blog.pmipe.org.br/2008/10/20/i-congresso-pernambucano-de-gerenciamento-de-projetos/"&gt;conference &lt;/a&gt;will be in Recife - PE and is held by the PMI Chapter of Pernambuco.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Dani&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-3629767585309919900?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=3629767585309919900&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3629767585309919900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3629767585309919900'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/11/speaker-at-pmi-congress-in-brazil.html' title='Speaker at PMI Congress in Brazil'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2993680229026120228</id><published>2008-07-14T22:01:00.002-03:00</published><updated>2008-07-14T22:14:43.343-03:00</updated><title type='text'>Google Releases Web Security Assessment Tool</title><content type='html'>&lt;a href="http://www.google.com"&gt;Google&lt;/a&gt; has just released an open-source web security assessment tool called &lt;a href="http://code.google.com/p/ratproxy/wiki/RatproxyDoc"&gt;ratproxy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;"Ratproxy is a semi-automated, largely passive web application security audit tool."&lt;br /&gt;&lt;br /&gt;According to the documentation of the tool, ratproxy offers several important advantages over more traditional methods and tools like &lt;a href="http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project"&gt;WebScarab&lt;/a&gt;, &lt;a href="http://www.parosproxy.org/"&gt;Paros&lt;/a&gt;, &lt;a href="http://portswigger.net/proxy/"&gt;Burp&lt;/a&gt;, &lt;a href="http://www.isecpartners.com/proxmon.html"&gt;ProxMon &lt;/a&gt;and &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Pantera_Web_Assessment_Studio_Project"&gt;Pantera&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;No risk of disruptions.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Low effort, high yield.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Preserved control flow of human interaction. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;WYSIWYG data on script behavior.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Easy process integration. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Best way to decide, might be biving it a try!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2993680229026120228?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2993680229026120228&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2993680229026120228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2993680229026120228'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/07/google-releases-web-security-assessment.html' title='Google Releases Web Security Assessment Tool'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-8182511762722419311</id><published>2008-06-18T14:02:00.003-03:00</published><updated>2008-06-18T14:16:49.997-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PayPal'/><category scheme='http://www.blogger.com/atom/ns#' term='ebay'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Slides for Presentations</title><content type='html'>Unfortunately we did not receive a CD with all the presentations from the eBay Developer Conference 08 (eBay guys, here is a suggestion for ebaydevcon09) you can go to the &lt;a href="http://pages.ebay.com/devcon/conferencetracks/"&gt;Conference Sessions&lt;/a&gt; pages and download some pdfs of the presentations.&lt;br /&gt;&lt;br /&gt;Not all of the presentations are there at the moment!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-8182511762722419311?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=8182511762722419311&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8182511762722419311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8182511762722419311'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-slides-for-presentations.html' title='eBay DevCon 08 - Slides for Presentations'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-5905958468598258433</id><published>2008-06-18T13:29:00.004-03:00</published><updated>2008-06-18T14:14:04.059-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PayPal'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Wed18 11:30 PayPal Integration Strategies</title><content type='html'>This speak was given by &lt;span style="font-weight:bold;"&gt;Chad Hofman&lt;/span&gt; (Technical Integration Manager, PayPal) and &lt;span style="font-weight:bold;"&gt;Kurt Kellberg&lt;/span&gt; (Intgration Engineer, PayPal).&lt;br /&gt;&lt;br /&gt;API interfaces can be used by SOAP and NVP. It is recommended to use SOAP only if you really know SOAP. NVP is simple to use and can get you up and going easily.&lt;br /&gt;&lt;br /&gt;API Certificate Credentials are mandatory for large merchants and are a little bit safer than Signature Credentials. Handling timeouts is something that must be done by the developer integrating, though many APIs respond in less than one second and 95% of all API Responses under five seconds. APIs that move money takes longer.&lt;br /&gt;&lt;br /&gt;Logging is obviously a good idea for all developers and is recommended that at minimum onde should log the CorrelationID from the API Response and ideally to log the entire API Request and Response (make sure to strip out the sensitive data).&lt;br /&gt;&lt;br /&gt;Know the difference between ECS (Express Checkout Shortcut - it is a clickable button and must redirect to PayPal) and ECM (Express Checkout Mark - just a graphic, use with radio buttons or a drop-down menu). All graphics should be hosted at PayPal.&lt;br /&gt;&lt;br /&gt;The presentation showed on which flows and pages from the Express Checkout the developer integrating with PayPal may interfere with the look and information being displayed.&lt;br /&gt;&lt;br /&gt;This presentation is much more useful if you &lt;a href="http://pics.ebaystatic.com/aw/pics/devcon/2008/New%20Folder/Hoffman%20Kellberg_PayPal%20Integration%20Strategies_v05.pdf"&gt;download &lt;/a&gt;and read it. It is full of integration examples and pitfalls. Very useful to the developers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-5905958468598258433?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=5905958468598258433&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5905958468598258433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5905958468598258433'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-wed18-1130-paypal.html' title='eBay DevCon 08 - Wed18 11:30 PayPal Integration Strategies'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-3981203849123329068</id><published>2008-06-18T12:24:00.004-03:00</published><updated>2008-06-18T14:14:57.462-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebay'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Wed18 10:30 force.com &amp; eBay - Building apps in the Cloud</title><content type='html'>This speak was presented by &lt;span style="font-weight:bold;"&gt;Dave Carrol&lt;/span&gt;, Principal Developer Evangelist, Salesforce.com.&lt;br /&gt;&lt;br /&gt;By the way, there is a difference between force.com and salesforce.com. Force.com is the software platform which provides the services used by all the salesforces.com applications. Some of the services included in the force.com platform include, database, infrastructure, integration, logic, user interface and application exchange; all of those provided as a service.&lt;br /&gt;&lt;br /&gt;Salesforce business is based on &lt;span style="font-weight:bold;"&gt;SaaS&lt;/span&gt;, which stands for &lt;span style="font-weight:bold;"&gt;S&lt;/span&gt;oftware &lt;span style="font-weight:bold;"&gt;a&lt;/span&gt;s &lt;span style="font-weight:bold;"&gt;a&lt;/span&gt; &lt;span style="font-weight:bold;"&gt;S&lt;/span&gt;ervice, and offers a multitude of basic and advanced services that one can use to integrate and build your own application.&lt;br /&gt;&lt;br /&gt;Their infrastructure scales horizontally in a so-called Pod Architecture, with mirrored database clusters and app servers in 3 data-centers in US. The database service offers 8,700,00+ customizations and 160,000 SQL statements per sec allowing the user to create tables, add fields, build relationship, automatic backups etc.&lt;br /&gt;&lt;br /&gt;The Web Services SOAP API handles 1.75 billion API calls per month with a lifetime 28+ billion total API calls.&lt;br /&gt;&lt;br /&gt;There is an Apex code which is a language that allow users to program a logic which is compiled and run in the server. The integration of this language has some specific  database relation, like triggers for example, and is transactional. It is not a general language, but it has a Java-like instance, strongly typed, transactional, schema-aware and secured (no endless loops allowed). It is also possible a higher level of development based on declarative logic (point and click) and formula-based logic (similar to excel).&lt;br /&gt;&lt;br /&gt;Dave finished his presentation by showing the development platform (based on Eclipse) and creating a simple application using the web interface provided by the salesforce platform.&lt;br /&gt;&lt;br /&gt;Here is the link to the &lt;a href="http://pics.ebaystatic.com/aw/pics/devcon/2008/New%20Folder/Carroll_Force%20and%20eBay2_v04.pdf"&gt;presentation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-3981203849123329068?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=3981203849123329068&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3981203849123329068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3981203849123329068'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-wed18-1030-forcecom-ebay.html' title='eBay DevCon 08 - Wed18 10:30 force.com &amp; eBay - Building apps in the Cloud'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2348664422807083365</id><published>2008-06-18T11:37:00.006-03:00</published><updated>2008-06-18T13:50:56.686-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PayPal'/><category scheme='http://www.blogger.com/atom/ns#' term='ebay'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Wed18 09:30 eBay &amp; PayPal Trust &amp; Safety</title><content type='html'>This is a discussion panel having &lt;strong&gt;John Canfield &lt;/strong&gt;(Senior Director, Trust  &amp;Safety Global Policy Management) as moderator and &lt;strong&gt;Liam Lynch&lt;/strong&gt; (Senior Director, Marketplaces Chief security Strategist), &lt;strong&gt;Michael Barret &lt;/strong&gt;(VP, Information Risk Management, PayPal chief Information Security Officer) and &lt;strong&gt;Amjad Hanif &lt;/strong&gt;(Senior Director, Trust &amp; Safety Product Management) as panelists.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Q:&lt;/strong&gt; What suggestions would you give to PayPal developers to make their site safer? - The IT industry is not worried about security as it should, but the developers and customers are assured that PayPal do put a lot of effort on that, focusing on the basic issues (cross site scripting, sql injection and buffer overflow) is a big step forward. The PayPal and eBay teams rely on the community feedback to guide their development.&lt;br /&gt;&lt;br /&gt;PayPal &amp; eBay are more worried about the overall security of the users.&lt;br /&gt;&lt;br /&gt;Member to member communication on eBay will be done anonymously to prevent emails from being harvasted. All communication will be done through eBay platform. Another option will be to have an email used only to member to member communication.&lt;br /&gt;&lt;br /&gt;There were some complaints from users about their accounts being canceled on reports from other users related to fraud. The accounts are gone for a week, no matter how low is the percentage of violations reported on one account, specially for those dealing with brand products.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2348664422807083365?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2348664422807083365&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2348664422807083365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2348664422807083365'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-wed18-0930-ebay-paypal.html' title='eBay DevCon 08 - Wed18 09:30 eBay &amp; PayPal Trust &amp; Safety'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2954348294042921281</id><published>2008-06-17T17:16:00.002-03:00</published><updated>2008-06-17T17:26:47.701-03:00</updated><title type='text'>eBay DevCon 08 - They talked about me... :)</title><content type='html'>Today in the morning I spoke with &lt;span style="font-weight:bold;"&gt;Lucy Suros&lt;/span&gt;, who is a writer blogging about the eBay Dev Con. She was very kind during our conversation and told this brief chat on the &lt;a href="http://www.pdncommunity.com/pdn"&gt;PayPal Developer&lt;/a&gt; blog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"Just this morning I spoke with Daniel from Brazil. He works for UOL, one of the largest content providers in that country. He traveled all the way to Chicago to learn how he might be able to leverage PayPal for billing and payments, and was particularly interested in PayPal’s plans to more aggressively expand into Central and South America. UOL sounds like a cross between New York Times, iTunes, AOL, and craigslist. Daniel notes that Brazilians don’t feel safe entering their credit card information on the Web. Sounds to me like a perfect fit for PayPal."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pdncommunity.com/pdn/blog/article?message.uid=83407"&gt;Click here &lt;/a&gt;for the whole post!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2954348294042921281?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2954348294042921281&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2954348294042921281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2954348294042921281'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-they-talked-about-me.html' title='eBay DevCon 08 - They talked about me... :)'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-9075750415346526679</id><published>2008-06-17T16:40:00.004-03:00</published><updated>2008-06-17T17:59:24.848-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Tue17 14:30 Keynotes</title><content type='html'>Another keynote session started now with &lt;span style="font-weight:bold;"&gt;Rajiv Dutta&lt;/span&gt; (President of eBay).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Mike Shaver&lt;/span&gt; (Director of Ecosystem Development, Mozilla) is an Evangelist from Mozilla and came to present about The Web. "The web loves people" ... "We love the web right back"! He spoke about how developers can help make the web better, what are tools for web today, cloud computing, web-friendly sites,  firefox 3 etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="mailto:tony@zappos.com"&gt;Tony Hsieh&lt;/a&gt;&lt;/span&gt; (CEO, Zappos) co-founder of Link Exchange (was a cooperative advertising network) in 1996 sold to Microsoft in 1998 for US$ 265 million. He is now CEO of &lt;a href="http://www.zappos.com/"&gt;Zappos&lt;/a&gt;, a US$ 834 million business and spoke about his relation with the customers, focusing on the best service they can offer to them, listening to them (24x7 support and 1-800 number in every page). &lt;br /&gt;Zappos takes "the best sale for the customer" motto seriously: if a customer cannot find a referred show in their shop, they redirect the customer to one of the competitors' sites!!&lt;br /&gt;The word "transparency" was repeated many times during Tony's speak! Having the right culture and spreading (they have a book explaining the company's culture) to everyone. Tony shared some stories with the audience (flowers to the widow, money in the returned purse, pizza order) to emphasize the cultural aspects of the company and its employees. "Culture and brand are two sizes of the same coin".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;John Donahoe&lt;/span&gt; (President and CEO, eBay) is now on stage commenting on how eBay tries to assimilate this concept of focusing on the client just presented by Tony from Zappos, by executive meetings with them. He said at the beginning of his presentation "You [developers] are very important to us!". He also mentioned that eBay is very excited with Project Echo and asked for feedback, thoughts, support and ideas from the developer community.&lt;br /&gt;&lt;br /&gt;The days has reached an end (on eBay Devcon, at least) :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-9075750415346526679?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=9075750415346526679&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/9075750415346526679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/9075750415346526679'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-tue17-1430-keynotes.html' title='eBay DevCon 08 - Tue17 14:30 Keynotes'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2701390202229855411</id><published>2008-06-17T15:26:00.004-03:00</published><updated>2008-06-18T13:50:00.657-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PayPal'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Tue17 13:00 Fighting Online Fraud</title><content type='html'>This speak was given by &lt;span style="font-weight:bold;"&gt;Ryan D'Silva&lt;/span&gt; (Product Manager, Risk Tools, PayPal) about PayPal's fraud combat actions right after lunch today which, by the way, was really good.&lt;br /&gt;&lt;br /&gt;Online fraud nowadays is huge and the losses are bigger then the economies of some countries, including Ireland. Fraud costs everyone from the merchant and the customers to banks and PayPal (detection and investigation costs, customer dissatisfaction, accounts closing, dispute and claims costs) itself.&lt;br /&gt;&lt;br /&gt;Merchants are probably the ones suffering most of the part of theses losses, because banks and acquirers tend to support the buyer instead of the seller in these cases.&lt;br /&gt;&lt;br /&gt;Ryan spoke about the necessity on being &lt;a href="https://www.pcisecuritystandards.org/"&gt;PCI Compliant&lt;/a&gt; for the Seller. It is not mandatory, but it is a great idea, though keeping the locks closed is a very difficult task.&lt;br /&gt;&lt;br /&gt;The speak went on again on talking about how to avoid phishing and using the PayPal Security Key. A good resource on phishing fighting is &lt;a href="https://www.paypal.com/us/fightphishing"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It is important that each merchant identify what is fraud in his business, because these may vary a lot. Analyzing the transaction history for any account is a fundamental tool on understanding and identifying fraud indicators.&lt;br /&gt;&lt;br /&gt;After knowing your business, develop a process: Identify the riskiest payments, Investigate suspicious patterns, Contact and confirm their order, &lt;br /&gt;&lt;br /&gt;AVS (Address Verification Service) was presented as a service that could be used as an indicator for fraud. CVV2 may also be a tool to aid the fraud detection.&lt;br /&gt;&lt;br /&gt;Check on &lt;a href="http://www.worldbank.org/"&gt;worldbank.org&lt;/a&gt; fraud reports maps on countries that generate much suspicious activity, so you could use IP filtering and mapping.&lt;br /&gt;&lt;br /&gt;It was a very participative speak and at the end Ryan had to speed up a little bit so he gave a quick presentation on tools that PayPal offers to help merchants identify possible fraudulent purchases and buyers. They have a team of chargeback specialists to support false or fraudulent chargebacks.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.paypaldeveloper.com/pdn/forums"&gt;PayPal Developer forums&lt;/a&gt; are monitored to find questions related to fraud, and the developers will receive responses as fast as possible. PayPal has the most interest in helping developers to help their customers to fight fraud.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2701390202229855411?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2701390202229855411&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2701390202229855411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2701390202229855411'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-tue17-1300-fighting.html' title='eBay DevCon 08 - Tue17 13:00 Fighting Online Fraud'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2595000331622000023</id><published>2008-06-17T13:01:00.006-03:00</published><updated>2008-06-18T13:49:32.182-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PayPal'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Tue17 11:00 Phishing Lessons from the biggest fish in the sea...</title><content type='html'>This speak is about &lt;a href="http://en.wikipedia.org/wiki/Information_security"&gt;Information Security&lt;/a&gt;, given by &lt;span style="font-weight:bold;"&gt;Michael Barrett&lt;/span&gt; (Chief Information security Officer, PayPal).&lt;br /&gt;&lt;br /&gt;Trying to block fraudulent emails was not the answer because bad guys would increase the amount of email they sent. PayPal focused on the &lt;span style="font-style:italic;"&gt;backend&lt;/span&gt; to counter attack phishing. &lt;br /&gt;&lt;br /&gt;However, there is no silver bullet when fighting on-line fraud. The approach is educate and prevent. Preventing can be done by educating, and no consumer should ever click on links in emails, open a new browser nor go to "www.&lt;where-ever&gt;.com". The problem with these issues are that links are convenient for users, it would require hundreds of millions of users to change their behavior, and even more, it would require mass removal of links from emails. Trusting the email is one of the biggest challenges we have to overcome.&lt;br /&gt;&lt;br /&gt;One of the ways to start the education, are the web pages themselves. Give some space in your web site to inform the user what Phishing is and how to avoid it.&lt;br /&gt;&lt;br /&gt;Another step PayPal took was to talk to the ISPs. There are thousands of ISPs around the world, but they are talking to the larger ones (which respond to about 50% of e-mails sent today). This was a very effective approach and they are now signing their messages and the user have visually the information on his/her inbox about which messages have been signed.&lt;br /&gt;&lt;br /&gt;The security team of PayPal talks a lot about Safer Browser. Use built-in blacklists which are supported by the new browsers and other configuration and add-ons to turn your browser more intelligent on handling phishing sites.&lt;br /&gt;&lt;br /&gt;Extended Validation Certificates which is "just another" SSL certificate. PayPal uses verisign to provide these certificates, but is recommended to suggest this kind of certificate to the merchants site, and this will help consumers to trust their web sites and also the whole community dealing with selling and paying on-line. This functionality will show a green bar on your web browser URL indicating you this is a safe web site.&lt;br /&gt;&lt;br /&gt;PayPal is using a Security Key, an electronic token, and over 70% of PayPal security Key users were likely to use PayPal more because of it.&lt;br /&gt;&lt;br /&gt;Again, partnership is key. Michael speaks about the Unified Front, a partnership including PayPal, eBay, Tahoo!, Google, MSN, Verisign, AOL and the Law Enforcements Authorities in USA. Normally, companies do not share what they are doing to run their business, but when the subject comes to fraud detection and prevention, sharing information is the best solution. &lt;br /&gt;&lt;br /&gt;This is what they've been doing and the number of Phishing related to Paypal has decreased dramatically since 03/2006. This study and results can be found in one pdf they have &lt;a href="http://www.thepaypalblog.com/weblog/files/a_practical_approach_to_managing_phishing_april_2008.pdf"&gt;published&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2595000331622000023?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2595000331622000023&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2595000331622000023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2595000331622000023'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-tue17-1100-phishing.html' title='eBay DevCon 08 - Tue17 11:00 Phishing Lessons from the biggest fish in the sea...'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-7244117128274347145</id><published>2008-06-17T12:18:00.004-03:00</published><updated>2008-06-17T12:51:32.181-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Tue17 10:00 It's all about money</title><content type='html'>This speak from &lt;span style="font-weight:bold;"&gt;Jason Korosec&lt;/span&gt; (GM, Developer Platform, Product Management, PayPal) has started as a lesson on the history of money, currency and value behind it. That is not what the abstract for the speak promised, but it has been a quite interesting lesson... so far! ;)&lt;br /&gt;&lt;br /&gt;&lt;a href="mailto:jkorosec@paypal.com"&gt;Jason &lt;/a&gt;showed the value network where PayPal acts, as an intermediator on the relation between Seller and Buyer to the whole financial system (Payment Network, Issuer Bank and Acquirer Bank).&lt;br /&gt;&lt;br /&gt;PayPal claims the developer community (and helps them doing it) to build applications that would allow the Seller and Buyer to use the whole Value Network in a simpler manner.&lt;br /&gt;&lt;br /&gt;As a suggestion, one should take the PayPal Developer Certification exam and this would open the doors to reach the Buyers and Sellers in need, or even those who still don't know what they need.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-7244117128274347145?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=7244117128274347145&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7244117128274347145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7244117128274347145'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-tue17-1000-its-all-about.html' title='eBay DevCon 08 - Tue17 10:00 It&apos;s all about money'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-7197801225229593375</id><published>2008-06-17T11:12:00.012-03:00</published><updated>2008-06-18T13:49:00.812-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PayPal'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Tue17 09:30, PayPal technology Roadmap &amp; Panel Discussion</title><content type='html'>This speak is a panel with the presence of &lt;span style="font-weight:bold;"&gt;Gleen Lim&lt;/span&gt; (General Manager, alliances and Developer Services) as moderator, &lt;span style="font-weight:bold;"&gt;Dickson Chu&lt;/span&gt; (VIP Global Product), &lt;span style="font-weight:bold;"&gt;Matthew Mengerink&lt;/span&gt; (VP Core Technologies), &lt;span style="font-weight:bold;"&gt;Osama Bedier&lt;/span&gt; (VP, Technology and Engineering).&lt;br /&gt;&lt;br /&gt;The first question was about providing a better API for shipping (FedEx for example), and the reply is that this will be considered next year in the roadmap.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Q:&lt;/span&gt; Another question was about being able to join more than one account into one drop-down and being able to transfer money between them (like husband and wife). The answer is that this is fundamental feature in the core of the fraud system and a hard to change paradigm. The PayPal team informed that one possibility would be the sub-account feature. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Q:&lt;/span&gt; The IPN was intended to be a guaranteed way for the customer to receive any message related to his/her account. There were some recent problems and they are redesigning the system (today it tries for 16 times to send a message) from the ground. It was asked to have a simple button to resend and IPN and they informed the next API will allow someone to ask for IPNs from a starting date to an ending date.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Q:&lt;/span&gt; About shipping? - today is not possible to send an update status to eBay platform like, for example, telling PayPal that the items were shipped; PayPal answer is that they will think hard about.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Q:&lt;/span&gt; Sending money API? - it is definitely coming. It is also coming a Split Payment API.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Q:&lt;/span&gt; What are the plans for global expansions? - they are expanding through the globe aggressively. Central and South America are interesting markets for them. They just rolled out in Mexico and Brazil. These regions are exciting for them and will be a focus.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Q:&lt;/span&gt; Support to libraries? - PayPal will not support anymore the libraries that were distributed in the past.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Q: &lt;/span&gt;Advanced information about features? - today they are doing release notes; asking developers on what to they want to be exposed within PayPal. PayPal is a web company (innovates like mad) and is also a payments company (needs stability). This year it is more a dialog about new features and not a one-way communication, i.e. PayPal wants to hear the developers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Note:&lt;/span&gt; PayPal wants to help the developers help their customers. This seems to be main topic during this conference. Lots of the moves from PayPal show this and it is the right way to go. If we look at eBay, nowadays they have a community of 70000 developers. Which company could afford that? And they get it "for free". The development of a more complete, stable and secure API  is also a concern for the company.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Q:&lt;/span&gt; Will it be possible to add other email addresses and migrate accounts from old emails (which are not used anymore)? - this not a frequent request, but they will give some thought about it.&lt;br /&gt;&lt;br /&gt;That was it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-7197801225229593375?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=7197801225229593375&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7197801225229593375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7197801225229593375'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-tue17-0930-paypal.html' title='eBay DevCon 08 - Tue17 09:30, PayPal technology Roadmap &amp; Panel Discussion'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-623581706491583706</id><published>2008-06-17T04:11:00.004-03:00</published><updated>2008-06-18T14:10:47.859-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PayPal'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Mon16 15:30, New PayPal Integration Tools for Developers</title><content type='html'>On this speak, 3 guys from PayPal team presented basically three sets of tools:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Wizard&lt;/span&gt;: The only interesting stuff in my opinion. This wizard has an interface to help developers or merchants to build from scratch an integration with PayPal throuch clicking and providing basic answers. It generates usable code, and it lacks the ability to let user setup optional parameters for APIs. You may &lt;a href="http://integrationwizard.x.com"&gt;take a look at it&lt;/a&gt;, after all, you are a developer, right?&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Button Designer&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;Sandbox&lt;/span&gt;: This part of the presentation was really basic, except for two things: PayPal will start to have the ability to let merchants manage their sales and profit (if you decide to provide eBay with sensitive information about your buseinss) on eCommerce. Just to remind you, on this presentation they also showed the IPN Simulator.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Post comment:&lt;/span&gt; link to the &lt;a href="http://pics.ebaystatic.com/aw/pics/devcon/2008/New%20Folder/Pasupulati_New%20PayPal%20Integration%20Tools_v07.pdf"&gt;presentation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-623581706491583706?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=623581706491583706&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/623581706491583706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/623581706491583706'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-mon16-1530-new-paypal.html' title='eBay DevCon 08 - Mon16 15:30, New PayPal Integration Tools for Developers'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6276390585214661262</id><published>2008-06-17T03:59:00.005-03:00</published><updated>2008-06-18T14:15:42.678-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PayPal'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Mon16 13:30, Inside the Black Box - PayPal's Deployment Architecture</title><content type='html'>This presentation was given by &lt;span style="font-weight:bold;"&gt;Jeff Meyer&lt;/span&gt;, Distinguished Architect (another nice job name!!) with PayPal. As he explained, more on a Software Architect than SysAdmin side. In my opinion this presentation was very shallow regarding architecture. I wasn't expecting an in depth presentation about the insides of their platform (for obvious reasons like security, business interests and time-boxed presentation), but it could be a little bit more into the platform architecture.&lt;br /&gt;Anyway, Jeff gave some information about the technologies they use, like:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Application Servers are Linux Based over Intel&lt;/li&gt;&lt;br /&gt;&lt;li&gt;C++ is used to write most of the code of the platform&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Apache on the front-end with CGI&lt;/li&gt;&lt;br /&gt;&lt;li&gt;webscr to handle the browser based interaction&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Frontend SOAP and Normal Value Pairs (NPV)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SSL&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Oracle Database (on Solaris)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Well, that was pretty much everything new for someone used to dealing with on-line payments, &lt;a href="http://www.linkedin.com/in/danielambrosio"&gt;like me&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Post comment:&lt;/span&gt; link to the &lt;a href="http://pics.ebaystatic.com/aw/pics/devcon/2008/New%20Folder/Meyer_BlackBox%20Paypal%20Architecture_v05.pdf"&gt;presentation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6276390585214661262?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6276390585214661262&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6276390585214661262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6276390585214661262'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-mon16-1330-inside-black.html' title='eBay DevCon 08 - Mon16 13:30, Inside the Black Box - PayPal&apos;s Deployment Architecture'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-8212954445659179130</id><published>2008-06-17T03:47:00.005-03:00</published><updated>2008-06-18T14:14:00.389-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PayPal'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Mon16 13:30, What's New with the PayPal Developer Program</title><content type='html'>This presentation was given by &lt;span style="font-weight:bold;"&gt;Damon Williams&lt;/span&gt;, Senior Manager, Developer Program at PayPal, with whom, by the way, we had breakfast.&lt;br /&gt;PayPal really is focusing on bringing the developer's community to work with them. The PayPal Developer Certification is just a part of it. The have a Directory to list the Certified Developers and this has been an interesting opportunity for the ones who took (and passed) the test.&lt;br /&gt;Besides the certification, PayPal provides Marketing Material for the developers to promote their skills and/or companies; provides education through training and conferences; provides tools (sdk, code samples, sandbox).&lt;br /&gt;The new &lt;a href="http://paypal.com/devcentralbeta"&gt;Developer Central&lt;/a&gt; is on beta stage, but already with many information for the developers.&lt;br /&gt;&lt;br /&gt;While talking to him before the presentation, I asked how many developers do they have for PayPal alone, and the answer was: &lt;span style="font-style:italic;"&gt;"around a couple of thousand"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;He spoke a little bit about the Recurring Payment and Express Checkout APIs. There was also a brief presentation on the IPN Simulator, now available to developers in the sandbox.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Post comment:&lt;/span&gt; link to the &lt;a href="http://pics.ebaystatic.com/aw/pics/devcon/2008/New%20Folder/Williams_PayPal%20Developer%20Program_v06.pdf"&gt;presentation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-8212954445659179130?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=8212954445659179130&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8212954445659179130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8212954445659179130'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-mon16-1330-whats-new.html' title='eBay DevCon 08 - Mon16 13:30, What&apos;s New with the PayPal Developer Program'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-7799853647594970103</id><published>2008-06-17T03:32:00.005-03:00</published><updated>2008-06-18T13:48:29.630-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Mon16 Lunch Speak</title><content type='html'>During lunch &lt;span style="font-weight:bold;"&gt;Glenn Lim&lt;/span&gt; gave his presentation on PayPal and some more numbers:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;141,000,000 users&lt;/li&gt;&lt;br /&gt;&lt;li&gt;9 years company&lt;/li&gt;&lt;br /&gt;&lt;li&gt;it's a US$ 2 billion business&lt;/li&gt;&lt;br /&gt;&lt;li&gt;US$ 3 billion stored in account; spent every 2 weeks&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It manages 12% of total e-commerce in the world&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;He spoke about the new &lt;a href="http://developer.ebay.com/"&gt;Developer Site&lt;/a&gt; and API.&lt;br /&gt;&lt;br /&gt;Then &lt;span style="font-weight:bold;"&gt;Peeter Mõtsküla&lt;/span&gt; spoke about Skype and (guess what?) gave us some numbers:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;28 languages&lt;/li&gt;&lt;br /&gt;&lt;li&gt;300,000,000 people connected&lt;/li&gt;&lt;br /&gt;&lt;li&gt;100,000,000,000 conversations done so far&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;He also spoke about the new &lt;a href="https://developer.skype.com/"&gt;Skype Developer Site&lt;/a&gt; and the new pricing model for the ones who want to have their application to be Skype Certified.&lt;br /&gt;&lt;br /&gt;Later on, &lt;span style="font-weight:bold;"&gt;Mike Miller&lt;/span&gt; briefly spoke about his later presentation about ProStore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-7799853647594970103?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=7799853647594970103&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7799853647594970103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7799853647594970103'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-mon16-lunch-speak.html' title='eBay DevCon 08 - Mon16 Lunch Speak'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2665828977560165430</id><published>2008-06-17T03:09:00.006-03:00</published><updated>2008-06-18T14:08:07.106-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PayPal'/><category scheme='http://www.blogger.com/atom/ns#' term='ebay'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Mon16 11:30, eBay/PayPal checkout</title><content type='html'>The 11:30 presentation I watched was given by Jon Jessup from Infopia.&lt;br /&gt;It was called &lt;span style="font-weight:bold;"&gt;eBay/PayPal checkout&lt;/span&gt; and it was focusing on the experience the guys from Infopia had on integrating on-line payments to PayPal since 8 years of partnership.&lt;br /&gt;He presented their impressions on using the Direct Payment and Express Checkout integration options. Basically Express Checkout is the most modern solution and the use of IPN (Instant Payment Notification) is the best option eBay offers now for integration.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_CSQ--FucGP4/SFdZ9RkGYQI/AAAAAAAAADk/h8TTAzA_G74/s1600-h/Chicago+099.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_CSQ--FucGP4/SFdZ9RkGYQI/AAAAAAAAADk/h8TTAzA_G74/s320/Chicago+099.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5212734002926346498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Later on, he spoke about the Recurring Payments support PayPal is offering through their API and as a general comment he said that the most difficult in integrating with PayPal is the environment setup; once you are past this part, everything is smoother.&lt;br /&gt;Since the beginning of this year, PayPal started charging its clientes for the AVS check, which forced most of Infopia clients to remove this option from their shop.&lt;br /&gt;&lt;br /&gt;Lunch Time!!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Post comment:&lt;/span&gt; link to the &lt;a href="http://pics.ebaystatic.com/aw/pics/devcon/2008/New%20Folder/Jessup_ebayPayPalCheckout_v06.pdf"&gt;presentation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2665828977560165430?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2665828977560165430&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2665828977560165430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2665828977560165430'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-mon16-1130-speak.html' title='eBay DevCon 08 - Mon16 11:30, eBay/PayPal checkout'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_CSQ--FucGP4/SFdZ9RkGYQI/AAAAAAAAADk/h8TTAzA_G74/s72-c/Chicago+099.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-7244939001568140752</id><published>2008-06-16T13:29:00.006-03:00</published><updated>2008-06-17T03:22:34.809-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon 08 - Mon16 Keynote</title><content type='html'>This was the first speak of the day.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Rajiv Dutta&lt;/span&gt; (President of eBay) opened the session and gave some numbers which show how gigantic is this company. I've noted some of them which were not on the slides they were using, so let's hope I got them right.&lt;br /&gt;For eBay&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;more than 2000 internal developers&lt;/li&gt;&lt;br /&gt;&lt;li&gt;more than 70000 developers around the world&lt;/li&gt;&lt;br /&gt;&lt;li&gt;84,000,000 users&lt;/li&gt;&lt;br /&gt;&lt;li&gt;1 billion page views last year&lt;/li&gt;&lt;br /&gt;&lt;li&gt;volume of transactions is twice as big as the one from NY Exchange&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;For PayPal&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;190 countries&lt;/li&gt;&lt;br /&gt;&lt;li&gt;17 currencies&lt;/li&gt;&lt;br /&gt;&lt;li&gt;141,000,000 users&lt;/li&gt;&lt;br /&gt;&lt;li&gt;1/3 of all adults of England are registered&lt;/li&gt;&lt;br /&gt;&lt;li&gt;1.3 million people live totally or partially with PayPal income&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;After Rajiv, &lt;span style="font-weight:bold;"&gt;Max Mancini&lt;/span&gt; spoke on how important developers are for eBay and how they guide the company's businesses. He mentioned that 50% of volume of eBay comes from 3rd party applications and last year there was 0.5 billion listings coming from these apps.&lt;br /&gt;He spoke about the affiliates program and how the Top 10 affiliates from eBay made over US$ 20 million last year.&lt;br /&gt;He closed his presentation saying that developers "enrich people's lives and improve life quality".&lt;br /&gt;Next there was the presentation of Rolf Skyberg, Disruptive Innovator (what a nice name for a job!! :)) and his presentation was focusing on the new Seller Tools eBay is building to be delivered on Q4 this year.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;To close the keynotes session, &lt;span style="font-weight:bold;"&gt;Adam Gross&lt;/span&gt; (VP at salesforce.com) spoke about salesforce and &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing"&gt;Cloud Computing&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-7244939001568140752?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=7244939001568140752&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7244939001568140752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7244939001568140752'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/ebay-devcon-08-mon16-keynote.html' title='eBay DevCon 08 - Mon16 Keynote'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-5047094671196576259</id><published>2008-06-16T13:26:00.005-03:00</published><updated>2008-06-17T03:22:09.126-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon08'/><category scheme='http://www.blogger.com/atom/ns#' term='ebaydevcon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>eBay DevCon</title><content type='html'>Hi Folks,&lt;br /&gt;&lt;br /&gt;After some months of inactivity I am back, posting live from the &lt;a href="http://pages.ebay.com/devcon/"&gt;E-Bay DevCon Conference&lt;/a&gt;. For the next 3 days I will be posting here about interesting stuff I will be seeing.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_CSQ--FucGP4/SFdWzk4KoKI/AAAAAAAAADc/BTOkjxfFBis/s1600-h/Chicago+097.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_CSQ--FucGP4/SFdWzk4KoKI/AAAAAAAAADc/BTOkjxfFBis/s320/Chicago+097.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5212730537777209506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Dani&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-5047094671196576259?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=5047094671196576259&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5047094671196576259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5047094671196576259'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/06/e-bay-devcon.html' title='eBay DevCon'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_CSQ--FucGP4/SFdWzk4KoKI/AAAAAAAAADc/BTOkjxfFBis/s72-c/Chicago+097.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-3951697575883365698</id><published>2008-02-16T15:58:00.004-02:00</published><updated>2008-02-16T16:00:20.729-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>JNDI.properties in JBoss</title><content type='html'>Need to know which jndi.properties your JBoss Server is using?&lt;br /&gt;Just access this page:&lt;br /&gt;&lt;br /&gt;http://&amp;lt;server&amp;gt;:&amp;lt;port&amp;gt;/jmx-console/checkJNDI.jsp&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-3951697575883365698?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=3951697575883365698&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3951697575883365698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3951697575883365698'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/02/jndiproperties-in-jboss.html' title='JNDI.properties in JBoss'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-5091941441778721458</id><published>2008-02-08T00:16:00.000-02:00</published><updated>2008-02-08T00:19:16.288-02:00</updated><title type='text'>Sun Discontinues Certification Exams</title><content type='html'>Still about Sun Certifications, it has discontinued some exams for older versions of their &lt;a href="http://java.sun.com"&gt;Java &lt;/a&gt;Platform.&lt;br /&gt;&lt;br /&gt;Check &lt;a href="http://www.sun.com/training/certification/java/discontinued.html"&gt;here &lt;/a&gt;details about this matter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-5091941441778721458?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=5091941441778721458&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5091941441778721458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5091941441778721458'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/02/sun-discontinues-certification-exams.html' title='Sun Discontinues Certification Exams'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-5467741162705580975</id><published>2008-02-05T18:26:00.000-02:00</published><updated>2008-02-05T18:30:12.219-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>New SCWCD EE 5</title><content type='html'>Sun has released the new version of Sun Certified Web Component Developer (SCWCD). &lt;br /&gt;Unlike some of might have expected, it does not include JSF at all.&lt;br /&gt;&lt;br /&gt;Actually it has hardly changed since the previous version, focusing on JSP for the view tier.&lt;br /&gt;&lt;br /&gt;For more information, check &lt;a href="http://www.sun.com/training/catalog/courses/CX-310-083.xml"&gt;this&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-5467741162705580975?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=5467741162705580975&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5467741162705580975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5467741162705580975'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/02/new-scwcd-ee-5.html' title='New SCWCD EE 5'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-8544859742163438250</id><published>2008-01-23T22:01:00.000-02:00</published><updated>2008-01-23T22:23:08.252-02:00</updated><title type='text'>Spring Autowiring</title><content type='html'>I was just struggling with an error message I was getting in my application. I am using struts 2, spring and JSP basically.&lt;br /&gt;In my JSP I wanted to save some properties into the name of an account:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;s:textfield name="account.name" value="%{account.name}"&amp;gt;&lt;br /&gt;&amp;lt;/s:textfield&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The action handling the form which posts the "account.name" property above, does have a setter for the Account interface&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;public class SaveTransactionAction {&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;  public void setAccount(Account account) {&lt;br /&gt;      .&lt;br /&gt;      .&lt;br /&gt;      .&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Problem is, for some reason the property was not correctly set into the action, and even worst, I got an exception thrown:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;2008-01-23 21:57:52,203 ERROR util.InstantiatingNullHandler (InstantiatingNullHandler.java:110) - Could not create and/or set value back on to object&lt;br /&gt;org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jc.mny.domain.vo.Account': Could not resolve matching constructor&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As I later found out, Spring was trying to autowire the creation of the Account property for my action, but as it was an interface, it could not find the correct class to instantiate. I had two options:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Change the struts configuration not to use the autowire properties from spring.&lt;/li&gt;&lt;li&gt;Declare the creation of the bean I needed in the applicationContext.xml. This is the one I chose, just added the excerpt below into the file:&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;bean id="account" class="jc.mny.domain.vo.AccountVO"&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-8544859742163438250?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=8544859742163438250&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8544859742163438250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8544859742163438250'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/01/spring-autowiring.html' title='Spring Autowiring'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2489265117876995095</id><published>2008-01-23T20:59:00.000-02:00</published><updated>2008-01-23T22:01:52.475-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile Scrum'/><title type='text'>Certified Scrum Master</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_CSQ--FucGP4/R5fHeQAm2DI/AAAAAAAAACM/xfMYUxqSlw0/s1600-h/scrum.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_CSQ--FucGP4/R5fHeQAm2DI/AAAAAAAAACM/xfMYUxqSlw0/s200/scrum.jpg" alt="" id="BLOGGER_PHOTO_ID_5158811220683708466" border="0" /&gt;&lt;/a&gt;Today I became, as the subject of the post suggests, a &lt;a href="http://www.scrumalliance.org/"&gt;Certified Scrum Master&lt;/a&gt;. As stated in the &lt;a href="http://www.scrumalliance.org/pages/what_is_scrum"&gt;Scrum Alliance&lt;/a&gt; web-site, "Scrum is an iterative, incremental process for developing any product or managing any work".&lt;br /&gt;Just finished the training with Ken Schwaber (in the picture with me) and I've posted below some notes I took during the training.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Scrum is not intended to solve your company's development problems. Actually, if you have enough problems, Scrum is most likely to expose them even more.&lt;/li&gt;&lt;li&gt;Scrum is a framework that was built to give the team a tool to organize, measure and estimate their work and the state of the product.&lt;/li&gt;&lt;li&gt;Scrum by itself will not increase quality or make you deliver faster code. Check item number 1.&lt;/li&gt;&lt;li&gt;Think about people and not resources. The teams are made of people.&lt;/li&gt;&lt;li&gt;Transparency is the keyword. Scrum gives to the product owner transparency over your project, showing exactly where you are and how much you still need to finish it.&lt;/li&gt;&lt;/ol&gt;The training was great, and all the time you could see people saying: "ahhhh, so that's how it is done"...&lt;br /&gt;As I observed today, lots of people believe that Scrum might be the solution for their problems and are actually trying it at their companies. However, listening to the most experienced on it is fundamental, and as Ken suggested at the end of the training: talk to each other.&lt;br /&gt;Finding out what other teams are trying, what is working and what is not is the key to success.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2489265117876995095?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2489265117876995095&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2489265117876995095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2489265117876995095'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/01/certified-scrum-master.html' title='Certified Scrum Master'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_CSQ--FucGP4/R5fHeQAm2DI/AAAAAAAAACM/xfMYUxqSlw0/s72-c/scrum.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2770911188519825777</id><published>2008-01-10T22:37:00.000-02:00</published><updated>2008-01-10T22:39:54.478-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>Ruby First Impressions</title><content type='html'>I am now giving a try to &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt;.&lt;br /&gt;It seems to be quite fast to build a web application from scratch, and &lt;a href="http://www.netbeans.org"&gt;Netbeans &lt;/a&gt;has a great support to it.&lt;br /&gt;&lt;br /&gt;We'll see...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2770911188519825777?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2770911188519825777&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2770911188519825777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2770911188519825777'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/01/ruby-first-impressions.html' title='Ruby First Impressions'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-1639861395031139645</id><published>2008-01-05T19:09:00.000-02:00</published><updated>2008-01-05T19:10:32.707-02:00</updated><title type='text'>Back From Wedding+Honeymoon</title><content type='html'>After being away for a long time to finish preparation for my wedding, I am back after, honeymoon, christmas and new year´s eve!&lt;br /&gt;&lt;br /&gt;Soon to post something useful!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-1639861395031139645?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=1639861395031139645&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1639861395031139645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1639861395031139645'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2008/01/back-from-weddinghoneymoon.html' title='Back From Wedding+Honeymoon'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2196566274493748245</id><published>2007-09-17T23:55:00.000-03:00</published><updated>2007-09-18T00:16:05.859-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Why Agile Projects Fail?</title><content type='html'>This &lt;a href="http://www.infoq.com/news/2007/09/why-do-agile-adoptions-fail"&gt;Article &lt;/a&gt;posted in &lt;a href="http://www.infoq.com"&gt;InfoQ &lt;/a&gt;discusses about the reasons some projects who adopt Agile Methodology fail.&lt;br /&gt;&lt;br /&gt;Most reasons end up concluding: people are the problem. Not the process, not the tools. People.&lt;br /&gt;&lt;br /&gt;Is this really true? People who "lead" an Agile Project to failure would lead a RUP Project to failure as well? &lt;br /&gt;&lt;br /&gt;In my opinion, the Agilists set their basis on a competence that is harder and harder to find through professionals: &lt;span style="font-weight:bold;"&gt;Proactivity&lt;/span&gt;! And I don't mean that only to the developers or Project Managers. Almost every colleague of mine, no matter where he/she works, complains about lack of proactivity in their team, boss, colleagues etc.&lt;br /&gt;&lt;br /&gt;According to the Websters Dictionary:&lt;br /&gt;&lt;a href="http://www.m-w.com/cgi-bin/dictionary?va=proactive"&gt;Proactive&lt;/a&gt;: "acting in anticipation of future problems, needs, or changes". Everything you need from your team in one sentence. &lt;br /&gt;&lt;br /&gt;Technical skills may be trained. Proactivity may not. It belongs to the human being and his profile. Either you have it, or you don't. Learning how to identify this competence still while interviewing candidates is fundamental for the team development. Learn how to do it, and you will build a great team!&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Dani&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2196566274493748245?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2196566274493748245&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2196566274493748245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2196566274493748245'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/09/why-agile-projects-fail.html' title='Why Agile Projects Fail?'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2625525651738843931</id><published>2007-09-17T23:40:00.000-03:00</published><updated>2007-09-17T23:45:43.967-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Agile Development - Free Tool</title><content type='html'>Hey folks,&lt;br /&gt;&lt;br /&gt;Just started trying this tool to manage &lt;a href="http://agilemanifesto.org/"&gt;agile software development&lt;/a&gt;. &lt;br /&gt;It is free up to a 5 team members.&lt;br /&gt;&lt;br /&gt;The name is Mingle, and you can find it &lt;a href="http://studios.thoughtworks.com/mingle-project-intelligence"&gt;here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Dani&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2625525651738843931?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2625525651738843931&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2625525651738843931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2625525651738843931'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/09/agile-development-free-tool.html' title='Agile Development - Free Tool'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-732716622470696925</id><published>2007-08-24T00:48:00.000-03:00</published><updated>2007-08-24T00:54:12.078-03:00</updated><title type='text'>web.xml specification header 2.3 or 2.4</title><content type='html'>This is a quick tip. There are two versions of the servlet specification in use now: 2.3 and 2.4.&lt;br /&gt;The header for the web.xml file will be different in both cases.&lt;br /&gt;In version 2.3 it is used a DTD do specify the XML format, and it is as follows:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="ISO-8859-1"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;web-app&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In version 2.4 it is used a Schema to specify the XML Format. Here it is the format:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="ISO-8859-1"?&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"&lt;br /&gt;    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&lt;br /&gt;    version="2.4"&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-732716622470696925?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=732716622470696925&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/732716622470696925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/732716622470696925'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/08/webxml-specification-header-23-or-24.html' title='web.xml specification header 2.3 or 2.4'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-4266940261042560624</id><published>2007-08-12T02:33:00.000-03:00</published><updated>2007-08-12T02:40:38.278-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Struts'/><title type='text'>Struts in development mode</title><content type='html'>Struts has a very nice feature which increases development productivity. It is called &lt;a href="http://struts.apache.org/2.0.9/docs/devmode.html"&gt;development mode&lt;/a&gt; (or dev mode) and it forces reloading of configuration files and resource bundles, it raises the debugging level etc. As you, smart developer who reads this blog, might have noticed it has an impact on &lt;a href="http://struts.apache.org/2.0.9/docs/performance-tuning.html"&gt;performance&lt;/a&gt;, so use it wisely.&lt;br /&gt;It is very easy to tell struts that you want it running in dev mode. You may set a property in &lt;a href="http://struts.apache.org/2.0.9/docs/strutsproperties.html"&gt;struts.properties&lt;/a&gt; like this:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;devMode=true&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;It is also possible to set this same property in the struts.xml file:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&amp;lt;constant name="struts.devMode" value="true" /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-4266940261042560624?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=4266940261042560624&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4266940261042560624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4266940261042560624'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/08/struts-in-development-mode.html' title='Struts in development mode'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-5001677965815978173</id><published>2007-08-12T01:38:00.000-03:00</published><updated>2007-08-12T02:29:58.795-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Struts'/><title type='text'>Struts 2 wired by Spring</title><content type='html'>&lt;a href="http://struts.apache.org/2.x/"&gt;Struts 2&lt;/a&gt; is a framework for aiding Java Developers into building their web applications, using Inversion of Control (IoC) and MVC Architecture for a multi-tier architecture.&lt;br /&gt;&lt;br /&gt;In this post we will see how to wire your action and service classes in Struts 2 using the &lt;a href="http://www.springframework.org/"&gt;spring framework&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To start, if you are using Maven there is a dependency you need to add to your pom file.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;spring-web&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;2.0.6&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;When this is done, it is necessary to add a listener to the WEB-INF/web.xml file. This is a spring listener, used to intercept calls and redirect them to the Application Context.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;    &amp;lt;listener&amp;gt;&lt;br /&gt;        &amp;lt;listener-class&amp;gt;&lt;br /&gt;            org.springframework.web.context.ContextLoaderListener&lt;br /&gt;        &amp;lt;/listener-class&amp;gt;&lt;br /&gt;    &amp;lt;/listener&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Now, we will need to create the Application Context file for Spring. It will use the configuration information in this file to inject the necessary beans into each needed class. The file format is like below and it should be called WEB-INF/applicationContext.xml. I added some example beans to explain how Struts will later identify these beans and inject them into the Actions being called by the framework.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;    xmlns:aop="http://www.springframework.org/schema/aop"&lt;br /&gt;    xmlns:tx="http://www.springframework.org/schema/tx"&lt;br /&gt;    xsi:schemaLocation="&lt;br /&gt;    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&lt;br /&gt;    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd&lt;br /&gt;    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;bean id="personService" class="my.service.PersonServiceImpl" /&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;bean id="personAction" scope="prototype"&lt;br /&gt;        class="my.web.action.PersonAction"&amp;gt;&lt;br /&gt;        &amp;lt;constructor-arg ref="personService" /&amp;gt;&lt;br /&gt;    &amp;lt;/bean&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Last, but not least it is necessary to setup the struts.xml file to tell the framework that it should use struts' object factory. The example below will show the entries you need to add to struts.xml file. Setting "struts.objectFactory" to "spring" will force Struts to instantiate the actions using Spring, injecting all the defined dependencies on applicationContext.xml.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE struts PUBLIC&lt;br /&gt;    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"&lt;br /&gt;    "http://struts.apache.org/dtds/struts-2.0.dtd"&amp;gt;&lt;br /&gt;&amp;lt;struts&amp;gt;&lt;br /&gt;    &amp;lt;constant name="struts.objectFactory" value="spring" /&amp;gt;&lt;br /&gt;    &amp;lt;constant name="struts.devMode" value="true" /&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;package name="person" extends="struts-default"&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;action name="list" method="execute" class="personAction"&amp;gt;&lt;br /&gt;            &amp;lt;result&amp;gt;pages/list.jsp&amp;lt;/result&amp;gt;&lt;br /&gt;            &amp;lt;result name="input"&amp;gt;pages/list.jsp&amp;lt;/result&amp;gt;&lt;br /&gt;        &amp;lt;/action&amp;gt;&lt;br /&gt;&lt;br /&gt;        ....&lt;br /&gt;        &lt;br /&gt;        &lt;br /&gt;    &amp;lt;/package&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/struts&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The "class" attribute for each action alias is set to "personAction", which is the bean id that we defined on applicationContext.xml for the PersonAction class. This is all that is needed to make Struts work with Spring.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-5001677965815978173?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=5001677965815978173&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5001677965815978173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5001677965815978173'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/08/struts-2-wired-by-spring.html' title='Struts 2 wired by Spring'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-733476846664557987</id><published>2007-08-12T01:24:00.000-03:00</published><updated>2007-08-12T01:28:38.613-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven Download Sources</title><content type='html'>When using maven, it normally downloads only the binaries from the dependencies your project has.&lt;br /&gt;It is possible, with simple commands, to also download the source and/or documentation from the dependencies you are interested in.&lt;br /&gt;&lt;br /&gt;To download sources:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;mvn [goal] -DdownloadSources=true&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;To download javadocs:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;mvn [goal] -DdownloadJavadocs=true&lt;/code&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-733476846664557987?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=733476846664557987&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/733476846664557987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/733476846664557987'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/08/maven-download-sources.html' title='Maven Download Sources'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-3781096967584382959</id><published>2007-08-12T01:23:00.001-03:00</published><updated>2007-08-12T01:23:45.853-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven Eclipse</title><content type='html'>The maven eclipse &lt;a href="http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html"&gt;plugin &lt;/a&gt; is provided for those who have a ready .pom file for a maven project and want to start using eclipse as the IDE for the project.&lt;br /&gt;&lt;br /&gt;The command is as simple as running:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;mvn eclipse:eclipse&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This command have a number of parameters, but one of the most interesting ones would be the one which allows to create a &lt;a href="http://www.eclipse.org/webtools/main.php"&gt;WTP &lt;/a&gt;(Web Tools Platform) aware eclipse project.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;mvn eclipse:eclipse -Dwtpversion=1.0&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;This command will create an eclipse project with WTP 1.0 support.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-3781096967584382959?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=3781096967584382959&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3781096967584382959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3781096967584382959'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/08/maven-eclipse.html' title='Maven Eclipse'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-8770253774027363918</id><published>2007-08-03T01:34:00.001-03:00</published><updated>2007-08-03T02:05:30.379-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Adding Repositories to Maven 2</title><content type='html'>Maven uses on-line repositories to find the dependencies you set in your pom file. By default, maven uses the repository specified in the &lt;br /&gt;&lt;br /&gt;If you want to use other repositories, you are able to do so by adding a &lt;span style="font-style:italic;"&gt;~/.m2/settings.xml&lt;/span&gt; file. This file should be provided in the following format:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;settings&amp;gt;&lt;br /&gt;    &amp;lt;profiles&amp;gt;&lt;br /&gt;        &amp;lt;profile&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;standard-extra-repos&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;activation&amp;gt;&lt;br /&gt;                &amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt;&lt;br /&gt;            &amp;lt;/activation&amp;gt;&lt;br /&gt;            &amp;lt;repositories&amp;gt;&lt;br /&gt;                &amp;lt;repository&amp;gt;&lt;br /&gt;                    &amp;lt;id&amp;gt;jboss&amp;lt;/id&amp;gt;&lt;br /&gt;                    &amp;lt;url&amp;gt;http://repository.jboss.com/maven2&amp;lt;/url&amp;gt;&lt;br /&gt;                    &amp;lt;releases&amp;gt;&lt;br /&gt;                        &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;                    &amp;lt;/releases&amp;gt;&lt;br /&gt;                    &amp;lt;snapshots&amp;gt;&lt;br /&gt;                        &amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;                    &amp;lt;/snapshots&amp;gt;&lt;br /&gt;                &amp;lt;/repository&amp;gt;&lt;br /&gt;                &amp;lt;repository&amp;gt;&lt;br /&gt;                    &amp;lt;id&amp;gt;jboss-snapshot&amp;lt;/id&amp;gt;&lt;br /&gt;                    &amp;lt;url&amp;gt;http://snapshots.jboss.org/maven2&amp;lt;/url&amp;gt;&lt;br /&gt;                    &amp;lt;releases&amp;gt;&lt;br /&gt;                        &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;                    &amp;lt;/releases&amp;gt;&lt;br /&gt;                    &amp;lt;snapshots&amp;gt;&lt;br /&gt;                        &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;                    &amp;lt;/snapshots&amp;gt;&lt;br /&gt;                &amp;lt;/repository&amp;gt;&lt;br /&gt;            &amp;lt;/repositories&amp;gt;&lt;br /&gt;            &amp;lt;pluginRepositories&amp;gt;&lt;br /&gt;                &amp;lt;pluginRepository&amp;gt;&lt;br /&gt;                    &amp;lt;id&amp;gt;jboss-plugins&amp;lt;/id&amp;gt;&lt;br /&gt;                    &amp;lt;url&amp;gt;http://repository.jboss.com/maven2&amp;lt;/url&amp;gt;&lt;br /&gt;                    &amp;lt;releases&amp;gt;&lt;br /&gt;                        &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;                    &amp;lt;/releases&amp;gt;&lt;br /&gt;                    &amp;lt;snapshots&amp;gt;&lt;br /&gt;                        &amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;                    &amp;lt;/snapshots&amp;gt;&lt;br /&gt;                &amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;                &amp;lt;pluginRepository&amp;gt;&lt;br /&gt;                    &amp;lt;id&amp;gt;jboss-snapshot-plugins&amp;lt;/id&amp;gt;&lt;br /&gt;                    &amp;lt;url&amp;gt;http://snapshots.jboss.org/maven2&amp;lt;/url&amp;gt;&lt;br /&gt;                    &amp;lt;releases&amp;gt;&lt;br /&gt;                        &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;                    &amp;lt;/releases&amp;gt;&lt;br /&gt;                    &amp;lt;snapshots&amp;gt;&lt;br /&gt;                        &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;                    &amp;lt;/snapshots&amp;gt;&lt;br /&gt;                &amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;            &amp;lt;/pluginRepositories&amp;gt;&lt;br /&gt;        &amp;lt;/profile&amp;gt;&lt;br /&gt;    &amp;lt;/profiles&amp;gt;&lt;br /&gt;&amp;lt;/settings&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Some repositories I've collected and you might be interested in using, because some artifacts are available only through some of these repositories and not all of them. It is important to remember that the more repositories you add, the slower will be your build, so use them with wisely.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Repository&lt;/span&gt;&lt;br /&gt;http://www.ibiblio.org/&lt;br /&gt;http://download.java.net/maven/2&lt;br /&gt;http://repo1.maven.org/maven2&lt;br /&gt;http://repository.jboss.com/maven2&lt;br /&gt;http://maven.apache.org/&lt;br /&gt;http://mojo.codehaus.org/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Snapshot&lt;/span&gt;&lt;br /&gt;http://snapshots.jboss.org/maven2&lt;br /&gt;http://people.apache.org/repo/m2-snapshot-repository&lt;br /&gt;http://snapshots.maven.codehaus.org/maven2&lt;br /&gt;http://snapshots.repository.codehaus.org&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you want to download snapshot version of maven plugins, there is a &lt;a href="http://maven.apache.org/guides/development/guide-plugin-snapshot-repositories.html"&gt;page &lt;/a&gt;which explains how to setup your settings.xml file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-8770253774027363918?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=8770253774027363918&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8770253774027363918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8770253774027363918'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/08/adding-repositories-to-maven-2.html' title='Adding Repositories to Maven 2'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-1952713426053418121</id><published>2007-08-03T00:55:00.000-03:00</published><updated>2007-08-03T01:17:36.983-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='HSQLDB'/><title type='text'>Using HSQLDB database - the basics</title><content type='html'>&lt;a href="http://hsqldb.org/"&gt;HSQLDB &lt;/a&gt;is a powerful database engine. It is normally used to provided an embedded database functionality for java applications. &lt;br /&gt;&lt;br /&gt;It is as simple as &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=23316"&gt;downloading a zip&lt;/a&gt; file, extracting it into your system and you have a functioning &lt;a href="http://en.wikipedia.org/wiki/Relational_database_management_system"&gt;RDBMS&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After extracting the zip file, you should have the following (resumed) structure in your system:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/hsqldb&lt;br /&gt;    /bin    (scripts for running the server and utilities)&lt;br /&gt;    /demo   (scripts and applet examples)&lt;br /&gt;    /doc    (guess what?)&lt;br /&gt;    /lib    (all binaries - including hsqldb.jar)&lt;br /&gt;    /src    (all source code)&lt;br /&gt;    index.html (documentation about the distribution)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The hsqldb.jar is everything you need to run the database application. It contains the RDBMS, the driver and some tools (the database manager, the query tool and the command line tool).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Running the tools&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To run some of the tools, enter the lib folder and run the following command, which will run the database manager.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;java -cp hsqldb.jar org.hsqldb.util.DatabaseManager&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The main classes for the tools deployed with the hqsldb.jar are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;org.hsqldb.util.DatabaseManager&lt;/li&gt;&lt;br /&gt;&lt;li&gt;org.hsqldb.util.DatabaseManagerSwing&lt;/li&gt;&lt;br /&gt;&lt;li&gt;org.hsqldb.util.Transfer&lt;/li&gt;&lt;br /&gt;&lt;li&gt;org.hsqldb.util.QueryTool&lt;/li&gt;&lt;br /&gt;&lt;li&gt;org.hsqldb.util.SqlTool&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;HSQLDB may run in standalone (in-process) or server mode. There are three server modes, based on the protocol used for communications between the client and server and they are HSQLDB Server, Web Server and Servlet. It is also possible to run HSQLDB in a way that the database is not persistent and exists entirely in random access memory.&lt;br /&gt;&lt;br /&gt;The default user and password for connecting to the database is "sa" / "sa".&lt;br /&gt;&lt;br /&gt;For more information on this powerful tool, read the &lt;a href="http://hsqldb.org/web/hsqlDocsFrame.html"&gt;online manuals&lt;/a&gt; or the documentation provided with the distribution zip file in the doc folder.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-1952713426053418121?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=1952713426053418121&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1952713426053418121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1952713426053418121'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/08/using-hsqldb-database-basics.html' title='Using HSQLDB database - the basics'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-9145951218444438059</id><published>2007-07-15T04:23:00.000-03:00</published><updated>2007-07-15T04:27:57.229-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Struts'/><title type='text'>Debugging Struts Information</title><content type='html'>Some time ago I posted an &lt;a href="http://thedevelopercorner.blogspot.com/2007/04/debugging-information-passed-to-jsp.html"&gt;article &lt;/a&gt;about debugging information in a JSP page. Struts tags have an interesting tag with almost the same functionality I wrote before.&lt;br /&gt;&lt;br /&gt;It is very simple to use. All you need, is add the tag below to your code, provided all the jstl information are correct (in web.xml and/or standard.jar and/or jstl.jar).&lt;br /&gt;&lt;br /&gt;&lt;CODE&gt;&lt;br /&gt;&amp;lt;%@ taglib prefix="s" uri="/struts-tags" %&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;s:debug/&amp;gt;&lt;br /&gt;&lt;/CODE&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-9145951218444438059?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=9145951218444438059&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/9145951218444438059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/9145951218444438059'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/07/debugging-struts-information.html' title='Debugging Struts Information'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-4524125651392568144</id><published>2007-07-15T03:40:00.000-03:00</published><updated>2007-07-15T03:47:21.070-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Choose Java Version for Maven compile</title><content type='html'>It is possible to set the version of the jdk one wants to use when compiling code using maven.&lt;br /&gt;&lt;br /&gt;This might be mandatory if your code uses generics or annotations. So here is the code you should add to your pom.xml.&lt;br /&gt;&lt;br /&gt;&lt;CODE&gt;&lt;br /&gt;&amp;lt;build&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;      &amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            &amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;     &amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/build&amp;gt;     &lt;br /&gt;...&lt;br /&gt;&lt;/CODE&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-4524125651392568144?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=4524125651392568144&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4524125651392568144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4524125651392568144'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/07/choose-java-version-for-maven-compile.html' title='Choose Java Version for Maven compile'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2497412553896928539</id><published>2007-06-08T01:19:00.000-03:00</published><updated>2007-06-08T01:57:10.412-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='Struts'/><title type='text'>Build Struts 2 Application Using Maven 2</title><content type='html'>I really think that using &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; as tool to build Java Projects is simply great, but if there is one thing I hate is searching &lt;a href="http://mirrors.ibiblio.org/pub/mirrors/maven2"&gt;ibiblio &lt;/a&gt;for the dependencies I need for my project. So I will post below the path for the main components one will need to get started with Struts 2 on his project.&lt;br /&gt;&lt;br /&gt;By default, Maven will look for the dependencies on its central repository &lt;code&gt;http://repo1.maven.org/maven2&lt;/code&gt;. It is possible to configure the repositories where you want maven to look up for files. These two below are some alternative repositories where you can try to find components you need. In the apache repository below is possible to find the SNAPSHOT version of the components.&lt;br /&gt;&lt;br /&gt;Just add the code below into your pom file.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;        &amp;lt;repositories&amp;gt;&lt;br /&gt;            &amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;&lt;br /&gt;              &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;ibiblio&amp;lt;/id&amp;gt;&lt;br /&gt;              &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;iBiblio Maven2 Repository&amp;lt;/name&amp;gt;&lt;br /&gt;              &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://www.ibiblio.org/maven2&amp;lt;/url&amp;gt;&lt;br /&gt;            &amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;&lt;br /&gt;            &amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;&lt;br /&gt;              &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;apache-repo&amp;lt;/id&amp;gt;&lt;br /&gt;              &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;Apache Repository&amp;lt;/name&amp;gt;&lt;br /&gt;              &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://people.apache.org/repo/m2-snapshot-repository&amp;lt;/url&amp;gt;&lt;br /&gt;            &amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;&lt;br /&gt;        &amp;lt;/repositories&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Check the official Maven site about how to &lt;a href="http://maven.apache.org/guides/mini/guide-multiple-repositories.html"&gt;setup multiple repositories&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now, we can reach for those components! :)&lt;br /&gt;As advised by the struts team, the &lt;a href="http://struts.apache.org/2.x/docs/simple-setup.html"&gt;minimum set of components&lt;/a&gt; one might need is below.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;struts2-core.jar&lt;/li&gt;&lt;br /&gt;&lt;li&gt;xwork.jar&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ognl.jar&lt;/li&gt;&lt;br /&gt;&lt;li&gt;freemarker.jar&lt;/li&gt;&lt;br /&gt;&lt;li&gt;commons-logging.jar&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Fortunately, to download all of them automagically, all you need to add to your pom files are the lines below:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.struts&amp;lt;/groupId&amp;gt;&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;struts2-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;2.0.6&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Wanna do this even faster? Use maven archetypes to create a struts2-aware project! ;)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mvn archetype:create -DgroupId=tutorial \&lt;br /&gt;                       &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-DartifactId=tutorial \&lt;br /&gt;                       &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-DarchetypeGroupId=org.apache.struts \&lt;br /&gt;                       &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-DarchetypeArtifactId=struts2-archetype-starter \&lt;br /&gt;                       &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-DarchetypeVersion=2.0.5-SNAPSHOT \&lt;br /&gt;                       &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-DremoteRepositories=http://people.apache.org/repo/m2-snapshot-repository&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2497412553896928539?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2497412553896928539&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2497412553896928539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2497412553896928539'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/06/build-struts-2-application-using-maven.html' title='Build Struts 2 Application Using Maven 2'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2143133773862863625</id><published>2007-04-23T14:57:00.000-03:00</published><updated>2007-04-23T17:03:07.310-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Quiclky Create a Maven-aware project</title><content type='html'>If you are (or want to start) using &lt;a href="http://maven.apache.org"&gt;Maven&lt;/a&gt; as a build tool for your project, a quick way to start is to use an archetype to create a pom.xml and the default folder structure. This is the command:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mvn archetype:create &lt;br&gt;&lt;br /&gt;-DarchetypeGroupId=[archetype-groupId] &lt;br&gt;&lt;br /&gt;-DarchetypeArtifactId=[archetype-artifactId] &lt;br&gt;&lt;br /&gt;-DarchetypeVersion=[archetype-version] &lt;br&gt;&lt;br /&gt;-DgroupId=[my.groupid] &lt;br&gt;&lt;br /&gt;-DartifactId=[my-artifactId] &lt;br&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2143133773862863625?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2143133773862863625&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2143133773862863625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2143133773862863625'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/04/quiclky-create-maven-aware-project.html' title='Quiclky Create a Maven-aware project'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-4503588075069480742</id><published>2007-04-13T01:20:00.000-03:00</published><updated>2007-04-23T17:04:55.047-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Debugging Information passed to a JSP Page</title><content type='html'>Well, scriptlets inside a JSP page Suck. Alright, I agree!!&lt;br /&gt;But sometimes it is necessary to check what are the parameters in the request or session scopes reaching your jsp page.&lt;br /&gt;&lt;br /&gt;I found this code somewhere on the web sometime ago. One day (yeah, right) I will right a version of it using JSTL tags, but for now I allow myself to add this scriptlet in one of the pages that are included everywhere in my system. As I use &lt;a href="http://struts.apache.org/1.x/struts-tiles/"&gt;Struts Tiles&lt;/a&gt; in my system, I do have a bottom.jsp page which is included everywhere.&lt;br /&gt;&lt;br /&gt;So I leave the debug attribute in &lt;code&gt;false&lt;/code&gt; state until I need to debug on page or another. At this moment, all I have to do is turn on the debug information in my page by setting the attribute to &lt;code&gt;true&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Below is the scriptlet and page includes that should be added to the page where you want the debug information to be displayed.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ page import=&amp;quot;java.util.*&amp;quot; %&amp;gt;&lt;br /&gt;&amp;lt;%@ page import=&amp;quot;org.apache.struts.*&amp;quot; %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ page import=&amp;quot;org.apache.struts.util.*&amp;quot; %&amp;gt;&lt;br /&gt;&amp;lt;%@ page import=&amp;quot;org.apache.struts.action.*&amp;quot; %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%&lt;br /&gt;  // Print all attributes in the request object&lt;br /&gt;  out.println(&amp;quot;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;All Attributes in request scope:&amp;lt;/b&amp;gt;&amp;quot;);&lt;br /&gt;  Enumeration paramNames = request.getAttributeNames();&lt;br /&gt;  while (paramNames.hasMoreElements()) {&lt;br /&gt;    String name = (String) paramNames.nextElement();&lt;br /&gt;    Object values = request.getAttribute(name);&lt;br /&gt;    out.println(&amp;quot;&amp;lt;br&amp;gt; &amp;quot; + name + &amp;quot;:&amp;quot; + values);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // Print all attributes in the session object&lt;br /&gt;  out.println(&amp;quot;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;All Attributes in session scope:&amp;lt;/b&amp;gt;&amp;quot;);&lt;br /&gt;  paramNames = session.getAttributeNames();&lt;br /&gt;  while (paramNames.hasMoreElements()) {&lt;br /&gt;    String name = (String) paramNames.nextElement();&lt;br /&gt;    Object values = session.getAttribute(name);&lt;br /&gt;    out.println(&amp;quot;&amp;lt;br&amp;gt; &amp;quot; + name + &amp;quot;:&amp;quot; + values);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  out.println(&amp;quot;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Data in ActionMessages:&amp;lt;/b&amp;gt;&amp;quot;);&lt;br /&gt;&lt;br /&gt;  // Get the ActionMessages &lt;br /&gt;  Object o = request.getAttribute(Globals.MESSAGE_KEY);&lt;br /&gt;  if (o != null) {&lt;br /&gt;    ActionMessages ae = (ActionMessages)o;&lt;br /&gt;&lt;br /&gt;    // Get the locale and message resources bundle&lt;br /&gt;    Locale locale = &lt;br /&gt;      (Locale)session.getAttribute(Globals.LOCALE_KEY);&lt;br /&gt;    MessageResources messages = &lt;br /&gt;      (MessageResources)request.getAttribute&lt;br /&gt;      (Globals.MESSAGES_KEY);&lt;br /&gt;&lt;br /&gt;    // Loop thru all the labels in the ActionMessage's  &lt;br /&gt;    for (Iterator i = ae.properties(); i.hasNext();) {&lt;br /&gt;      String property = (String)i.next();&lt;br /&gt;      out.println(&amp;quot;&amp;lt;br&amp;gt;property &amp;quot; + property + &amp;quot;: &amp;quot;);&lt;br /&gt;&lt;br /&gt;      // Get all messages for this label&lt;br /&gt;      for (Iterator it = ae.get(property); it.hasNext();) {&lt;br /&gt;        ActionMessage a = (ActionMessage)it.next();&lt;br /&gt;        String key = a.getKey();&lt;br /&gt;        Object[] values = a.getValues();&lt;br /&gt;        out.println(&amp;quot; [key=&amp;quot; + key + &lt;br /&gt;          &amp;quot;, message=&amp;quot; + &lt;br /&gt;          messages.getMessage(locale,key,values) + &lt;br /&gt;          &amp;quot;]&amp;quot;);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;%&amp;gt;&lt;br /&gt;    &lt;/c:if&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-4503588075069480742?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=4503588075069480742&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4503588075069480742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4503588075069480742'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/04/debugging-information-passed-to-jsp.html' title='Debugging Information passed to a JSP Page'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6137663731116756820</id><published>2007-04-10T03:32:00.000-03:00</published><updated>2007-04-23T17:04:43.692-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>EJB3 QL: Using the COUNT function</title><content type='html'>If you are using EJB3 Query Language to build your application, you will probably need to use some functions other than the regular SELECT statements and logical WHERE clauses.  One of the most simplest of these functions is the &lt;code&gt;COUNT&lt;/code&gt; function.&lt;br /&gt;The syntax for the &lt;code&gt;COUNT&lt;/code&gt; function is very simple, and it receives only a parameter which is the identifier to be count, as in:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;SELECT COUNT(c) FROM Customers AS c WHERE c.address.country = 'BR'&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This query will count all the Customers who live in Brazil.&lt;br /&gt;&lt;br /&gt;The &lt;code&gt;COUNT&lt;/code&gt; function can be used with an identifier, in which case it always counts entities (as the example above demonstrates), or with path expressions but this last one can always be converted into an expression that counts entities only by managing the conditions in the WHERE clause.&lt;br /&gt;&lt;br /&gt;Below is an example on how you could write a piece of code that would count the Patients from a medical database, depending on which Clinic they are registered to:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;       Query query = entityManager.createQuery("SELECT COUNT (p) FROM Patients p WHERE p.clinic.idtClinic = :idtClinic");&lt;br /&gt;       query.setParameter("idtClinic", idtClinic);&lt;br /&gt;       return (Long)query.getSingleResult();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I will write about other EJB QL functions later! :)&lt;br /&gt;&lt;br /&gt;CU!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6137663731116756820?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6137663731116756820&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6137663731116756820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6137663731116756820'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/04/ejb3-ql-using-count-function.html' title='EJB3 QL: Using the COUNT function'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6729258845526407177</id><published>2007-03-11T17:19:00.001-03:00</published><updated>2009-03-13T12:24:35.589-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Versioning'/><title type='text'>SVN Keywords</title><content type='html'>One useful feature that &lt;a href="http://subversion.tigris.org/"&gt;subversion &lt;/a&gt; and many other Versioning Systems offer for developers is the ability to include keywords in text files stored in the repository.&lt;br /&gt;&lt;br /&gt;These keywords get replaced when some action is done on them by the server. This &lt;a href="http://svnbook.red-bean.com/en/1.0/ch07s02.html"&gt;book excerpt&lt;/a&gt; (reproduced below) documents some keyword supported by subversion.&lt;br /&gt;&lt;br /&gt;The keyword to be replaced is identified by an anchor in the text with the keyword name  surrounded by two '$keywordName$.&lt;br /&gt;&lt;br /&gt;Subversion defines the list of keywords available for substitution. That list contains the following five keywords, some of which have shorter aliases that you can also use:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;LastChangedDate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  This keyword describes the last time the file was known to have been changed in the repository, and looks something like $LastChangedDate: 2002-07-22 21:42:37 -0700 (Mon, 22 Jul 2002) $. It may be abbreviated as Date.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;LastChangedRevision&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  This keyword describes the last known revision in which this file changed in the repository, and looks something like $LastChangedRevision: 144 $. It may be abbreviated as Revision or Rev.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;LastChangedBy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  This keyword describes the last known user to change this file in the repository, and looks something like $LastChangedBy: harry $. It may be abbreviated as Author.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HeadURL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  This keyword describes the full URL to the latest version of the file in the repository, and looks something like $HeadURL: http://svn.collab.net/repos/trunk/README $. It may be abbreviated as URL.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Id&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  This keyword is a compressed combination of the other keywords. Its substitution looks something like $Id: calc.c 148 2002-07-28 21:30:43Z sally $, and is interpreted to mean that the file calc.c was last changed in revision 148 on the evening of July 28, 2002 by the user sally.&lt;br /&gt;as in &lt;span style="font-style: italic;"&gt;$keywordName$&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE on march/2009&lt;br /&gt;&lt;/span&gt;Normally it would be necessary to set the properties on every single file of your system so the replacement of these props would happen. However, there is an easier way to do this, which is set the auto-props property in your environment.&lt;br /&gt;&lt;br /&gt;In folder "C:\Documents and Settings\[your_username]\Application Data\Subversion" you will find a file named config (with no extension). In this file there should be a property "enable-auto-props" commented out. Remove the comment from this line so it looks like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="806305420-11032009"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;### Set  enable-auto-props to 'yes' to enable automatic properties&lt;br /&gt;### for 'svn add'  and 'svn import', it defaults to 'no'.&lt;br /&gt;### Automatic properties are defined  in the section 'auto-props'.&lt;br /&gt;enable-auto-props = yes&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;/code&gt;&lt;span class="806305420-11032009"&gt;&lt;/span&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;Then, on the same file, find the section [auto-props] and add a line at the end. If you want the replacement to happen only in your java files, add this:&lt;br /&gt;&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="806305420-11032009"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;*.java =  svn:keywords LastChangedDate&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6729258845526407177?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6729258845526407177&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6729258845526407177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6729258845526407177'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/03/svn-keywords.html' title='SVN Keywords'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-8840058616048199120</id><published>2007-02-26T23:11:00.000-03:00</published><updated>2007-04-23T17:04:19.359-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Install a jar file into maven's local repository</title><content type='html'>Sometimes, while using &lt;a href="http://maven.apache.org"&gt;maven &lt;/a&gt;to build your projects, it is necessary to add a needed jar file directly into your local repository. This should not be a need if you have a remote repository correctly setup, but it might be useful if it is a too bureaucratic task or any other reason.&lt;br /&gt;&lt;br /&gt;It is as simple as this. Having the file to be installed in your local repository in the local folder, issue the command below to install it.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;mvn install:install-file -DgroupId=&amp;lt;MVN_GROUPID&amp;gt; -DartifactId=&amp;lt;MVN_ARTIFACTID&amp;gt; -Dversion=&amp;lt;MVN_VERSION&amp;gt; -Dpackaging=jar -Dfile=&amp;lt;JAR_FILE_TO_INSTALL&amp;gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Could be useful! ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-8840058616048199120?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=8840058616048199120&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8840058616048199120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8840058616048199120'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/02/install-jar-file-into-mavens-local.html' title='Install a jar file into maven&apos;s local repository'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-7724779194076832416</id><published>2007-02-11T21:22:00.001-02:00</published><updated>2007-02-11T21:55:44.400-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Find the name of your session bean in JBoss</title><content type='html'>If you are writing JEE applications, you will most likely write a Session Bean to provide your View Tier with the services it need. This Session Bean is reached by the client application through a service called JNDI.&lt;br /&gt;&lt;br /&gt;The problem is that each Application Server uses a different JNDI provider and this makes portability very hard to achieve. I wrote the code below to allow me to access the JNDI service and find my Session Bean. Please note that this would be much better placed in the container configuration file and not in the code, as it is here.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;protected static Context getInitialContext( ) throws javax.naming.NamingException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;Properties p = new Properties( );&lt;br /&gt;&amp;nbsp;&amp;nbsp;p.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");&lt;br /&gt;&amp;nbsp;&amp;nbsp;p.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");&lt;br /&gt;&amp;nbsp;&amp;nbsp;p.put(Context.PROVIDER_URL, "jnp://localhost:1099");&lt;br /&gt;&amp;nbsp;&amp;nbsp;return new javax.naming.InitialContext(p);&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;This method will return a &lt;code&gt;java.naming.Context&lt;/code&gt; object which can be used for the lookup on the service, like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;         PatientServices patientServices = (PatientServices)jndiContext.lookup("PatientBean/remote");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;And how can you find the name under which your bean has been published on the application server? Well, in JBoss all you need to do is access the jmx-console (default URL is http://localhost:8080/jmx-console/). On the &lt;span style="font-weight:bold;"&gt;jboss&lt;/span&gt; session from this page, find the JNDIView service. Click on it and a new page will display on your browser.&lt;br /&gt;On this new page there will be a &lt;span style="font-weight:bold;"&gt;java.lang.String list()&lt;/span&gt; MBean operation, and clicking on the &lt;span style="font-style:italic;"&gt;invoke&lt;/span&gt; button the names of all available JNDI names will be shown on a tree-like structure which composes the name under which your Session Bean is registered on the JNDI service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-7724779194076832416?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=7724779194076832416&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7724779194076832416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7724779194076832416'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/02/find-name-of-your-session-bean-in-jboss_11.html' title='Find the name of your session bean in JBoss'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-5624168987556131793</id><published>2007-02-11T16:37:00.000-02:00</published><updated>2007-02-11T19:21:23.882-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven Profiles</title><content type='html'>I was struggling with some different configuration files for my development and production environment. As a "weekend-free-time-developer-now-that-I-changed-into-management", my development environment is restricted. So I use the same instance of MySQL for the production database and run some tests on the same server with a different schema and configuration.&lt;br /&gt;&lt;br /&gt;Using &lt;a href="http://maven.apache.org/"&gt;maven&lt;/a&gt; as a build/management tool improved my a lot my performance, but these different environments still gave me some headache. So I decided to leave laziness aside and configure some profiles in my pom files. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://maven.apache.org/guides/introduction/introduction-to-profiles.html"&gt;Maven profiles&lt;/a&gt; allow you to prepare different sets of configuration. There are for different types of profiles, defined in different files and with different purposes: &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Per Project: Defined in the POM itself (pom.xml).&lt;/li&gt;&lt;li&gt;Per User: Defined in the Maven-settings (%USER_HOME%/.m2/settings.xml).&lt;/li&gt;&lt;li&gt;Global: Defined in the global maven-settings (%M2_HOME%/conf/settings.xml).&lt;/li&gt;&lt;li&gt;Profile descriptor: a descriptor located in project basedir (profiles.xml)&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;I decided to use the type number 1, which is a Per-Project configuration type, and unlike number 4 (which has a restricted scope) which is also a Per-Project configuration type it has the ability to change a lot of the project settings because it is in the same pom file as the projects' specifications themselves.&lt;br /&gt;&lt;br /&gt;For starters, I wanted to have different jboss' data source xml files for production and development environments. As Maven works with a hierarchy of configuration files I figures the less intrusive way to set the build configuration was to have different folders for each environment. So where I previously had /src/main/resources/WEB-INF now I would have /src/main/resources/development/WEB-INF and /src/main/resources/production/WEB-INF. With the original single path, Maven did not need any special configuration to find my data source xml files (I love "convention over configuration"). With the 2 new folders, I had to add another layer to the hierarchy of Maven's configuration files and this layer would be the profiles.&lt;br /&gt;&lt;br /&gt;In my pom.xml, I added a &lt;span style="font-style:italic;"&gt;profiles&lt;/span&gt; section, obviously enough marked by the tag &amp;lt;profiles&amp;gt;. Here is what I added to my original pom.xml.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;lt;profiles&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;profile&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;env-dev&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;directory&amp;gt;src/main/resources/development&amp;lt;/directory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;activation&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;env-dev&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/activation&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/profile&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;profile&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;env-prod&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;directory&amp;gt;src/main/resources/production&amp;lt;/directory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;activation&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;env-prod&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/activation&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/profile&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/profiles&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Now, you can tell maven to build based on different profiles. Where you normally would enter a command like &lt;code&gt;mvn install&lt;/code&gt; now you should change to:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;mvn install -P env-dev&lt;code&gt; for development environment&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn install -P env-prod&lt;code&gt; for production environment&lt;/blockquote&gt;&lt;br /&gt;After doing this, I was wondering... Which profile will maven choose to execute the build if I do not explicitly tell it?&lt;br /&gt;&lt;br /&gt;That is very easy to check! Run the command:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;mvn help:active-profiles&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;It will show you that there are no active profiles, but it will (wrongly IMHO) add BOTH (production and development) folders to your final build, and will not realize that those are actual resource folders.&lt;br /&gt;&lt;br /&gt;One simple solution for this issue is to tell maven which profile should be used by default. I modified the &lt;span style="font-style:italic;"&gt;profiles&lt;/span&gt; tag content to use the production environment as the default one, so this will force me during development to always add the &lt;code&gt;"-P env-dev"&lt;/code&gt; while I am testing/developing and this should make me used to always tell maven what I really want. The way to tell maven which one is the default active profile is in bold below.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;profile&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;env-prod&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;directory&amp;gt;src/main/resources/production&amp;lt;/directory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;activation&amp;gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;env-prod&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/activation&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/profile&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Now, if you run &lt;code&gt;mvn help:active-profiles&lt;/code&gt; again you will see that the env-prod is being used, which is the same as running &lt;code&gt;mvn help:active-profiles -P env-prod&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ mvn help:active-profiles&lt;br /&gt;[INFO] Scanning for projects...&lt;br /&gt;[INFO] Searching repository for plugin with prefix: 'help'.&lt;br /&gt;[INFO] ----------------------------------------------------------------------------&lt;br /&gt;[INFO] Building Fisio EJB Component&lt;br /&gt;[INFO]    task-segment: [help:active-profiles] (aggregator-style)&lt;br /&gt;[INFO] ----------------------------------------------------------------------------&lt;br /&gt;[INFO] [help:active-profiles]&lt;br /&gt;[INFO] &lt;br /&gt;Active Profiles for Project 'com.jc.fisio:fisio-ejb:ejb:0.1-SNAPSHOT': &lt;br /&gt;&lt;br /&gt;The following profiles are active:&lt;br /&gt;&lt;br /&gt; - env-prod (source: pom)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] BUILD SUCCESSFUL&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] Total time: 1 second&lt;br /&gt;[INFO] Finished at: Sun Feb 11 18:13:13 BRST 2007&lt;br /&gt;[INFO] Final Memory: 2M/5M&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Working with profiles is quite interesting, because it allows you to have multiple active profiles at the same time, providing a number of different combinations. It can be used to may purposes, like setting different application servers, web servers, snapshot version etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-5624168987556131793?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=5624168987556131793&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5624168987556131793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5624168987556131793'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/02/maven-profiles.html' title='Maven Profiles'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-4205523322491542122</id><published>2007-02-06T03:55:00.000-02:00</published><updated>2007-02-11T16:37:06.290-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Setting Cygwin Bash Shell Looks</title><content type='html'>As I posted earlier, I like to use &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; as a *nix-like shell to use under Windows, because the command tool is IMHO terrible to use.&lt;br /&gt;&lt;br /&gt;Cygwin has a lot of *nix functionalities which are not supported under windows default installation which forces you to install a big variety of software from different vendors.&lt;br /&gt;&lt;br /&gt;Cygwin has its own port of bash shell, but on the default installation the looks are kind of dull. I use &lt;a href="http://sourceforge.net/projects/rxvt"&gt;rxvt&lt;/a&gt; port for cygwin to start my shell and I used some configuration settings as suggested by this &lt;a href="http://freemode.net/archives/000121.html"&gt;article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So, with small changes to the suggestions of the author to have a larger buffer and the size of the started window I came with this .Xdefaults file. It shold be placed in your home directory.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;! ~/.Xdefaults - X default resource settings&lt;br /&gt;Rxvt*geometry: 120x60&lt;br /&gt;Rxvt*background: #000020&lt;br /&gt;Rxvt*foreground: #ffffbf&lt;br /&gt;!Rxvt*borderColor: Blue&lt;br /&gt;!Rxvt*scrollColor: Blue&lt;br /&gt;!Rxvt*troughColor: Gray&lt;br /&gt;Rxvt*scrollBar: True&lt;br /&gt;Rxvt*scrollBar_right: True&lt;br /&gt;Rxvt*font: Lucida Console-12&lt;br /&gt;Rxvt*saveLines: 10000&lt;br /&gt;Rxvt*loginShell: True&lt;br /&gt;! VIM-like colors&lt;br /&gt;Rxvt*color0:    #000000&lt;br /&gt;Rxvt*color1:    #FFFFFF&lt;br /&gt;Rxvt*color2:    #00A800&lt;br /&gt;Rxvt*color3:    #FFFF00&lt;br /&gt;Rxvt*color4:    #0000A8&lt;br /&gt;Rxvt*color5:    #A800A8&lt;br /&gt;Rxvt*color6:    #00A8A8&lt;br /&gt;Rxvt*color7:    #D8D8D8&lt;br /&gt;Rxvt*color8:    #000000&lt;br /&gt;Rxvt*color9:    #FFFFFF&lt;br /&gt;Rxvt*color10:   #00A800&lt;br /&gt;Rxvt*color11:   #FFFF00&lt;br /&gt;Rxvt*color12:   #0000A8&lt;br /&gt;Rxvt*color13:   #A800A8&lt;br /&gt;Rxvt*color14:   #00A8A8&lt;br /&gt;Rxvt*color15:   #D8D8D8&lt;br /&gt;! eof&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Later I did another small change on the cygwin.bat file to use &lt;a href="http://www.vim.org/"&gt;vim&lt;/a&gt; instead of vi as the default editor. The cygwin.bat file can be found on the installation directory of cygwin. Save the original file with another name and then replace it with the following content.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;@echo off&lt;br /&gt;C:&lt;br /&gt;chdir C:\cygwin\bin&lt;br /&gt;set EDITOR=vim&lt;br /&gt;set VISUAL=vim&lt;br /&gt;set CYGWIN=codepage:oem tty binmode title&lt;br /&gt;rxvt -e bash --login -i&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_CSQ--FucGP4/Rcgb8Tw1SbI/AAAAAAAAAAM/KxAZjfa7bbE/s1600-h/imagem.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_CSQ--FucGP4/Rcgb8Tw1SbI/AAAAAAAAAAM/KxAZjfa7bbE/s200/imagem.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5028299706870352306" /&gt;&lt;/a&gt;&lt;br /&gt;Now when you start cygwin, the shell window will look like the one on the right (click on it to see a larger version). Play around with the collor definitions on the .Xdefaults file to have a setup that pleases you. .&lt;a href="https://engineering.purdue.edu/ECN/Support/KnowledgeBase/Docs/20020202104217"&gt;Xdefaults&lt;/a&gt; gives a lot of possibilites and you can see some examples &lt;a href="http://www.cygwin.com/ml/cygwin-xfree/2001-q2/msg01954/.Xdefaults"&gt;here&lt;/a&gt;, &lt;a href="http://www.xs4all.nl/~hanb/configs/dot-Xdefaults"&gt;here&lt;/a&gt; and &lt;a href="http://www.cygwin.com/ml/cygwin-xfree/2001-q2/msg01954/.Xdefaults"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-4205523322491542122?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=4205523322491542122&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4205523322491542122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/4205523322491542122'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/02/setting-cygwin-bash-shell-looks.html' title='Setting Cygwin Bash Shell Looks'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_CSQ--FucGP4/Rcgb8Tw1SbI/AAAAAAAAAAM/KxAZjfa7bbE/s72-c/imagem.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2465352683179886484</id><published>2007-01-28T21:11:00.000-02:00</published><updated>2007-01-28T21:50:43.872-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Using Apache as a Proxy for Tomcat Applications</title><content type='html'>I spent the day trying some configurations to make the integration between Apache HTTP Server and Tomcat.&lt;br /&gt;&lt;br /&gt;The configuration that worked best for me basically was to setup a VirtualHost in Apache as a proxy with the same name as the application in Tomcat engine. As a resume, below tou will find some of the steps I went through and what I changed in the configuration files (I am using Apache 2.2 and Tomcat 5.5).&lt;br /&gt;&lt;br /&gt;In Apache it is necessary to enable the &lt;a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html"&gt;mod_proxy Module&lt;/a&gt; and setup a &lt;a href="http://httpd.apache.org/docs/2.2/vhosts/name-based.html"&gt;NameVirtualHost&lt;/a&gt;. The &lt;span style="font-style: italic;"&gt;httpd.conf&lt;/span&gt; (found in %APACHE_HOME%/conf) configuration file should be changed as below.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;#Uncomment or add the lines below into the general session of your httpd.conf file.&lt;br /&gt;LoadModule proxy_module modules/mod_proxy.so&lt;br /&gt;LoadModule proxy_http_module modules/mod_proxy_http.so&lt;br /&gt;&lt;br /&gt;# Add the Virtual Host for your application at the end of the file&lt;br /&gt;NameVirtualHost *&lt;br /&gt;&lt;br /&gt;&amp;lt;VirtualHost *&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ServerAdmin serveradmin@domain.com&lt;br /&gt;&amp;nbsp;&amp;nbsp;DocumentRoot "C:/java/Tomcat5.5/webapps/"&lt;br /&gt;&amp;nbsp;&amp;nbsp;ServerName myapplication.domain.com&lt;br /&gt;&amp;nbsp;&amp;nbsp;ServerAlias *.myapplication.domain.com&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ProxyPass /foo-app  http://localhost:8080/foo-app&lt;br /&gt;&amp;nbsp;&amp;nbsp;ProxyPassReverse /foo-app  http://localhost:8080/foo-app&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;After setting this file in your apache server, restart it and proceed to configuring the Tomcat Server, by editing the &lt;span style="font-style: italic;"&gt;server.xml&lt;/span&gt; file (found in %CATALINA_HOME%/conf). Simply add the lines below at the end of the file, but inside the &amp;lt;server&amp;gt; tag.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;Service&amp;nbsp;name="Tomcat-Apache"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Engine&amp;nbsp;name="Apache"&amp;nbsp;defaultHost="myapplication.domain.com"&amp;nbsp;debug="0"&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Host&amp;nbsp;name="myapplication.domain.com"&amp;nbsp;debug="0"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;appBase="c:/java/Tomcat5.5/webapps/foo-app"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unpackWARs="true"&amp;nbsp;autoDeploy="true"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Context&amp;nbsp;path="/foo-app" docBase="c:/java/Tomcat5.5/webapps/foo-app" debug="1" reloadable="true"/&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Host&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Engine&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/Service&amp;gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Now, open your browser and type the URL http://myapplication.domain.com/foo-app and you should be redirected to your application after passing by Apache and Tomcat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2465352683179886484?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2465352683179886484&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2465352683179886484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2465352683179886484'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/using-apache-as-proxy-for-tomcat.html' title='Using Apache as a Proxy for Tomcat Applications'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6230413022230576628</id><published>2007-01-28T13:21:00.000-02:00</published><updated>2007-01-28T13:40:32.660-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Jetty'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>Tomcat RMI Unmarshalling Exception</title><content type='html'>This is one of those posts that shows how frustrating sometimes the developer job can be! :)&lt;br /&gt;&lt;br /&gt;I had a WAR component that was delivered successfully and worked fine in Jetty 6.0 rc2, but the same WAR file would not work under Tomcat 5.5. This application uses some session beans that are available in my JBoss Server. When I tried to execute the lookup() command in my client application running in Tomcat I had an exception thrown:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.net.MalformedURLException: no protocol:&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then I asked: Why? Why does it work in Jetty like a charm? Reading ahead at the message of the exception I noticed the MalformedURL message included this: "5.5/temp/0-fisio-web-1.0-SNAPSHOT/WEB-INF/classes/" which made me realize that this was just part of the full URL where my Tomcat Server was running. Searching through the net I found this &lt;a href="http://forum.java.sun.com/thread.jspa?threadID=367368&amp;messageID=3773138"&gt;post&lt;/a&gt;, which led me to this &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4273532"&gt;other &lt;/a&gt;post (and there is also this &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4496398"&gt;other post&lt;/a&gt; on this subject).&lt;br /&gt;&lt;br /&gt;For my surprise this is a &lt;span style="font-weight:bold;"&gt;known bug since JDK 1.2&lt;/span&gt;, marked as WON´T FIX by SUN! Is it unbelievable or not??&lt;br /&gt;&lt;br /&gt;There is a workaround suggested by Sun that says that one should use&lt;br /&gt;&lt;br /&gt;&lt;code&gt;file.toURI().toURL()&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;instead of &lt;br /&gt;&lt;br /&gt;&lt;code&gt;file.toURL()&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;but many times, this is not in our hands, as is my case because Tomcat is taking care of this for me, so unless me (or some other generous soul) change and test (and do a backward compatibility test which seems to be what is frightening SUN into not changing this behavior) this way of implementing the RMI communication, the best thing to avoid this problem is to install all your applications in a path that does not include white spaces or illegal characters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6230413022230576628?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6230413022230576628&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6230413022230576628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6230413022230576628'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/tomcat-rmi-unmarshalling-exception.html' title='Tomcat RMI Unmarshalling Exception'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-1007809923649255285</id><published>2007-01-28T01:28:00.000-02:00</published><updated>2007-01-28T01:47:00.040-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><title type='text'>Ignoring Files in Subversion</title><content type='html'>As I told before, I am using windows as a development environment, and one problem I was facing is that my GUI client SmartSVN was showing binary files produced by compilation (*.class, *.jar) and other uninteristing files do be versioned (like *.log).&lt;br /&gt;&lt;br /&gt;I read documentation in the &lt;a href="http://svnbook.red-bean.com/l"&gt;SVN Book&lt;/a&gt; &lt;a href="http://svnbook.red-bean.com/en/1.1/ch07.html"&gt;Chapter 7&lt;/a&gt;, all sort of sites throughout the internet and there was only one solution that worked for me!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;This Works&lt;/span&gt; - In folder "C:\Documents and Settings\[your_username]\Application Data\Subversion" you will find a file named config (with no extension). In this file there should be a section called [miscellany] and in there you will find the key "global-ignores". Uncomment it (remove the "#" char from the beginning) if necessary, add the extensions you would like to be ignored and you are good to go!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;This DOES NOT work&lt;/span&gt; - Although it is the solution pointed out by the &lt;a href="http://svnbook.red-bean.com/"&gt;SVN Book&lt;/a&gt; and in many sites, changing the windows registry will &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; work for SmartSVN.&lt;br /&gt;&lt;br /&gt;Still could not find a way to set the default &lt;span style="font-style: italic;"&gt;global-ignores&lt;/span&gt; for the whole server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-1007809923649255285?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=1007809923649255285&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1007809923649255285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/1007809923649255285'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/ignoring-files-in-subversion.html' title='Ignoring Files in Subversion'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-3494018308906087541</id><published>2007-01-27T23:58:00.000-02:00</published><updated>2007-02-11T19:24:57.920-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Tomcat Hot Deployment in Windows</title><content type='html'>The &lt;a href="http://thedevelopercorner.blogspot.com/2007/01/using-maven-to-deploy-application-to.html"&gt;post &lt;/a&gt;about hot deploying an application to Tomcat using maven brought me a problem: the struts.jar was always left in the WEB-INF/lib of the exploded directory in the server.&lt;br /&gt;&lt;br /&gt;This is a know issue with Tomcat working under Windows and I found an &lt;a href="http://stuffthathappens.com/blog/2006/01/18/tomcat-hot-deployment/"&gt;article &lt;/a&gt;which I quoted here below with the solution for this problem:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;If you try to hot-deploy a WAR file to Tomcat on Windows, you often encounter file locking issues. Windows won’t let Tomcat undeploy the old app because files are locked by the OS. Here is a fix:&lt;/p&gt; &lt;p&gt;Edit &lt;code&gt;%CATALINA_HOME%\conf\context.xml&lt;/code&gt;. Find the root &lt;code&gt;&amp;lt;context&amp;gt;&lt;/code&gt; and add these two attributes:&lt;/p&gt; &lt;p&gt;&lt;code&gt;&amp;lt;context antijarlocking="true" antiresourcelocking="true"&amp;gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Now you can copy updated WAR files to your deploy directory and Tomcat will remove the old app and hot-deploy your new app. I’m using this on Tomcat 5.5.11 without any trouble.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt; There were &lt;a href="http://www.theserverside.com/discussions/thread.tss?thread_id=35638"&gt;other people&lt;/a&gt; having this kind of problem. Please note that this has nothing to do with using Maven, but with the combination of Tomcat 5.5 + Windows and Hot Deploys! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-3494018308906087541?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=3494018308906087541&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3494018308906087541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/3494018308906087541'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/tomcat-hot-deployment-in-windows.html' title='Tomcat Hot Deployment in Windows'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-5437475447012940560</id><published>2007-01-27T23:35:00.000-02:00</published><updated>2007-01-27T23:48:39.665-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Display HTML tags in HTML pages</title><content type='html'>If you want to display an HTML tag in a web page (including posts in this blogger), you have to replace the tag markers "&lt;" and "&gt;" by their equivalent ASCII entities "&amp;amp;lt;" (which stands fot "&lt;span style="font-style: italic;"&gt;less than&lt;/span&gt;") and "&amp;amp;gt;" (which stands for "&lt;span style="font-style: italic;"&gt;greater than&lt;/span&gt;") respectively.&lt;br /&gt;&lt;br /&gt;Check the &lt;a href="http://www.w3schools.com/default.asp"&gt;W3 Schools&lt;/a&gt; to learn about other &lt;a href="http://www.w3schools.com/tags/ref_entities.asp"&gt;HTML entities&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Just another note: if you want to indent your tags on the page, a simple way to do this is to use the char "&amp;amp;nbsp;" (which stands for "&lt;span style="font-style: italic;"&gt;non blocking spac&lt;/span&gt;e"). This char is not compressed by the browser when rendering a page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-5437475447012940560?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=5437475447012940560&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5437475447012940560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/5437475447012940560'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/display-html-tags-in-html-pages.html' title='Display HTML tags in HTML pages'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6078308376218126943</id><published>2007-01-27T18:06:00.000-02:00</published><updated>2007-01-27T23:52:48.985-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>Using Maven to deploy application to Apache Tomcat Server</title><content type='html'>&lt;p&gt;For those who are not familiar with &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;, it is (as stated in the project site) a "software project management and comprehension tool. Based on the concept of a project object model         (POM), Maven can manage a project's build, reporting and documentation from a central piece of information."&lt;/p&gt;Based on the concept of "convention over configuration" developers may use Maven to compile, build, test, deploy, generate reports and use a whole bunch of other features to manage their software development project. In another oppportunity I will post an article about Maven, for now I will write about my most immediate need: deploy a war file to a tomcat server.&lt;p&gt;As I am using maven to manage my project from test to build, all I need is to configure the &lt;a href="http://cargo.codehaus.org/"&gt;Cargo plugin&lt;/a&gt;. Cargo is able to download, install and start Tomcat, but this is not our focus right now, so I will assume you have Tomcat installed and running with no problems.&lt;/p&gt;&lt;p&gt;Using Maven´s Cargo plugin it is possible to install an application into Tomcat in two ways:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Use the Tomcat Manager application, which is deployed by default with Tomcat 5.x and is nothing more than a web interface to manage your server. It has the ability to install a WAR into the server from a remote location.&lt;/li&gt;&lt;li&gt;Copy the WAR File of your application directly into the File System where Tomcat is expecting applications to be, normally %CATALINE_HOME%/webapps.&lt;/li&gt;&lt;/ol&gt;As one can find strong and weak points in each of these options, I will tell a little bit about the first one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Using the Tomcat Manager&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Now we will deploy an application to Tomcat while it is still running. This is called &lt;span style="font-style: italic;"&gt;Hot Deploying.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;You should add some comands to your pom file, and they should look like the excerpt of code below. Actually it should be positioned between the tags:&lt;br /&gt;&amp;lt;build&amp;gt;&lt;br /&gt; &amp;lt;plugins&amp;gt;&lt;br /&gt;   ...&lt;br /&gt; &amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;lt;/build&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;      &amp;lt;plugin&amp;gt;&lt;br /&gt;     &amp;lt;groupid&amp;gt;org.codehaus.cargo&amp;lt;/groupid&amp;gt;&lt;br /&gt;     &amp;lt;artifactid&amp;gt;cargo-maven2-plugin&amp;lt;/artifactid&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;configuration&amp;gt;&lt;br /&gt;&lt;br /&gt;           &amp;lt;!-- Container configuration --&amp;gt;&lt;br /&gt;           &amp;lt;container&amp;gt;&lt;br /&gt;               &amp;lt;containerid&amp;gt;tomcat5x&amp;lt;/containerid&amp;gt;&lt;br /&gt;               &amp;lt;type&amp;gt;remote&amp;lt;/type&amp;gt;&lt;br /&gt;           &amp;lt;/container&amp;gt;  &lt;br /&gt; &lt;br /&gt;           &amp;lt;!-- Configuration to use with the Container --&amp;gt;&lt;br /&gt;           &amp;lt;configuration&amp;gt;&lt;br /&gt;                 &amp;lt;type&amp;gt;runtime&amp;lt;/type&amp;gt;&lt;br /&gt;                 &amp;lt;properties&amp;gt;&lt;br /&gt;                       &amp;lt;cargo.tomcat.manager.url&amp;gt;http://localhost:8080/manager&amp;lt;/cargo.tomcat.manager.url&amp;gt;&lt;br /&gt;                       &amp;lt;cargo.remote.username&amp;gt;admin&amp;lt;/cargo.remote.username&amp;gt;&lt;br /&gt;                         &amp;lt;cargo.remote.password&amp;gt;admin&amp;lt;/cargo.remote.password&amp;gt;&lt;br /&gt;                 &amp;lt;/properties&amp;gt;&lt;br /&gt;           &amp;lt;/configuration&amp;gt;&lt;br /&gt; &lt;br /&gt;           &amp;lt;!-- Deployer configuration --&amp;gt;&lt;br /&gt;         &amp;lt;deployer&amp;gt;&lt;br /&gt;               &amp;lt;type&amp;gt;remote&amp;lt;/type&amp;gt;&lt;br /&gt;               &amp;lt;deployables&amp;gt;&lt;br /&gt;                   &amp;lt;deployable&amp;gt;&lt;br /&gt;                       &amp;lt;groupid&amp;gt;com.company&amp;lt;/groupid&amp;gt;&lt;br /&gt;                   &amp;lt;artifactid&amp;gt;web-component&amp;lt;/artifactid&amp;gt;&lt;br /&gt;                       &amp;lt;type&amp;gt;war&amp;lt;/type&amp;gt;&lt;br /&gt;                   &amp;lt;/deployable&amp;gt;&lt;br /&gt;               &amp;lt;/deployables&amp;gt;&lt;br /&gt;           &amp;lt;/deployer&amp;gt;      &lt;br /&gt; &lt;br /&gt;     &amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;You should need to change only the values in the &lt;groupid&gt; and &lt;artifactid&gt; tags with the values that describe your component WAR file you wanto to install to Tomcat.&lt;br /&gt;&lt;br /&gt;Having this in your pom file, you need to issue the following command:&lt;br /&gt;&lt;br /&gt;&lt;/artifactid&gt;&lt;/groupid&gt;&lt;blockquote&gt;mvn cargo:deploy&lt;/blockquote&gt;If you already have the application running in tomcat it is necessary that you undeploy it before deploying. So, issue the command below and you should be ok:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;mvn cargo:undeploy&lt;/blockquote&gt;&lt;br /&gt;You also have the option to execute a command that will do an undeploy before attempting to deploy:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;mvn cargo:deployer-redeploy&lt;/blockquote&gt;That should be enough to get the application running in Tomcat, deploying from a remote server.&lt;br /&gt;&lt;br /&gt;I would just like to add that the configuration for the tags &lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;cargo.remote.username&gt; and &lt;/cargo.remote.username&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;cargo.remote.password&gt; are values that must match the ones in the tomcat-users.xml file  with the role "manager". Check this before trying to do the  deploy.&lt;br /&gt;&lt;/cargo.remote.password&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6078308376218126943?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6078308376218126943&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6078308376218126943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6078308376218126943'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/using-maven-to-deploy-application-to.html' title='Using Maven to deploy application to Apache Tomcat Server'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2406693326290401465</id><published>2007-01-27T17:40:00.000-02:00</published><updated>2007-01-27T17:42:35.736-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>SDWest 2007 Conferece</title><content type='html'>The registration for &lt;a href="http://www.sdexpo.com/"&gt;SDWest 2007&lt;/a&gt; is now open.&lt;br /&gt;Early bird discounts goes until February 23rd.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2406693326290401465?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2406693326290401465&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2406693326290401465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2406693326290401465'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/sdwest-2007-conferece.html' title='SDWest 2007 Conferece'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-6223276421350876400</id><published>2007-01-27T12:03:00.000-02:00</published><updated>2007-01-27T17:44:36.074-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Change default View Source Editor in Internet Explorer (IE)</title><content type='html'>I believe it is common sense that Windows Notepad is not among the best text editors in the market, right?&lt;br /&gt;&lt;br /&gt;So, if you wanna change the editor that will display the source html from a web page being displayed in internet explorer to another editor you use, here´s how to do it:&lt;br /&gt;&lt;br /&gt;1 - Open the registry editor. You should find it under C:\WINDOWS\system32\regedt32.exe or simply type "regedit" in the run command box in Start Menu.&lt;br /&gt;&lt;br /&gt;2 - Navigate in the tree to find the following key&lt;br /&gt;&lt;blockquote&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name&lt;/blockquote&gt;&lt;br /&gt;3 - The default value for this key is "C:\windows\notepad.exe". Change this text to whatever editor you like, with the full path to it. If you want to use UltraEdit, for example, the new value should be changed to "C:\Arquivos de programas\UltraEdit\UEdit32.exe".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-6223276421350876400?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=6223276421350876400&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6223276421350876400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/6223276421350876400'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/change-default-view-source-editor-in.html' title='Change default View Source Editor in Internet Explorer (IE)'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-7899517487176733142</id><published>2007-01-18T19:50:00.000-02:00</published><updated>2007-01-27T17:43:31.114-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Versioning'/><title type='text'>SVN as a service under Windows</title><content type='html'>Found this &lt;a href="http://svn.collab.net/repos/svn/trunk/notes/windows-service.txt"&gt;great article&lt;/a&gt; on how to run subversion as a service (check &lt;a href="http://mad-developer.blogspot.com/2007/01/installing-subversion-version-control.html"&gt;my other post&lt;/a&gt; on installing subversion (SVN)).&lt;br /&gt;&lt;br /&gt;Basically it explains how to use the "sc" (Service Control) which is provided by Windows OS to crete a service to run the svnserve command. This should work on Windows NT, XP, 2000 and 2003 Server.&lt;br /&gt;&lt;br /&gt;It should look like something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;sc create [name]&lt;br /&gt;     binpath= "c:\svn\bin\svnserve.exe --service [svn-args]"&lt;br /&gt;     displayname= "Subversion Repository"&lt;br /&gt;     depend= Tcpip&lt;/blockquote&gt;&lt;br /&gt;If you are not comfortable in doing this, you can always try running &lt;a href="http://svnservice.tigris.org/"&gt;svnservice&lt;/a&gt;, which is a project from tigris intended to "offer a comfortable way to run svn server (svnserve.exe) as MS Windows service".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-7899517487176733142?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=7899517487176733142&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7899517487176733142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/7899517487176733142'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/svn-as-service-under-windows.html' title='SVN as a service under Windows'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-2497572967710799316</id><published>2007-01-12T23:09:00.001-02:00</published><updated>2009-03-11T01:39:11.667-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>The Cygwin sshd as a service under Windows</title><content type='html'>My other post on called &lt;a href="http://thedevelopercorner.blogspot.com/2007/01/running-ssh-server-on-windows.html"&gt;"Running a ssh server on Windows"&lt;/a&gt; gave some steps to start a ssh daemon on Windows using Cygwin.&lt;br /&gt;&lt;br /&gt;The interesting thing is that when you setup the ssh environment on Cygwin (executing the command &lt;span style="font-style: italic;"&gt;ssh-host-config&lt;/span&gt;), it also creates a service in windows. This service can be accessed through the Services Management Windows standard administration tool and be setup to start automatically when windows starts.&lt;br /&gt;&lt;br /&gt;Neat! :)&lt;br /&gt;&lt;br /&gt;Check this &lt;a href="http://ncyoung.com/entry/389"&gt;article &lt;/a&gt;with some interesting observations on setting up the users who will and will not be allowed access to the ssh server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-2497572967710799316?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=2497572967710799316&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2497572967710799316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/2497572967710799316'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/cygwin-sshd-as-service-under-windows.html' title='The Cygwin sshd as a service under Windows'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-375608478926991709</id><published>2007-01-12T17:23:00.000-02:00</published><updated>2007-01-27T17:29:44.493-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Running a SSH server on Windows</title><content type='html'>This post is not essentially about software development but is about something I found very useful: having an ssh connection to the machines where I work.&lt;br /&gt;&lt;br /&gt;SSH daemon in available in linux from the start and there are no big matters about it other than security issues.&lt;br /&gt;&lt;br /&gt;Running an ssh server on a Windows machine is a little bit trickier. Thanks to the guys  at Cygnus we have &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;, which is, as stated in their web site "a Linux-like environment for Windows".&lt;br /&gt;&lt;br /&gt;This environment comes with a ssh server daemon which can be run as a service in Windows, allowing you to have ssh connections to your machine using any valid ssh client.&lt;br /&gt;&lt;br /&gt;First step would obiously be to donwload and install Cygwin on your machine. You can find a &lt;a href="http://cygwin.com/cygwin-ug-net/ov-ex-win.html"&gt;quick reference&lt;/a&gt; on installing it under Windows.&lt;br /&gt;&lt;br /&gt;There is an official document distributed with Cygwin on setting up a secure environment using ssh. You will find it entering the following commands on your cygwin prompt:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;cd   /usr/share/doc/Cygwin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;less   openssh.README&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;This document can also be found &lt;a href="http://pigtail.net/LRP/printsrv/openssh.README.txt"&gt;online &lt;/a&gt;and the tips below are intended to be a quick start guide.&lt;br /&gt;&lt;br /&gt;So now that you have Cygwin installed, you should open your cygwin prompt and type:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;ssh-host-config&lt;/blockquote&gt;&lt;br /&gt;The output should be something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ ssh-host-config&lt;br /&gt;Overwrite existing /etc/ssh_config file? (yes/no) yes&lt;br /&gt;Generating /etc/ssh_config file&lt;br /&gt;Overwrite existing /etc/sshd_config file? (yes/no) yes&lt;br /&gt;Privilege separation is set to yes by default since OpenSSH 3.3.&lt;br /&gt;However, this requires a non-privileged account called 'sshd'.&lt;br /&gt;For more info on privilege separation read /usr/share/doc/openssh/README.privsep.&lt;br /&gt;&lt;br /&gt;Should privilege separation be used? (yes/no) yes&lt;br /&gt;Generating /etc/sshd_config file&lt;br /&gt;&lt;br /&gt;Host configuration finished. Have fun!&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This should be enough to run the server daemon. Run &lt;span style="font-weight: bold;"&gt;one &lt;/span&gt;of the following two commands to start it.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;net start sshd&lt;br /&gt;cygrunsrv -S sshd&lt;/blockquote&gt;&lt;br /&gt;Check if the server is actually running:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ &lt;span style="font-weight: bold;"&gt;ps -ef | grep ssh&lt;/span&gt;&lt;br /&gt; SYSTEM     760    3508   ?  00:29:11 /usr/sbin/sshd&lt;/blockquote&gt;&lt;br /&gt;Now test if the connection was successfull:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ &lt;span style="font-weight: bold;"&gt;ssh localhost&lt;/span&gt;&lt;br /&gt;dambrosio@localhost's password:&lt;br /&gt;Last login: Sat Jan 13 00:31:53 2007 from 192.168.1.1&lt;br /&gt;Fanfare!!!&lt;br /&gt;You are successfully logged in to this server!!!&lt;/blockquote&gt;&lt;br /&gt;There are a lot of security issues about ssh and remote connections. Read a bit more about the subject, and there is an &lt;a href="http://ist.uwaterloo.ca/%7Ekscully/SSH_Keys.html"&gt;interesting article&lt;/a&gt; which is a good starting point.&lt;br /&gt;&lt;br /&gt;This other &lt;a href="http://ist.uwaterloo.ca/%7Ekscully/CygwinSSHD_W2K3.html"&gt;article &lt;/a&gt;will give you some hints on installing cygwin, setting it up as a service on Windows 2003 and some issues about security as well.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Remember:&lt;/span&gt; ssh runs by default at port 22, so remember to open this TCP port on your firewall. You do have one, right? :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-375608478926991709?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=375608478926991709&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/375608478926991709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/375608478926991709'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/01/running-ssh-server-on-windows.html' title='Running a SSH server on Windows'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-8097946726271630656</id><published>2007-01-07T23:15:00.000-02:00</published><updated>2007-01-27T17:32:21.651-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Versioning'/><title type='text'>Installing Subversion, a Version Control System</title><content type='html'>Having a &lt;a href="http://en.wikipedia.org/wiki/Revision_control"&gt;Version Control System&lt;/a&gt; is almost mandatory for every developer because keeping track of the evolution of his code is highly desirable. Such a system allows the developer to have individually registered version of every file in his system, including source code, documentation, diagrams etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; (AKA as SVN) is such a system. It is open source and is considered an evolution of &lt;a href="http://www.nongnu.org/cvs/"&gt;CVS&lt;/a&gt; with new features and a new internal architecture which allows SVN to have significant changes and improvements when compared to CVS, such as directories versions, truly atomic commits etc.&lt;br /&gt;&lt;br /&gt;After this brief introduction, let’s get to work. As I am using Windows as platform for development (flames expected here ;) this article will give you the steps on installing SVN on this platform. If you are using Windows there are 3 ways to get subversion on your system:&lt;br /&gt;&lt;br /&gt;1. Get an installer from &lt;a href="http://www.collab.net/"&gt;Collabnet &lt;/a&gt;site.&lt;br /&gt;2. Get a zipped file with binaries from &lt;a href="http://www.tigris.org/"&gt;tigris&lt;/a&gt;.&lt;br /&gt;3. Get the sources from the repository and compile them on your system.&lt;br /&gt;&lt;br /&gt;I’ll stick to the first two situations, because you would normally need the third one only if you need the latest features on the system. The stable releases should be enough for most needs.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Using Collabnet’s installer&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.collab.net/"&gt;Collabnet &lt;/a&gt;is the company that designed and created subversion. Using this prepared installation file should be the easiest way to get subversion up and running on your windows box. It comes with the SVN server, a SVN command-line client and an apache server almost ready for running svn.&lt;br /&gt;CollabNet provides a &lt;a href="http://www.open.collab.net/files/documents/61/65/README_Windows_Server.txt"&gt;readme &lt;/a&gt; file with basic instructions on creating a repository, clearing the firewall to let SVN do his work etc. It is a good basic reference. So, simply &lt;a href="http://downloads-guests.open.collab.net/files/documents/61/66/CollabNet-Subversion-1.4-server-and-client-Windows.exe"&gt;download &lt;/a&gt; the file (version 1.4 as of the time of the writing) and follow instructions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Using ZipFile Binaries&lt;/strong&gt;&lt;br /&gt;This installation option is a little bit more difficult than the one above but everyone should do fine. I will not cover apache installation on this article.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Step 1&lt;/em&gt;&lt;br /&gt;First of all you should download the latest version of the server available from subversion project &lt;a href="http://subversion.tigris.org/project_packages.html"&gt;downloads&lt;/a&gt; page. As of the time of this writing it is version 1.4.2. You may choose to download the sources and compile them yourself or download the binaries created by contributors to the project, which though not maintained by the project team are normally reliable packages. Now scroll the downloads page down to find the binaries for SVN Server for Windows. When you are redirected to the page find the latest release (should be the last one in the list) and get the file which name looks more or less like this svn-win32-X.X.X.zip (the one I got was &lt;a href="http://subversion.tigris.org/downloads/svn-win32-1.4.2.zip"&gt;svn-win32-1.4.2.zip&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Step 2&lt;/em&gt;&lt;br /&gt;Unzip the file somewhere on your hard disk where it would make sense to have the subversion binaries. We will call this folder the subversion home directory (%SVN_HOME%). For example, if you unziped the files for SVN version 1.4.2 under C:\Program Files folder, your %SVN_HOME% dir would be: C:\Program Files\svn-win32-1.4.2. On the %SVN_HOME%\bin folder you will find the executable files which you will use to maintain your server and repositories.&lt;br /&gt;&lt;br /&gt;svn.exe - Subversion client&lt;br /&gt;svnadmin.exe - Subversion repository administration&lt;br /&gt;svndumpfilter.exe - Subversion dump fle filter&lt;br /&gt;svnlook.exe - Subversion repository browser&lt;br /&gt;svnserve.exe - Subversion Server&lt;br /&gt;svnsync.exe - Subversion repository replicator&lt;br /&gt;svnversion.exe - Subversion revision extractor&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Step 3&lt;/em&gt;&lt;br /&gt;Let’s create the repository. Add the %SVN_HOME%\bin folder to your path variable in Windows to make the binaries accessible from anywhere in your computer. Now, create a test repository folder somewhere on your system (let’s say c:\temp\svn-test-rep) and we will call it the %SVN_REP%.&lt;br /&gt;Run the svnadmin command to create a repository called repos1. You will do that running the following command:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;svnadmin create c:\temp\svn-test-rep\repos1&lt;/blockquote&gt;&lt;br /&gt;As a result you should have a folder called "repos1" under %SVN_REP% with the following content:&lt;br /&gt;&lt;br /&gt;DIR --- conf&lt;br /&gt;DIR --- dav&lt;br /&gt;DIR --- db&lt;br /&gt;------- format&lt;br /&gt;DIR --- hooks&lt;br /&gt;DIR --- locks&lt;br /&gt;------- README.txt&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Step 4&lt;/em&gt;&lt;br /&gt;Now we should test the server. This is as simple as running the command below:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;svnserve -d -r c:\temp\svn-test-rep&lt;/blockquote&gt;&lt;br /&gt;This will get the server up and running. The "-d" tells the server to run as a daemon and "-r" tells the repository name.&lt;br /&gt;Remember to enable svnserve to run on your firewall if you have one (if you don’t, you should get one ;)).&lt;br /&gt;&lt;br /&gt;Now open another command prompt (while the server is still running), go to your "temp" folder and checkout the repository you created on step 3. Checking out a repository means getting a local version (copy with a revision number) from every file present on your repository. You can do that by typing:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;svn co svn://localhost/repos1&lt;/blockquote&gt;&lt;br /&gt;This command will ask the svn server running on localhost to get the latest revision of every file on repository called "repos1". The "co" in the command line stands for "checkout" and "svn://" specifies the protocol used to access the repository. If had apache installed and setup to run svn mods we could use http or https to access the repository.&lt;br /&gt;&lt;br /&gt;Well, this pretty much tells you how to install a SVN server and create repositories for your code. Of course now you will get worried about issues like: who can access my files or how do I specify security constraints? This should be subject for another article, as well as svn GUI clients and apache server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-8097946726271630656?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=8097946726271630656&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8097946726271630656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/8097946726271630656'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2007/07/installing-subversion-version-control.html' title='Installing Subversion, a Version Control System'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3902685388636650994.post-349761631685993504</id><published>2006-12-07T17:26:00.000-02:00</published><updated>2007-01-27T17:31:58.597-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>JBoss World 2006 - Presentations</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/4133/4252/1600/805397/Berlim%20018%20%28Small%29.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/4133/4252/200/89332/Berlim%20018%20%28Small%29.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;From November 20th to November 22nd 2006 I attended the &lt;a href="http://www.jbossworld.com/"&gt;JBoss World Conference&lt;/a&gt; in Berlim.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The conference was dedicated to developers, with speaks indicating the level of knowledge expected from the audience on the subject. There were also hands on sessions for testing new technologies provided by JBoss.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/4133/4252/1600/438204/Berlim%20149%20%28Small%29.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/4133/4252/200/143702/Berlim%20149%20%28Small%29.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The presentations are now available for download from the conference web site.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jboss.com/events/agenda_monday_schedule.htm"&gt;Monday Speaks&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.jboss.com/events/agenda_tuesday_schedule.htm"&gt;Tuesday Speaks&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.jboss.com/events/agenda_wednesday_schedule.htm"&gt;Wednesday Speaks&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy it! ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3902685388636650994-349761631685993504?l=thedevelopercorner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3902685388636650994&amp;postID=349761631685993504&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/349761631685993504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3902685388636650994/posts/default/349761631685993504'/><link rel='alternate' type='text/html' href='http://thedevelopercorner.blogspot.com/2006/07/jboss-world-2006-presentations.html' title='JBoss World 2006 - Presentations'/><author><name>Daniel</name><uri>http://www.blogger.com/profile/11086185605750382429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
