<?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-8396869410733758432</id><updated>2011-10-28T09:26:25.722+03:00</updated><category term='VisualVM'/><category term='EasyMock'/><category term='IDEA'/><category term='scalability'/><category term='Subversion'/><category term='XP'/><category term='web'/><category term='books'/><category term='Intellij IDEA'/><category term='Hibernate'/><category term='mock'/><category term='maven'/><category term='FreeMarker'/><category term='Java'/><category term='date'/><category term='time'/><category term='test'/><category term='agile'/><category term='Unitils'/><category term='build'/><category term='TeamCity'/><category term='design'/><category term='article'/><category term='bean'/><category term='Spring'/><category term='JUnit'/><category term='architecture'/><category term='SVN'/><category term='J2EE'/><category term='training'/><category term='DbUnit'/><title type='text'>Java development tips</title><subtitle type='html'>Tips for Java development, frameworks usage and known issues with solutions</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-4933434732338862924</id><published>2010-01-31T00:18:00.000+02:00</published><updated>2010-01-31T00:18:48.464+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>Kill your application with Hibernate subselect!</title><summary type='text'>If you want to kill your application silently the best way is to use Hibernate 'subselect' fetching strategy. Lets discuss the issue in details. Imagine that you have entities 'Post' and 'Comment' in the domain model with corresponding tables in the database:


