New Spring Integration Samples |
|

Based on your overwhelming requests for more Spring Integration samples and more usable structure we are pleased to make the following announcement:
Starting with the current release of Spring Integration the samples will no longer be included with Spring Integration distribution. Instead we've switched to a much simpler collaborative model that should promote better community participation and community contributions. Samples now have a dedicated Git SCM repository and a dedicated JIRA Issue Tracking system. Sample development will also have its own lifecycle which is not dependent on the lifecycle of the framework releases although the repository will still be tagged with each major release for compatibility reasons. The great benefit to the community is that we can now add more samples and make them available to you right away without waiting for the release of the framework. Having its own JIRA that is not tied up to the the actual framework is also a great benefit. You now have a dedicated place to suggest samples as well as report issues with existing samples. Or you may also want to submit a sample to us as an attachment through the JIRA and if we believe your sample adds value we would be more then glad to add it to our samples repository properly crediting the author.
Where to get Samples
To monitor samples development and to get more information on the repository you can visit the following URL: http://git.springsource.org/spring-integration/samples . We are also using Git SCM as samples repository. For more information on Git SCM please visit their website: http://git-scm.com/
CLONE samples repository. (For those unfamiliar with Git, this is somewhat the equivalent of a checkout.)
This is the first step you should go through. You must have Git client installed on your machine. There are many GUI-based products available for many platforms. Simple Google search will let you find them. To clone samples repository from command line:
> mkdir spring-integration-samples
> cd spring-integration-samples
> git clone git://git.springsource.org/spring-integration/samples.git
That is all you need to do. Now you have cloned the entire samples repository. Since samples repository is a live repository, you might want to perform periodic updates to get new samples as well as updates to the existing samples. To get the updates use git PULL command:
> git pull
Track Samples
As mentioned earlier, Spring Integration samples have a dedicated JIRA Issue tracking system. To submit new sample request or to submit the actual sample (as an attachment) please visit our JIRA Issue Tracking system: https://jira.springframework.org/browse/INTSAMPLES
Samples structure
The structure of the samples changed as well. With plans for more samples we realized that some samples have different goals then others. While they all share the common goal of showing you how to apply and work with Spring Integration framework, they also defer in areas where some samples were meant to concentrate on the technical use cases while others on the business use cases and some samples are all about showcasing various techniques that could be applied to address certain scenarios (both technical and business). Categorization of samples will allow us to better organize them based on the problem each sample addresses while giving you a simpler way of finding the right sample.
Currently there are 4 categories. Within the samples repository each category has its own directory which is named after the category name:
BASIC
(samples/basic)
This is a good place to get started. The samples here are technically motivated and demonstrate the bare minimum with regard to configuration and code, to help you to get started quickly by introducing you to the basic concepts, API and configuration of Spring Integration as well as Enterprise Integration Patterns (EIP). For example; If your are looking for an answer on how to implement and wire Service Activator to a Channel or how to use Messaging Gateway to your message exchange or how to get started with using MAIL or TCP/UDP modules etc., this would be the right place to find a good sample. The bottom line is this is a good place to get started.
INTERMEDIATE
(samples/intermediate)
This category targets developers who are already familiar with Spring Integration framework (past getting started), but need some more guidance while resolving a more advanced technical problems one might deal with once they switch to a Messaging architecture. For example; If you are looking for an answer on how to handle errors in various message exchange scenarios or how to properly configure the Aggregator for the situations where some messages might not ever arrive for aggregation etc,. and any other issue that goes beyond the basic implementation and configuration of a particular component and addresses "what else you can do with it" type of problem this would be the right place to find these type of samples.
ADVANCED
(samples/advanced)
This category targets develoopers who are very familiar with Spring Integration framework but looking to extend it to address a specific custom need by using Spring Integration public API. For example; if you are looking for samples showing you how to implement a custom Channel or Consumer (event-based or polling-based), or you trying to figure out what is the most appropriate way to implement custom Bean parser on top of Spring Integration Bean parsers hierarchy when implementing custom name space for a custom component, this would be the right place to look. Here you can also find samples that will help you with Adapter development. Spring Integration comes with an extensive library of adapters to allow you to connect remote systems with Spring Integration messaging framework. However you might have a need to integrate with system for which the core framework does not provide an adapter. So you have to implement your own.
This category would include samples showing you how to do it.
APPLICATIONS
(samples/applications)
This category targets developers and architects who have a good understanding of the Messaging architecture, EIP and above average understanding of Spring and Spring Integration frameworks and are looking for samples that address a particular business problem. In other words the emphasis of samples in this category is business use cases and how they could be solved via Messaging Architecture and Spring Integration in particular. For example; If you are interested to see how a Loan Broker or Travel Agent process could be implemented and automated via Spring Integration this would be the right place to find these types of samples.
Spring Integration samples are also tagged with major releases. So, to checkout the version that is specific to 2.0.0.RELEASE all you need to do is execute the following Git command after you cloned the repository "git checkout v2.0.0.RELEASE".
Remember! Spring Integration is a community driven framework, therefore community participation is IMPORTANT. That includes Samples, so if you can't find what you are looking for let us know.
And of course, feedback is always welcome!
Similar Posts
- Spring Integration 1.0.3 Samples: just add Maven
- Community-Driven Spring Integration Extensions
- Spring Integration 2.0 GA Released
- Using Spring BlazeDS Integration 1.0.0.M1
- Spring Integration 2.0 Milestone 3 Released