public class Post {
    private Long id;
    private String title;
    private String body;
    private Set&lt;Comment&gt; comments;
    ...
}
</summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/4933434732338862924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=4933434732338862924' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/4933434732338862924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/4933434732338862924'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2010/01/kill-your-application-with-hibernate.html' title='Kill your application with Hibernate subselect!'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-2808110960969102893</id><published>2009-10-19T11:28:00.004+03:00</published><updated>2009-10-19T13:20:29.705+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>Defining batch size for batch fetching in Hibernate</title><summary type='text'>One of the Hibernate performance tuning ways when you need to work with parent/children relationships is to use lazy loading collections with batch fetching. This way allows you to perform far less than n+1 SQL queries to initialize your entities. To enable this mode you just need to specify batch-size attribute in XML mapping for collection or mark it with @BatchSize annotation in Java code. But</summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/2808110960969102893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=2808110960969102893' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/2808110960969102893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/2808110960969102893'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2009/10/defining-batch-size-for-batch-fetching.html' title='Defining batch size for batch fetching in Hibernate'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-7636432891115415086</id><published>2009-10-18T13:13:00.002+03:00</published><updated>2009-10-19T11:28:20.361+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Ideal project video</title><summary type='text'>Recently I have viewed video presentation from the InfoQ about one team experience report. This team uses a lot of great engineering and collaboration practices, always experiments and analyzes results of their work. Its really only one right way to build products quickly, within the budget and with the highest level of quality. They always communicate with customers and gather feedback from them</summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/7636432891115415086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=7636432891115415086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/7636432891115415086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/7636432891115415086'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2009/10/ideal-project-video.html' title='Ideal project video'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-1841077054609978927</id><published>2009-10-14T09:53:00.003+03:00</published><updated>2009-10-14T10:14:42.258+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='XP'/><title type='text'>XP injection at ITjam</title><summary type='text'>In September Kiev became a little more Agile because of the largest Agile conference in the Eastern Europe. On Agilee I have presented "People factor as failure reason of Agile adoption". This presentation is about people and requirements for them from Agile world, how everybody may improve his skills and become Agile team member. The next conference I'm going to participate in is ITjam. I will </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/1841077054609978927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=1841077054609978927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/1841077054609978927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/1841077054609978927'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2009/10/xp-injection-at-itjam.html' title='XP injection at ITjam'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-826934397550973872</id><published>2009-10-13T17:49:00.002+03:00</published><updated>2009-10-13T18:07:40.785+03:00</updated><title type='text'>Agile Coaching site launched</title><summary type='text'>Some weeks ago I have launched Agile Coaching web site. It contains a lot of trainings available for ordering and participating, presentations from different conferences and video materials. I'm going to continuously fill this site with new useful information. I hope that you find something interesting for you there. Develop with pleasure!</summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/826934397550973872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=826934397550973872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/826934397550973872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/826934397550973872'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2009/10/agile-coaching-site-launched.html' title='Agile Coaching site launched'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-5526856085868432176</id><published>2009-10-13T13:18:00.003+03:00</published><updated>2009-10-13T14:13:59.292+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Manage dependent projects in Maven</title><summary type='text'>If you have been used Maven for a long time you probably know that it supports both project inheritance and aggregation. There is detailed description with samples on Maven site how both of them work. But sometimes you have really separated projects one of them depends on another, but both of them are continuously in development phase. So you need to use latest build artifacts of the base project</summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/5526856085868432176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=5526856085868432176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/5526856085868432176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/5526856085868432176'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2009/10/manage-dependent-projects-in-maven.html' title='Manage dependent projects in Maven'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-4323467641619760874</id><published>2009-03-12T16:49:00.003+02:00</published><updated>2009-03-12T17:16:29.105+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='VisualVM'/><category scheme='http://www.blogger.com/atom/ns#' term='TeamCity'/><title type='text'>Be careful of large log files using TeamCity</title><summary type='text'>Previous week I had very interesting experience with TeamCity continuous integration server. From some moment it became unable to perform any actions, just hanging and them crashing. After analysis of the server logs and running processes we identified that it uses 100% CPU time and then fail with errors related to memory limitations. The first level of the issue was that it runs garbage </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/4323467641619760874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=4323467641619760874' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/4323467641619760874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/4323467641619760874'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2009/03/be-careful-of-large-log-files-using.html' title='Be careful of large log files using TeamCity'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-9068073734213287332</id><published>2008-12-19T22:28:00.003+02:00</published><updated>2009-03-12T16:52:50.624+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Risk of inheritance</title><summary type='text'>Inheritance is one of the basics in any object oriented language but you always should think a lot before use it in your code. Of course inheritance is very useful when you design your code for it, use abstract classes, template method design pattern, create different implementations overriding well defined protected methods and so on. But in some cases inheritance may make damage to your </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/9068073734213287332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=9068073734213287332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/9068073734213287332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/9068073734213287332'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/12/risk-of-inheritance.html' title='Risk of inheritance'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-2438015080410773957</id><published>2008-12-19T21:57:00.004+02:00</published><updated>2008-12-19T22:24:04.706+02:00</updated><title type='text'>Crisis in action</title><summary type='text'>As far as you know in many countries economical crisis came and many "experienced" people was fired in IT market. But crisis makes a good job for some companies. I want to share my experience in interviewing one of such "experienced" guys. This person has a lot of practical experience with Java language at all levels from core to web. After some general questions I proposed following interface </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/2438015080410773957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=2438015080410773957' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/2438015080410773957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/2438015080410773957'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/12/crisis-in-action.html' title='Crisis in action'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-2890187100143534537</id><published>2008-09-13T09:51:00.003+03:00</published><updated>2008-09-13T10:27:03.892+03:00</updated><title type='text'>Generics commons collections</title><summary type='text'>Everybody of you who have large experience with Java thanks Apache for their commons project. This project includes a lot of libraries to extend or simplify work with JDK. One of these libraries is commons-collections.It was very helpful when you needed to work with specific kinds of collections like multi map, lazy collections, bidirectional map, etc. Also it had a great number of iterators, </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/2890187100143534537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=2890187100143534537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/2890187100143534537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/2890187100143534537'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/09/generics-commons-collections.html' title='Generics commons collections'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-211789503453649882</id><published>2008-07-20T14:12:00.002+03:00</published><updated>2008-07-20T14:22:48.754+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='training'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>Acceptance Test Driven Development training in Kiev</title><summary type='text'>In august I'm going to conduct a training on the Acceptance Test Driven Development in Kiev. Date and agenda of the training was announced  with help of Agile Ukraine. Most of the presented tools for automated acceptance testing will be related to Java language (have implementation for Java or native Java support). You are welcome!</summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/211789503453649882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=211789503453649882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/211789503453649882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/211789503453649882'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/07/acceptance-test-driven-development.html' title='Acceptance Test Driven Development training in Kiev'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-4174928322931186537</id><published>2008-07-19T13:40:00.001+03:00</published><updated>2008-07-19T14:44:38.815+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unitils'/><category scheme='http://www.blogger.com/atom/ns#' term='mock'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyMock'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>Advanced EasyMock techniques</title><summary type='text'>EasyMock is one of many mock libraries available for Java testing. Now it archive version 2.4 and is very powerful. For those of you who are not familiar with mock concepts start with Martin Fowler article. Detailed guide about EasyMock you can read here. I'm going to show some advanced techniques of using EasyMock in your tests.Imagine that you have following document processing code:public </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/4174928322931186537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=4174928322931186537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/4174928322931186537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/4174928322931186537'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/07/advanced-easymock-techniques.html' title='Advanced EasyMock techniques'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-5655422794922614874</id><published>2008-07-16T20:03:00.004+03:00</published><updated>2008-07-18T00:37:16.979+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='article'/><title type='text'>Design for scalability</title><summary type='text'>If you develop large J2EE or WEB application using Java you should always think about scalability of your application (of course if you expect your application to be popular). Nobody tell you that you should scale your application initially, but take in mind that some architecture solutions may make it really hard to scale in the future. You have two common approaches: vertical and horizontal </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/5655422794922614874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=5655422794922614874' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/5655422794922614874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/5655422794922614874'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/07/design-for-scalability.html' title='Design for scalability'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-2339989798740177160</id><published>2008-07-14T01:05:00.001+03:00</published><updated>2008-07-15T12:07:41.380+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unitils'/><category scheme='http://www.blogger.com/atom/ns#' term='DbUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyMock'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>Make your tests excellent with Unitils</title><summary type='text'>I am going to share my experience in using Unitils - framework that makes life easier. I have started to work with this framework from early release candidates and can't imagine my tests without it now. If you need to test application that use Hibernate, Spring, other ways of database access, but you don't want to write much test code and create some homegrown frameworks, then Unitils is your </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/2339989798740177160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=2339989798740177160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/2339989798740177160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/2339989798740177160'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/07/make-your-tests-excelent-with-unitils.html' title='Make your tests excellent with Unitils'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-3034856371298441105</id><published>2008-07-12T11:30:00.000+03:00</published><updated>2008-07-14T00:35:16.156+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='date'/><title type='text'>Evil 'System.currentTimeMillis()' and 'new Date()'</title><summary type='text'>If you use TDD like me or just write unit tests for your code then you have already met issues with testing dates. There are two common ways to retrieve current time in Java: 'System.currentTimeMillis()' and 'new Date()'. Both of them make your code untestable. To illustrate this effect imagine that you test service for user registration and user  record in the database contains registration date</summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/3034856371298441105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=3034856371298441105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/3034856371298441105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/3034856371298441105'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/07/evil-systemcurrenttimemillis-and-new.html' title='Evil &apos;System.currentTimeMillis()&apos; and &apos;new Date()&apos;'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-4092868671983679107</id><published>2008-07-12T11:00:00.000+03:00</published><updated>2008-07-14T00:34:56.994+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Be careful with your 'hashCode()'!</title><summary type='text'>Every Java developer know that there are some methods common for all objects. One of them is 'hashCode()'. By default it returns internal address of the object, but should be overridden when your overrides another common method 'equals()'. Contract for the 'hashCode()' is following: Whenever it is invoked on the same object more than once during     an execution of a Java application, the </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/4092868671983679107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=4092868671983679107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/4092868671983679107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/4092868671983679107'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/07/be-careful-with-your-hashcode.html' title='Be careful with your &apos;hashCode()&apos;!'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-4705967886658329198</id><published>2008-07-11T17:42:00.004+03:00</published><updated>2008-07-11T19:39:51.707+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Effective Java (2nd Edition)</title><summary type='text'>May 2008 brings us second edition of the Java bible "Effective Java" from Joshua Bloch. First edition takes first positions in many 'must read' lists for Java developers. This edition additionally includes features from Java 5 and 6. You can order it at Amazon.</summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/4705967886658329198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=4705967886658329198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/4705967886658329198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/4705967886658329198'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/07/effective-java-2nd-edition.html' title='Effective Java (2nd Edition)'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-3698708814508282714</id><published>2008-07-11T14:39:00.003+03:00</published><updated>2008-07-11T15:04:33.226+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='IDEA'/><category scheme='http://www.blogger.com/atom/ns#' term='FreeMarker'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='Intellij IDEA'/><title type='text'>FreeMarker integration with Intellij IDEA</title><summary type='text'>Some of you who uses FreeMarker as your favorite template engine and Intellij IDEA as your favorite IDE will understand my pain. At the moment there is no support of FreeMarker in IDEA, so developers try to find other ways while waiting for IDEA 8.0 roadmap will be finished. One of the best approaches is to use live templates - very powerful feature of the IDEA. Originally I have found basic </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/3698708814508282714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=3698708814508282714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/3698708814508282714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/3698708814508282714'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/07/freemarker-integration-with-intellij.html' title='FreeMarker integration with Intellij IDEA'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-641959888515773267</id><published>2008-07-11T11:41:00.005+03:00</published><updated>2008-07-11T12:32:06.355+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bean'/><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='Hibernate'/><title type='text'>Select implementation of Spring bean in runtime</title><summary type='text'>Some of you who uses Spring in your application as dependency injection framework or as development platform may be need change implementation of one particular dependency in runtime. Some examples of this need: integration testing with fake external subsystem, local and remote versions of services, mock implementation to speed up development. I have found very useful to have such option in my </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/641959888515773267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=641959888515773267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/641959888515773267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/641959888515773267'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/07/select-implementation-of-spring-bean-in.html' title='Select implementation of Spring bean in runtime'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8396869410733758432.post-6409963809915042999</id><published>2008-07-10T10:31:00.006+03:00</published><updated>2008-07-11T12:23:59.297+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Access SVN version and build date from maven</title><summary type='text'>Sometimes we need to show or save information about application build. This information may include sources version (from VCS that you use), build date, database versions, etc. If you build your application with Maven there is easy way to access this information.To do this check buildnumber-maven-plugin. This plugin is used to build extended build version. To access SVN version and build </summary><link rel='replies' type='application/atom+xml' href='http://javadevelopmenttips.blogspot.com/feeds/6409963809915042999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8396869410733758432&amp;postID=6409963809915042999' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/6409963809915042999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8396869410733758432/posts/default/6409963809915042999'/><link rel='alternate' type='text/html' href='http://javadevelopmenttips.blogspot.com/2008/07/access-svn-version-and-build-date-from.html' title='Access SVN version and build date from maven'/><author><name>Mikalai Alimenkou</name><uri>http://www.blogger.com/profile/05773457221744770002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_3Z1kpdfMcak/Sw-3qOJ6V1I/AAAAAAAAADs/A8Zk-S7AAcg/S220/avatar.jpg'/></author><thr:total>2</thr:total></entry></feed>