Mike Smithson says:
Added on September 30th, 2010 at 6:37 amThanks for the information. Just to let you know, there is a grammar error in the first sentence:
"Based on you overwhelming…."
Should be:
"Based on your overwhelmeing…."
anand says:
Added on October 7th, 2010 at 5:19 amThanks Oleg !
This will help a lot
Oleg Zhurakousky (blog author) says:
Added on November 9th, 2010 at 7:58 amThanks for reporting it. It was fixed https://jira.springframework.org/browse/INTSAMPLES-8, so please update or simply remove MapBasedChannelResolver and modify the router to look like this:
You may also want to read a new section in the reference manual "Dynamic Router Support" which explains some of the reasons for this change.
Joshua Smith says:
Added on November 20th, 2010 at 8:54 pmVery helpful. Thank you. If only more open source projects took samples more seriously…
Keesjan van Bunningen says:
Added on November 23rd, 2010 at 10:25 amI'm very interested to study your SI samples and get to work with the latest 2.0 release, but I'm not (yet) a GIT convert. (Call me old-skool.)
Is it possible that you also publish the samples as a separate, plain-old zip download alongside the SI distribution?
The gesture will be much appreciated.
– an old-skool Java-hippy.
Oleg Zhurakousky (blog author) says:
Added on November 23rd, 2010 at 11:16 amWell, I would suggest you learn some basic Git. For the purpose of running the samples you only need to clone (checkout) them. We used to distribute our samples with the release, but then based on the community feedback we realize that demand for new samples or updates to the existing samples is much higher, thus making our samples very volatile (much shorter cycles then the once a year release). Just as an example I've added 5 more samples just a few days ago and planning to add more next week. There are plenty of command line and GUI clients for Git. Give it a shot
Keesjan van Bunningen says:
Added on November 24th, 2010 at 5:31 amOk. I took the bullit and my Windows system is now officially running Beta software (a thing I'm always trying to avoid). And I already got my first blocking error in the GUI while using the basic clone operation; welcome to the bleeding edge, I guess.
Luckily I could fallback on Git Bash, which worked just fine.
Thanks for dragging me kicking-and-screaming in to the Git-era.
Michael says:
Added on November 24th, 2010 at 8:16 amHi Oleg, thanks for samples, very helpful. I had a question about the Basic JMS sample, in particular the GatewayDamo. Does it actually use the replyQueue? and if so, how is that plugged in?
Oleg Zhurakousky (blog author) says:
Added on November 24th, 2010 at 8:21 am@Michael
It is auto-created if not explicitly specified. However, you can also specify it with 'reply-destination' attribute. Does that answer the question?
Ken says:
Added on December 17th, 2010 at 12:36 amI encountered error to run all the junits in every sample project. All hit to the same error at the same code statement as appended in the following. Is there any idea on how to fix this issue? Please advise.
AbstractApplicationContext context = new ClassPathXmlApplicationContext("/META-INF/spring/integration/helloWorldDemo.xml", HelloWorldDemoTest.class);
java.lang.ExceptionInInitializerError
at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:194)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:127)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:197)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:172)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:158)
at org.springframework.integration.samples.helloworld.HelloWorldDemoTest.testHelloWorld(HelloWorldDemoTest.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.NullPointerException
at org.springframework.beans.factory.support.DefaultListableBeanFactory.(DefaultListableBeanFactory.java:104)
… 30 more
Ken says:
Added on December 17th, 2010 at 12:43 amI encountered error to run all the junits in every sample project. All hit to the same error at the same code statement caused by NullPointer exception at DefaultListableBeanFactory. Is there any idea on how to fix this issue? Please advise.
AbstractApplicationContext context = new ClassPathXmlApplicationContext("/META-INF/spring/integration/helloWorldDemo.xml", HelloWorldDemoTest.class);
java.lang.ExceptionInInitializerError
at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:194)
…
…
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:158)
at org.springframework.integration.samples.helloworld.HelloWorldDemoTest.testHelloWorld(HelloWorldDemoTest.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
…
…
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.NullPointerException
at org.springframework.beans.factory.support.DefaultListableBeanFactory.(DefaultListableBeanFactory.java:104)
… 30 more
Ken says:
Added on December 17th, 2010 at 12:46 amFailed to run all the junits in every sample project. All hit to the same error at the following code statement caused by NullPointer exception at DefaultListableBeanFactory. Any idea on how to fix this issue? Please advise.
AbstractApplicationContext context = new ClassPathXmlApplicationContext("/META-INF/spring/integration/helloWorldDemo.xml", HelloWorldDemoTest.class);
java.lang.ExceptionInInitializerError
at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:194)
…
…
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:158)
at org.springframework.integration.samples.helloworld.HelloWorldDemoTest.testHelloWorld(HelloWorldDemoTest.java:47)
…
…
Caused by: java.lang.NullPointerException
at org.springframework.beans.factory.support.DefaultListableBeanFactory.(DefaultListableBeanFactory.java:104)
… 30 more
Ken says:
Added on December 17th, 2010 at 12:48 amFailed to run all the junits of all sample projects. Any idea on how to fix this issue? Please advise.
Error at
AbstractApplicationContext context = new ClassPathXmlApplicationContext("/META-INF/spring/integration/helloWorldDemo.xml", HelloWorldDemoTest.class);
java.lang.ExceptionInInitializerError
at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:194)
…
…
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:158)
at org.springframework.integration.samples.helloworld.HelloWorldDemoTest.testHelloWorld(HelloWorldDemoTest.java:47)
…
…
Caused by: java.lang.NullPointerException
at org.springframework.beans.factory.support.DefaultListableBeanFactory.(DefaultListableBeanFactory.java:104)
… 30 more
Oleg Zhurakousky (blog author) says:
Added on December 21st, 2010 at 5:27 pm@Ken
I am not sure what is the issue without looking at the full stack trace. Also, this is the first time anyone ever reported any issue with HelloWorld sample. Did you change anything? Are you running it as Maven project in terms of did you modify the classpath?
john malaki says:
Added on December 26th, 2010 at 8:38 pmYes I am at loggerheads with this problem. Just started on SPRING with TOOLSUITE STUDIO. All template examples ran fine but when I tried downloading SPRINGWEBFLOW samples on spring-webflow-2.2.1.RELEASE I found out tcserver had the very same problem:
ErrorListenerStart in tomcat tc server
Caused by: java.lang.NullPointerException
at org.springframework.beans.factory.support.DefaultListableBeanFactory.(DefaultListableBeanFactory.java:104)
Please help.
vinay says:
Added on December 29th, 2010 at 5:58 pmOleg,
I downloaded Git-1.7.3.1 winclient. And followed steps to clone the repo as
>cd c:\temp
> mkdir spring-integration-samples
> cd spring-integration-samples
> git clone git://git.springsource.org/spring-integration/samples.git
But last command above gives me error below
Cloning into samples…
fatal: read error: Invalid argument
Googled a bit but does not seem to give me any ideas. Any pointer is helpful.
Neale says:
Added on January 6th, 2011 at 5:42 amDitto
Pawel Adamski says:
Added on February 23rd, 2011 at 4:06 amI've the same problem as vinay. I get the following error:
$ git clone git://git.springsource.org/spring-integration/samples.git
Cloning into samples…
git.springsource.org[0: 64.20.104.11]: errno=Invalid argument
fatal: unable to connect a socket (Invalid argument)
Ahsan Shah says:
Added on March 2nd, 2011 at 1:42 amHello,
I am getting following error while cloning:
$ git clone git://git.springsource.org/spring-integration/samples.git
Cloning into samples…
git.springsource.org[0: 64.20.104.11]: errno=No such file or directory
fatal: unable to connect a socket (No such file or directory)
Any help !!
Oleg Zhurakousky (blog author) says:
Added on March 2nd, 2011 at 8:39 amAre you guys behind firewalls? "unable to connect a socket" – means you can't even connect to that URL and it is valid.
Pattabi says:
Added on March 10th, 2011 at 3:04 pmSame problem here. Not able to ping 64.20.104.11
Christophe says:
Added on March 31st, 2011 at 7:31 pmI am still unable to clone the samples, just like the guys above. Any news or resolution on this?
Satya Roy says:
Added on June 19th, 2011 at 11:22 pmThis may be due to firewall settings, I also encountered it while downloading from my office desktop, but downloaded successfuly from personal laptop.
Ragnar says:
Added on June 29th, 2011 at 3:57 amI am currently at a customers site and do not have the opportunity to use Git, so I'm stuck.
Come on guys, this is redicilous! Please, make the samples available as a downloadable ZIP.
Neale Upstone says:
Added on June 29th, 2011 at 7:41 amI almost missed this one myself when I needed it…
On gitorious, it's there on the right when viewing the source.
http://git.springsource.org/spring-integration/samples/archive-tarball/master
Ragnar says:
Added on June 29th, 2011 at 8:22 amOk, weird thing happend …
When I submitted my previous post I ticked of for receiveing email on further entries to this topic. I subscribed, I guess…
A few hours later I received a mail saying a new comment had been entered. The name of the author was included in the mail the message he had submitted. There was also a link to this site, so I clicked it and it opened.
So far so good. The weird thing is:
1) I can not see the new comment
2) The comment field has the name of the author for the message (I cannot see) AND HIS MAIL ADDRESS!
I had a collegue open this page too, and the same happened there, so it doesn't seem to have anything to to with the link in the mail, or the fact that I was subscribed.
This is not quite in line with the "will not be published" statement, is it?
Ragnar says:
Added on June 29th, 2011 at 8:39 amHi, it's me again
Now I can see Neale's comment that I received in the mail.
And Neale, your mail address was visible in the Mail field for a while but is now gone.
Thanks for the info and link!
However, I have noe downloaded the tar.gz file but apart from a few config files at the top level it seems to be empty? Same goes for the HEAD file (instead of MASTER)
If I browse online the code is there.
Do you see any code in the file?
Neale Upstone says:
Added on June 29th, 2011 at 9:04 amThat email thing is a bit weird. I'll keep an eye out.
As for the tarball, I've just checked it with 7Zip under Windows, and it's working fine. I open the gz, and get a tar, which when I open it has the sample code.
Ragnar says:
Added on June 29th, 2011 at 10:56 amOk, Neale. I downloaded it at home now and it seems fine.
At the customer site they use IE through a Citrix system and that maybe why it failed.
Again, thanks!
To the Spring Integration guys: I would recommend mentioning the tarball download first, here and in the doc. It is probably what a lot of people want instead of cloning the source using Git.
/Ragnar
Ragnar says:
Added on June 30th, 2011 at 3:50 amHi again, folks.
Just checked again now regarding the weird mail adress issue and now I see my own address in the field titled "Mail (will not be published) (required)".
Once again I had a collegue check on his machine and the same happens there.
It seems to me that the name and mail adress of the person who committed the last entry is visible in the "Leave a Reply" section.
Please, can someone running this site have a look at this and confirm that it will be investigated?
/Ragnar
Lokesh says:
Added on June 30th, 2011 at 3:35 pmFirst of all thanks for investing your time in writing nice samples. These are really helpful.
I modified your code a little according to my requirement. When I try running the code, I am getting the following exception,
I am running it from eclipse. Please help me.
Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/integration/sftp]
Offending resource: class path resource [com/test/integration/sftp/applicationContext-sftp.xml]
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:284)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1332)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1325)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:122)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:197)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:172)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:158)
at com.test.integration.sftp.FetchFileUsingSftp.fetchFile(FetchFileUsingSftp.java:29)
at com.test.integration.sftp.test.TestSftp.main(TestSftp.java:12)
Fix says:
Added on June 30th, 2011 at 5:11 pmPls fix the leave a reply section, it shows the name and email id of last replied person.
Thanks
hkjackjoke says:
Added on August 17th, 2011 at 11:15 pmFace the same before
"fatal: unable to connect a socket (Invalid argument)" , if
git clone git://git.springsource.org/spring-integration/samples.git
Try & see
git clone http://http.git.springsource.org/spring-integration/samples.git
William says:
Added on September 7th, 2011 at 12:00 amIt’s hard to put into words how interesting your site is. Putting it bluntly it feels like forever since I’ve stumbled upon information like this maintain the good content.
Customer Testimonials says:
Added on September 8th, 2011 at 3:15 amI'm so glad I found this blog! I was getting this error:
"fatal: unable to connect a socket (Invalid argument)" , if
git clone git://git.springsource.org/spring-integration/samples.git
Solved!
Thanks,
Chuck
kailey wengoe says:
Added on November 4th, 2011 at 3:24 pmGood website. All posts have a process to learn. Thank you for another important article.