<?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-1142858050650538817</id><updated>2011-12-09T02:48:33.669-08:00</updated><category term='logging'/><category term='hibernate'/><category term='pagnation'/><category term='cascade'/><category term='proxy'/><category term='sms'/><category term='relationship'/><category term='java'/><category term='sqlite'/><category term='singleton'/><category term='pojo'/><category term='junit'/><category term='contacts'/><category term='best practices'/><category term='hashcode'/><category term='strategy'/><category term='map'/><category term='avd'/><category term='post'/><category term='http'/><category term='command'/><category term='blazeds'/><category term='date'/><category term='thread'/><category term='state'/><category term='query'/><category term='flex'/><category term='sync'/><category term='gps'/><category term='observer'/><category term='design pattern'/><category term='composite'/><category term='android'/><category term='annotation'/><category term='iterator'/><category term='exception handling'/><category term='ms sql server'/><category term='template method'/><category term='spring'/><category term='adapter'/><category term='dao'/><category term='performance'/><category term='between'/><category term='factory'/><category term='equals'/><category term='get'/><category term='façade'/><title type='text'>Future Yard</title><subtitle type='html'>I'm talking about Mobile App, RIA App, Java Enterprise App technology that include but not limited to Flex, BlazeDS, iPhone, BlackBerry, Android, Spring, Hibernate, Design Pattern, Enterprise Architecture...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-3764177222959251240</id><published>2009-09-14T22:20:00.000-07:00</published><updated>2009-09-14T22:31:40.617-07:00</updated><title type='text'>Future Yard Announces Android Auto Reply Application -- FY Receptionist</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Dear Android Community,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;I am pleased to announce that the FY Receptionist V1.0 release is now available in Android Market.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Please visit &lt;/span&gt;&lt;a style="font-weight: bold;" href="https://sites.google.com/site/futureyard/products/fy-receptionist"&gt;https://sites.google.com/site/futureyard/products/fy-receptionist&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; to view the detail information.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;If you want to download this app, go to the market on your GPhone, choose 'tools' category, and enjoy it!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;Who have benefits from using this applicatioin?&lt;br /&gt;&lt;/b&gt; &lt;ul&gt;&lt;li&gt;&lt;span lang="EN-US"&gt;Anyone who wants to auto reply any or some missed calls.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;b style="color: rgb(255, 0, 0);"&gt;Features We Implemented&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Different auto reply mode.&lt;/li&gt;&lt;li&gt;Auto answers all cell phone calls or just answer calls from some contacts.&lt;/li&gt;&lt;li&gt;Custom answering message.&lt;/li&gt;&lt;li&gt;I18N support.&lt;/li&gt;&lt;/ul&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;Features Coming Soon...&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Better UI experience.&lt;/li&gt;&lt;li&gt;Any suggestion from you.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-3764177222959251240?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/3764177222959251240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/09/future-yard-announces-android-auto.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/3764177222959251240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/3764177222959251240'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/09/future-yard-announces-android-auto.html' title='Future Yard Announces Android Auto Reply Application -- FY Receptionist'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-6141186149068415051</id><published>2009-08-20T21:55:00.000-07:00</published><updated>2009-09-12T23:31:38.439-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='map'/><category scheme='http://www.blogger.com/atom/ns#' term='gps'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Future Yard Announces Android GPS &amp; Map Application -- FY GPS Tracker</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Dear Android Community,&lt;br /&gt;I am pleased to announce that the FY Tracker V1.0 release is now available in Android Market.&lt;br /&gt;Please visit &lt;a href="https://sites.google.com/site/futureyard/products/fy-tracker"&gt;https://sites.google.com/site/futureyard/products/fy-tracker&lt;/a&gt; to view the detail information.&lt;br /&gt;If you want to download this app, go to the market on your GPhone, choose 'tools' category, and enjoy it!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;Who have benefits from using this applicatioin?&lt;br /&gt;&lt;/b&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Those who like hiking, biking, camping, workout...&lt;/li&gt;&lt;li&gt;Those who need to be cared or inspected...&lt;/li&gt;&lt;li&gt;Those who are negligent or scrupulous.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Those who like or need team play...&lt;/li&gt;&lt;/ul&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;Features We Implemented&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I18N support.&lt;/li&gt;&lt;li&gt;Track the GPS route and send to Google Clouds.&lt;/li&gt;&lt;li&gt;Tag the start point and stop point.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Follow the route on the map with compass on your phone.&lt;/li&gt;&lt;li&gt;Integared with weather report.&lt;/li&gt;&lt;li&gt;Display the detail location information such as speed, altitude, accuracy, bearing...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Long press the information text and copy/paste it to anywhere you want, SMS, EMail, Chat for instance.&lt;/li&gt;&lt;li&gt;Different unit for the convenient.&lt;/li&gt;&lt;li&gt;Change map mode via shaking.&lt;/li&gt;&lt;li&gt;Share with the friends via SMS, EMail on real-time.&lt;/li&gt;&lt;li&gt;Speeding alarm.&lt;/li&gt;&lt;li&gt;Emergent mode managed by Google Clouds.&lt;/li&gt;&lt;li&gt;Statistics &amp;amp; Analysis with Google FY CRM Console Clouds.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Integated with Future Yard product series.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;Features Coming Soon...&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Much mode support.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Much alarm support.&lt;/li&gt;&lt;li&gt;Real-time tracking on Google Clouds.&lt;/li&gt;&lt;li&gt;Better UI experience.&lt;/li&gt;&lt;li&gt;Any suggestion from you.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-6141186149068415051?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/6141186149068415051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/08/future-yard-announces-android-tracking.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/6141186149068415051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/6141186149068415051'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/08/future-yard-announces-android-tracking.html' title='Future Yard Announces Android GPS &amp; Map Application -- FY GPS Tracker'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-6819032219210654602</id><published>2009-08-01T15:08:00.000-07:00</published><updated>2009-09-12T23:32:54.466-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sync'/><category scheme='http://www.blogger.com/atom/ns#' term='contacts'/><category scheme='http://www.blogger.com/atom/ns#' term='sms'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Future Yard Announces Android Contacts &amp; Logs Application -- FY Contacts &amp; Logs Sync</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Dear Android Community,&lt;br /&gt;I am pleased to announce that the FY Sync V1.0 release is now available in Android Market.&lt;br /&gt;Please visit &lt;a href="https://sites.google.com/site/futureyard/products/fy-sync"&gt;https://sites.google.com/site/futureyard/products/fy-sync&lt;/a&gt; to view the detail information.&lt;br /&gt;If you want to download this app, go to market on your GPhone, choose 'tools' category, and enjoy it!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;Who have benefits from using this applicatioin?&lt;br /&gt;&lt;/b&gt; &lt;ul&gt;&lt;li&gt;Anyone.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;b style="color: rgb(255, 0, 0);"&gt;Features We Implemented&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Backup contact to google clouds&lt;/li&gt;&lt;li&gt;Restore contact from google clouds&lt;/li&gt;&lt;li&gt;Backup call logs to google clouds&lt;/li&gt;&lt;li&gt;Backup call logs to google clouds&lt;/li&gt;&lt;li&gt;Backup &amp;amp; restore automatically.&lt;/li&gt;&lt;li&gt;Share the contacts with friend via sms, email...&lt;/li&gt;&lt;li&gt;Share the backup items with friend via sms, email...&lt;/li&gt;&lt;li&gt;I18N support.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add contact information in google clouds and restore to the phone.&lt;/li&gt;&lt;li&gt;Edit contact information in goole clouds and restore to the phone.&lt;/li&gt;&lt;li&gt;Delete contact information in google clouds and restore to the phone.&lt;/li&gt;&lt;li&gt;Statistic for contacts.&lt;/li&gt;&lt;li&gt;Statistic for call logs.&lt;/li&gt;&lt;li&gt;Statistic for sms logs.&lt;/li&gt;&lt;li&gt;System security is handled by google gmail account and google clouds.&lt;/li&gt;&lt;/ul&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;Features Coming Soon...&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Backup to email.&lt;/li&gt;&lt;li&gt;Bakcup bookmarks, mms, application data...&lt;/li&gt;&lt;li&gt;More restoring functionality.&lt;/li&gt;&lt;li&gt;Import &amp;amp; export.&lt;/li&gt;&lt;li&gt;More statistic chart.&lt;/li&gt;&lt;li&gt;Better UI experience.&lt;/li&gt;&lt;li&gt;Any suggestion from you.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-6819032219210654602?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/6819032219210654602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/08/future-yard-announce-android-sync.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/6819032219210654602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/6819032219210654602'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/08/future-yard-announce-android-sync.html' title='Future Yard Announces Android Contacts &amp; Logs Application -- FY Contacts &amp; Logs Sync'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-3025960030424125552</id><published>2009-05-27T16:05:00.000-07:00</published><updated>2009-05-27T16:10:33.871-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='post'/><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='get'/><title type='text'>HTTP GET and POST Thread Service on Android</title><content type='html'>HttpService.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.UnsupportedEncodingException;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.apache.http.HttpResponse;&lt;br /&gt;import org.apache.http.NameValuePair;&lt;br /&gt;import org.apache.http.client.ClientProtocolException;&lt;br /&gt;import org.apache.http.client.HttpClient;&lt;br /&gt;import org.apache.http.client.entity.UrlEncodedFormEntity;&lt;br /&gt;import org.apache.http.client.methods.HttpGet;&lt;br /&gt;import org.apache.http.client.methods.HttpPost;&lt;br /&gt;import org.apache.http.client.methods.HttpRequestBase;&lt;br /&gt;import org.apache.http.impl.client.DefaultHttpClient;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.util.Log;&lt;br /&gt;&lt;br /&gt;public class HttpService implements Runnable {&lt;br /&gt;&lt;br /&gt;    private static final String TAG = &amp;quot;HttpService&amp;quot;;&lt;br /&gt;    public static final int GET = 0;&lt;br /&gt;    public static final int POST = 1;&lt;br /&gt;    public static final String HTTP_RESPONSE = &amp;quot;HTTP_RESPONSE&amp;quot;;&lt;br /&gt;&lt;br /&gt;    private Activity activity;&lt;br /&gt;    private Intent intent;&lt;br /&gt;    private int requestCode;&lt;br /&gt;    private String url;&lt;br /&gt;    private int getOrPost = 0;&lt;br /&gt;    private List&amp;lt;NameValuePair&amp;gt; nameValuePairs;&lt;br /&gt;    private boolean handleByMe;&lt;br /&gt;    &lt;br /&gt;    /*&lt;br /&gt;     *  for example:&lt;br /&gt;        List&amp;lt;NameValuePair&amp;gt; nameValuePairs = new ArrayList&amp;lt;NameValuePair&amp;gt;(2);&lt;br /&gt;        nameValuePairs.add(new BasicNameValuePair(&amp;quot;aaa&amp;quot;, &amp;quot;bbb&amp;quot;));  &lt;br /&gt;        nameValuePairs.add(new BasicNameValuePair(&amp;quot;ccc&amp;quot;, &amp;quot;ddd&amp;quot;));    &lt;br /&gt;     */&lt;br /&gt;    public HttpService(Activity activity, Intent intent, int requestCode, String url, int getOrPost, List&amp;lt;NameValuePair&amp;gt; nameValuePairs, boolean handleByMe){&lt;br /&gt;        this.activity = activity;&lt;br /&gt;        this.intent = intent;&lt;br /&gt;        this.requestCode = requestCode;&lt;br /&gt;        this.url = url;&lt;br /&gt;        this.getOrPost = getOrPost;&lt;br /&gt;        this.nameValuePairs = nameValuePairs;&lt;br /&gt;        this.handleByMe = handleByMe;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void start(){&lt;br /&gt;        Thread thread = new Thread(this);&lt;br /&gt;        try{&lt;br /&gt;            thread.start();&lt;br /&gt;        }catch(IllegalThreadStateException itse){&lt;br /&gt;            Log.e(TAG, &amp;quot;The Thread has been started before.&amp;quot;, itse);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void run() {&lt;br /&gt;        doRequest();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void doRequest(){&lt;br /&gt;        HttpClient httpclient = new DefaultHttpClient();  &lt;br /&gt;        HttpRequestBase httpRequest = null;&lt;br /&gt;        HttpResponse httpResponse = null;&lt;br /&gt;        InputStream inputStream = null;&lt;br /&gt;        String response = &amp;quot;&amp;quot;;&lt;br /&gt;        StringBuffer buffer = new StringBuffer();&lt;br /&gt;        &lt;br /&gt;        if(POST == getOrPost){&lt;br /&gt;            httpRequest = new HttpPost(url);  &lt;br /&gt;            try {&lt;br /&gt;                ((HttpPost)httpRequest).setEntity(new UrlEncodedFormEntity(nameValuePairs));&lt;br /&gt;            } catch (UnsupportedEncodingException usee) {&lt;br /&gt;                Log.e(TAG, &amp;quot;Could not encode the nameVaulePairs.&amp;quot;, usee);&lt;br /&gt;            }  &lt;br /&gt;        }else{&lt;br /&gt;            httpRequest = new HttpGet(url);  &lt;br /&gt;        }&lt;br /&gt;        if(httpRequest != null){&lt;br /&gt;            try{&lt;br /&gt;                httpResponse = httpclient.execute(httpRequest);&lt;br /&gt;                inputStream = httpResponse.getEntity().getContent();&lt;br /&gt;                int contentLength = (int) httpResponse.getEntity().getContentLength();&lt;br /&gt;                if (contentLength &amp;lt; 0){&lt;br /&gt;                    Log.e(TAG, &amp;quot;The HTTP response is too long.&amp;quot;);&lt;br /&gt;                }&lt;br /&gt;                byte[] data = new byte[256];&lt;br /&gt;                int len = 0;&lt;br /&gt;                while (-1 != (len = inputStream.read(data)) )&lt;br /&gt;                {&lt;br /&gt;                    buffer.append(new String(data, 0, len));&lt;br /&gt;                }&lt;br /&gt;                inputStream.close();&lt;br /&gt;            }catch (ClientProtocolException cpe) { &lt;br /&gt;                Log.e(TAG, &amp;quot;Http protocol error occured.&amp;quot;, cpe);&lt;br /&gt;            }catch (IllegalStateException ise) {&lt;br /&gt;                Log.e(TAG, &amp;quot;Could not get a HTTP response from the server.&amp;quot;, ise);&lt;br /&gt;            }catch (IOException ioe) {  &lt;br /&gt;                Log.e(TAG, &amp;quot;Could not establish a HTTP connection to the server or could not get a response properly from the server.&amp;quot;, ioe);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        response = buffer.toString();&lt;br /&gt;        intent.putExtra(HTTP_RESPONSE, response);&lt;br /&gt;        &lt;br /&gt;        if(handleByMe){&lt;br /&gt;            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);&lt;br /&gt;            activity.startActivity(intent);&lt;br /&gt;        }else{&lt;br /&gt;            activity.startActivityForResult(intent, requestCode);&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;&lt;span style="font-weight:bold;"&gt;How to use it?&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;Intent intent = new Intent(this, SkeletonActivity.class);&lt;br /&gt;intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);&lt;br /&gt;HttpService httpService = new HttpService(this, intent, 0, &amp;quot;http://www.google.com&amp;quot;, 0, null, true);&lt;br /&gt;httpService.start();&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;protected void onNewIntent(Intent intent) {&lt;br /&gt;    String message = intent.getStringExtra(HttpService.HTTP_RESPONSE);&lt;br /&gt;    editor.setText(message);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-3025960030424125552?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/3025960030424125552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/05/http-get-and-post-thread-service-on.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/3025960030424125552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/3025960030424125552'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/05/http-get-and-post-thread-service-on.html' title='HTTP GET and POST Thread Service on Android'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-5785908482768857672</id><published>2009-05-26T19:33:00.000-07:00</published><updated>2009-05-26T19:38:16.990-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>GenericDAO for Android SQLite</title><content type='html'>GenericDAO.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import android.content.ContentValues;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.database.Cursor;&lt;br /&gt;import android.database.SQLException;&lt;br /&gt;import android.database.sqlite.SQLiteDatabase;&lt;br /&gt;import android.database.sqlite.SQLiteException;&lt;br /&gt;import android.database.sqlite.SQLiteOpenHelper;&lt;br /&gt;import android.util.Log;&lt;br /&gt;&lt;br /&gt;public class GenericDAO extends SQLiteOpenHelper {&lt;br /&gt;&lt;br /&gt;    private static final String TAG = &amp;quot;GenericDAO&amp;quot;;&lt;br /&gt;    private static SQLiteDatabase db;&lt;br /&gt;    private static String dName;&lt;br /&gt;    private static String tName;&lt;br /&gt;    private static String sql;&lt;br /&gt;    public static final String KEY_ID = &amp;quot;_id&amp;quot;;&lt;br /&gt;&lt;br /&gt;    private static GenericDAO instance;&lt;br /&gt;    &lt;br /&gt;    private GenericDAO(Context ctx, String dbName, String sql, String tableName, int ver){&lt;br /&gt;        super(ctx, dbName, null, ver);&lt;br /&gt;        Log.i(TAG, &amp;quot;Creating or opening database [ &amp;quot; + dbName + &amp;quot; ].&amp;quot;);&lt;br /&gt;        GenericDAO.sql = sql;&lt;br /&gt;        dName = dbName;&lt;br /&gt;        tName = tableName;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public static GenericDAO getInstance(Context ctx, String dbName, String sql, String tableName, int ver){&lt;br /&gt;        if(instance == null){&lt;br /&gt;            instance = new GenericDAO(ctx, dbName, sql, tableName, ver);&lt;br /&gt;            try{&lt;br /&gt;                Log.i(TAG, &amp;quot;Creating or opening the database [ &amp;quot; + dbName + &amp;quot; ].&amp;quot;);&lt;br /&gt;                db = instance.getWritableDatabase();&lt;br /&gt;            }catch(SQLiteException se){&lt;br /&gt;                Log.e(TAG, &amp;quot;Cound not create and/or open the database [ &amp;quot; + dbName + &amp;quot; ] that will be used for reading and writing.&amp;quot;, se);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return instance;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void close(){&lt;br /&gt;        if(instance != null){&lt;br /&gt;            Log.i(TAG, &amp;quot;Closing the database [ &amp;quot; + dName + &amp;quot; ].&amp;quot;);&lt;br /&gt;            db.close();&lt;br /&gt;            instance = null;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(SQLiteDatabase db){&lt;br /&gt;        Log.i(TAG, &amp;quot;Trying to create database table if it isn't existed [ &amp;quot; + sql + &amp;quot; ].&amp;quot;);&lt;br /&gt;        try{&lt;br /&gt;            db.execSQL(sql);&lt;br /&gt;        }catch(SQLException se){&lt;br /&gt;            Log.e(TAG, &amp;quot;Cound not create the database table according to the SQL statement [ &amp;quot; + sql + &amp;quot; ].&amp;quot;, se);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){&lt;br /&gt;       Log.i(TAG, &amp;quot;Upgrading database from version &amp;quot; + oldVersion + &amp;quot; to &amp;quot; + newVersion + &amp;quot;, which will destroy all old data&amp;quot;);&lt;br /&gt;       try{&lt;br /&gt;           db.execSQL(&amp;quot;DROP TABLE IF EXISTS &amp;quot; + tName);&lt;br /&gt;       }catch(SQLException se){&lt;br /&gt;            Log.e(TAG, &amp;quot;Cound not drop the database table [ &amp;quot; + tName + &amp;quot; ].&amp;quot;, se);&lt;br /&gt;        }&lt;br /&gt;       onCreate(db);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public long insert(String table, ContentValues values){&lt;br /&gt;        return db.insert(table, null, values);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public Cursor get(String table, String[] columns){&lt;br /&gt;        return db.query(table, columns, null, null, null, null, null);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public Cursor get(String table, String[] columns, long id){&lt;br /&gt;        Cursor cursor =db.query(true, table, columns, KEY_ID + &amp;quot;=&amp;quot; + id, null, null, null, null, null);&lt;br /&gt;        if (cursor != null) {&lt;br /&gt;            cursor.moveToFirst();&lt;br /&gt;        }&lt;br /&gt;        return cursor;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public int delete(String table) {&lt;br /&gt;        return db.delete(table, &amp;quot;1&amp;quot;, null);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public int delete(String table, long id) {&lt;br /&gt;        return db.delete(table, KEY_ID + &amp;quot;=&amp;quot; + id, null);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public int update(String table, long id, ContentValues values) {&lt;br /&gt;        return db.update(table, values, KEY_ID + &amp;quot;=&amp;quot; + id, null);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;How to use it?&lt;/span&gt;&lt;br /&gt;Notes.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;public class Notes {&lt;br /&gt;    &lt;br /&gt;    public static final String DATABASE_NAME = &amp;quot;data&amp;quot;;&lt;br /&gt;    public static final String DATABASE_TABLE = &amp;quot;notes&amp;quot;;&lt;br /&gt;    public static final int DATABASE_VERSION = 1;&lt;br /&gt;    public static final String TABLE_CREATE =&lt;br /&gt;        &amp;quot;create table notes (_id integer primary key autoincrement, &amp;quot;&lt;br /&gt;                + &amp;quot;title text not null, body text not null);&amp;quot;;&lt;br /&gt;    &lt;br /&gt;    public static final String COL_TITLE = &amp;quot;title&amp;quot;;&lt;br /&gt;    public static final String COL_BODY = &amp;quot;body&amp;quot;;&lt;br /&gt;    &lt;br /&gt;    private int id;&lt;br /&gt;    private String title;&lt;br /&gt;    private String body;&lt;br /&gt;    &lt;br /&gt;    public int getId() {&lt;br /&gt;        return id;&lt;br /&gt;    }&lt;br /&gt;    public String getTitle() {&lt;br /&gt;        return title;&lt;br /&gt;    }&lt;br /&gt;    public String getBody() {&lt;br /&gt;        return body;&lt;br /&gt;    }&lt;br /&gt;    public void setId(int id) {&lt;br /&gt;        this.id = id;&lt;br /&gt;    }&lt;br /&gt;    public void setTitle(String title) {&lt;br /&gt;        this.title = title;&lt;br /&gt;    }&lt;br /&gt;    public void setBody(String body) {&lt;br /&gt;        this.body = body;&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;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    private String testCRUD(){&lt;br /&gt;        &lt;br /&gt;        String result=&amp;quot;&amp;quot;;&lt;br /&gt;        Cursor cursor = null;&lt;br /&gt;        String[] columns = new String[] {GenericDAO.KEY_ID, Notes.COL_TITLE, Notes.COL_BODY};&lt;br /&gt;        &lt;br /&gt;        GenericDAO dao = GenericDAO.getInstance(this, Notes.DATABASE_NAME, Notes.TABLE_CREATE, Notes.DATABASE_TABLE, Notes.DATABASE_VERSION);&lt;br /&gt;&lt;br /&gt;        if(dao != null){&lt;br /&gt;            &lt;br /&gt;            ContentValues values = new ContentValues();&lt;br /&gt;            values.put(Notes.COL_TITLE, &amp;quot;aaa&amp;quot;);&lt;br /&gt;            values.put(Notes.COL_BODY, &amp;quot;bbb&amp;quot;);&lt;br /&gt;            dao.insert(Notes.DATABASE_TABLE, values);&lt;br /&gt;            &lt;br /&gt;            values = new ContentValues();&lt;br /&gt;            values.put(Notes.COL_TITLE, &amp;quot;ccc&amp;quot;);&lt;br /&gt;            values.put(Notes.COL_BODY, &amp;quot;ddd&amp;quot;);&lt;br /&gt;            dao.insert(Notes.DATABASE_TABLE, values);&lt;br /&gt;            &lt;br /&gt;            cursor = dao.get(Notes.DATABASE_TABLE, columns);&lt;br /&gt;            &lt;br /&gt;            &lt;br /&gt;            int idColumn = cursor.getColumnIndex(GenericDAO.KEY_ID); &lt;br /&gt;            int titleColumn = cursor.getColumnIndex(Notes.COL_TITLE); &lt;br /&gt;            int bodyColumn = cursor.getColumnIndex(Notes.COL_BODY); &lt;br /&gt;            &lt;br /&gt;            if(cursor != null){&lt;br /&gt;                if(cursor.moveToFirst()){&lt;br /&gt;                    &lt;br /&gt;                    int count = cursor.getCount();&lt;br /&gt;                    result = &amp;quot;there are &amp;quot; + count + &amp;quot; records.&amp;quot;;&lt;br /&gt;                    List&amp;lt;Notes&amp;gt; list = new ArrayList&amp;lt;Notes&amp;gt;();&lt;br /&gt;                    &lt;br /&gt;                    for(int i=0; i&amp;lt;count; i++){&lt;br /&gt;                        &lt;br /&gt;                        int id = cursor.getInt(idColumn); &lt;br /&gt;                        String title = cursor.getString(titleColumn); &lt;br /&gt;                        String body = cursor.getString(bodyColumn); &lt;br /&gt;                        &lt;br /&gt;                        Notes notes = new Notes();&lt;br /&gt;                        notes.setId(id);&lt;br /&gt;                        notes.setTitle(title);&lt;br /&gt;                        notes.setBody(body);&lt;br /&gt;                        &lt;br /&gt;                        list.add(notes);&lt;br /&gt;                        &lt;br /&gt;                        result += &amp;quot; &amp;quot; + i + &amp;quot;: &amp;quot; + &amp;quot;id=&amp;quot; + id + &amp;quot;, title=&amp;quot; + title + &amp;quot;, body=&amp;quot; + body + &amp;quot;;&amp;quot;;&lt;br /&gt;                        &lt;br /&gt;                        cursor.moveToNext();&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;            result += &amp;quot; now update the second record.&amp;quot;;&lt;br /&gt;            &lt;br /&gt;            values = new ContentValues();&lt;br /&gt;            values.put(Notes.COL_TITLE, &amp;quot;eee&amp;quot;);&lt;br /&gt;            values.put(Notes.COL_BODY, &amp;quot;fff&amp;quot;);&lt;br /&gt;            dao.update(Notes.DATABASE_TABLE, 2, values);&lt;br /&gt;            &lt;br /&gt;            cursor.requery();&lt;br /&gt;            cursor.close();&lt;br /&gt;&lt;br /&gt;            result += &amp;quot; now delete first record.&amp;quot;;&lt;br /&gt;            &lt;br /&gt;            dao.delete(Notes.DATABASE_TABLE, 1);&lt;br /&gt;            &lt;br /&gt;            result += &amp;quot; now delete all records.&amp;quot;;&lt;br /&gt;            &lt;br /&gt;            dao.delete(Notes.DATABASE_TABLE);&lt;br /&gt;            &lt;br /&gt;            dao.close();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-5785908482768857672?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/5785908482768857672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/05/genericdao-for-android-sqlite.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/5785908482768857672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/5785908482768857672'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/05/genericdao-for-android-sqlite.html' title='GenericDAO for Android SQLite'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-8584284077119254585</id><published>2009-05-17T16:40:00.000-07:00</published><updated>2009-05-17T16:48:48.578-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='avd'/><title type='text'>How to Fix "Failed to find an AVD compatible with target" on Android</title><content type='html'>&lt;span style="font-weight:bold;"&gt;"Failed to find an AVD compatible with target"&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;cd ANDROID_HOME/tools/&lt;br /&gt;android create avd -n android1.1 -t 1&lt;br /&gt;android create avd -n android1.5 -t 2&lt;br /&gt;android create avd -n goolgeapi -t 3&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-8584284077119254585?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/8584284077119254585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/05/how-to-fix-failed-to-find-avd.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/8584284077119254585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/8584284077119254585'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/05/how-to-fix-failed-to-find-avd.html' title='How to Fix &quot;Failed to find an AVD compatible with target&quot; on Android'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-1146623325948845757</id><published>2009-05-17T13:57:00.000-07:00</published><updated>2009-05-17T14:05:47.608-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='between'/><category scheme='http://www.blogger.com/atom/ns#' term='ms sql server'/><category scheme='http://www.blogger.com/atom/ns#' term='date'/><title type='text'>Date Between Syntax Bug from MS SQL Server 2005?</title><content type='html'>1. select TradeDate from test where TradeDate between '2009-05-13 00:00:00.000' and '2009-05-13 &lt;span style="font-weight:bold;"&gt;23:59:59.999&lt;/span&gt;'&lt;br /&gt;result: &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;2009-05-14 00:00:00.000&lt;br /&gt;2009-05-14 00:00:00.000&lt;br /&gt;2009-05-14 00:00:00.000&lt;br /&gt;2009-05-14 00:00:00.000&lt;br /&gt;2009-05-14 00:00:00.000&lt;br /&gt;(5 row(s) affected)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2. select TradeDate from test where TradeDate between '2009-05-13 00:00:00.000' and '2009-05-13 &lt;span style="font-weight:bold;"&gt;23:59:59.998&lt;/span&gt;'&lt;br /&gt;result: &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;(0 row(s) affected)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3. select TradeDate from test where TradeDate between '2009-05-13 00:00:00.000' and '2009-05-14 &lt;span style="font-weight:bold;"&gt;00:00:00.000&lt;/span&gt;'&lt;br /&gt;result: &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;2009-05-14 00:00:00.000&lt;br /&gt;2009-05-14 00:00:00.000&lt;br /&gt;2009-05-14 00:00:00.000&lt;br /&gt;2009-05-14 00:00:00.000&lt;br /&gt;2009-05-14 00:00:00.000&lt;br /&gt;(5 row(s) affected)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-1146623325948845757?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/1146623325948845757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/05/date-between-syntax-bug-from-ms-sql.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1146623325948845757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1146623325948845757'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/05/date-between-syntax-bug-from-ms-sql.html' title='Date Between Syntax Bug from MS SQL Server 2005?'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-7556341428549262289</id><published>2009-05-15T16:56:00.000-07:00</published><updated>2009-05-15T17:02:35.519-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='hashcode'/><category scheme='http://www.blogger.com/atom/ns#' term='equals'/><title type='text'>A Solution for Equals and HashCode Method of Hibernate Domain Ojbect</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Issue:&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nBJ3Bqxx7wg/Sg4CflQgCEI/AAAAAAAAAFw/qh4YdnHSH60/s1600-h/aaa.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 105px;" src="http://3.bp.blogspot.com/_nBJ3Bqxx7wg/Sg4CflQgCEI/AAAAAAAAAFw/qh4YdnHSH60/s400/aaa.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5336205350081136706" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Solution:&lt;/span&gt;&lt;br /&gt;every domain object extends the following object.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;public abstract class BaseObject {&lt;br /&gt;    &lt;br /&gt;    private String uuid = UUID.randomUUID().toString();&lt;br /&gt;&lt;br /&gt;    public String getUuid() {&lt;br /&gt;        return uuid;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setUuid(String uuid) {&lt;br /&gt;        this.uuid = uuid;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public int hashCode() {&lt;br /&gt;        final int prime = 31;&lt;br /&gt;        int result = 1;&lt;br /&gt;        result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public boolean equals(Object obj) {&lt;br /&gt;        if (this == obj)&lt;br /&gt;            return true;&lt;br /&gt;        if (obj == null)&lt;br /&gt;            return false;&lt;br /&gt;        if (getClass() != obj.getClass())&lt;br /&gt;            return false;&lt;br /&gt;        final BaseObject other = (BaseObject) obj;&lt;br /&gt;        if (uuid == null) {&lt;br /&gt;            if (other.uuid != null)&lt;br /&gt;                return false;&lt;br /&gt;        } else if (!uuid.equals(other.uuid))&lt;br /&gt;            return false;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-7556341428549262289?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/7556341428549262289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/05/solution-for-equals-and-hashcode-method.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/7556341428549262289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/7556341428549262289'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/05/solution-for-equals-and-hashcode-method.html' title='A Solution for Equals and HashCode Method of Hibernate Domain Ojbect'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nBJ3Bqxx7wg/Sg4CflQgCEI/AAAAAAAAAFw/qh4YdnHSH60/s72-c/aaa.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-3080975211490649579</id><published>2009-05-14T13:33:00.000-07:00</published><updated>2009-05-14T13:47:51.410-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='annotation'/><category scheme='http://www.blogger.com/atom/ns#' term='relationship'/><title type='text'>Sample of Hibernate Annotation on Entity Bean Associations/Relationships</title><content type='html'>&lt;span style="font-weight:bold;"&gt;1. one-one&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;@Entity&lt;br /&gt;public class Body {&lt;br /&gt;    @Id&lt;br /&gt;    public Long getId() { return id; }&lt;br /&gt;&lt;br /&gt;    @OneToOne(cascade = CascadeType.ALL)&lt;br /&gt;    @PrimaryKeyJoinColumn&lt;br /&gt;    public Heart getHeart() {&lt;br /&gt;        return heart;&lt;br /&gt;    }&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;public class Heart {&lt;br /&gt;    @Id&lt;br /&gt;    public Long getId() { ...}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;@Entity&lt;br /&gt;public class Customer implements Serializable {&lt;br /&gt;    @OneToOne(cascade = CascadeType.ALL)&lt;br /&gt;    @JoinColumn(name=&amp;quot;passport_fk&amp;quot;)&lt;br /&gt;    public Passport getPassport() {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;public class Passport implements Serializable {&lt;br /&gt;    @OneToOne(mappedBy = &amp;quot;passport&amp;quot;)&lt;br /&gt;    public Customer getOwner() {&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. many-one&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    @ManyToOne(fetch = FetchType.EAGER)&lt;br /&gt;    @org.hibernate.annotations.Cascade(value={org.hibernate.annotations.CascadeType.SAVE_UPDATE}) &lt;br /&gt;    @JoinColumn(name = &amp;quot;SecurityID&amp;quot;)&lt;br /&gt;    public SecurityMaster getSecurity()&lt;br /&gt;    {&lt;br /&gt;        return this.security;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. one-many&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = &amp;quot;transactionId&amp;quot;)&lt;br /&gt;    @OrderBy(&amp;quot;transactionTaxlotId asc&amp;quot;)&lt;br /&gt;    public Set&amp;lt;TransactionTaxlot&amp;gt; getTransactionTaxlots() {&lt;br /&gt;        return transactionTaxlots;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. many-many&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)&lt;br /&gt;    @JoinTable(name = &amp;quot;trelTrader&amp;quot;,&lt;br /&gt;        joinColumns = {&lt;br /&gt;          @JoinColumn(name=&amp;quot;traderId&amp;quot;, unique = true)           &lt;br /&gt;        },&lt;br /&gt;        inverseJoinColumns = {&lt;br /&gt;          @JoinColumn(name=&amp;quot;fundId&amp;quot;)&lt;br /&gt;        }&lt;br /&gt;    )&lt;br /&gt;    public Set&amp;lt;Fund&amp;gt; getFunds() {&lt;br /&gt;        return this.funds;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-3080975211490649579?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/3080975211490649579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/05/sample-of-hibernate-annotation-on.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/3080975211490649579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/3080975211490649579'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/05/sample-of-hibernate-annotation-on.html' title='Sample of Hibernate Annotation on Entity Bean Associations/Relationships'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-1107246971098084185</id><published>2009-05-06T16:11:00.000-07:00</published><updated>2009-05-06T16:16:21.987-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='cascade'/><title type='text'>Cascade Attribute in Hibernate</title><content type='html'>&lt;span style="font-weight:bold;"&gt;none&lt;/span&gt;&lt;br /&gt;ignore the association.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;save-update&lt;/span&gt;&lt;br /&gt;navigate the association when the transaction is committed and when an object is passed to save() or update() and save newly instantiated transient instances and persist changes to detached instances.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;delete&lt;/span&gt;&lt;br /&gt;navigate the association and delete persistent instances when an object is passed to delete().&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;all&lt;/span&gt;&lt;br /&gt;cascade both save-update and delete as well as calls to evict and lock.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;all-delete-orphan&lt;/span&gt;&lt;br /&gt;the same as cascade "all" but in addition deletes any persistent entity instance that has been removed (dereferenced) from the association (for example from a collection).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;delete-orphan&lt;/span&gt;&lt;br /&gt;delete any persistent entity instance that has been removed (dereferenced) from the association (for example from a collection).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-1107246971098084185?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/1107246971098084185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/05/cascade-attribute-in-hibernate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1107246971098084185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1107246971098084185'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/05/cascade-attribute-in-hibernate.html' title='Cascade Attribute in Hibernate'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-3137700984530849119</id><published>2009-05-05T13:39:00.000-07:00</published><updated>2009-05-05T13:49:46.021-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='query'/><title type='text'>Performance Competition Within Hibernate Query Methods</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Table or Object Struct:&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    private Integer    historyId;&lt;br /&gt;    private Integer    accountId;&lt;br /&gt;    private Date    historyDate;&lt;br /&gt;    private Double        units;&lt;br /&gt;    private Double        sharePrice;&lt;br /&gt;    private Double        amount;&lt;br /&gt;    private Integer    createId;&lt;br /&gt;    private Date    createDate;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Rows in the Table:&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;40797&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Performance Competition (time unit is ms) : &lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nBJ3Bqxx7wg/SgCkxAOGnwI/AAAAAAAAAFo/hXDEys9tosY/s1600-h/aaa.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 160px;" src="http://1.bp.blogspot.com/_nBJ3Bqxx7wg/SgCkxAOGnwI/AAAAAAAAAFo/hXDEys9tosY/s400/aaa.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5332443120586366722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;conclusion:&lt;/span&gt;&lt;br /&gt;findByNamedQuery(namedQuery) &gt; createCriteria(clazz).list() &gt; loadAll(clazz) &gt; createSQLQuery(sqlString).addEntity(clazz).list(), but basically they are in the one level.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-3137700984530849119?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/3137700984530849119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/05/performance-competition-within.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/3137700984530849119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/3137700984530849119'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/05/performance-competition-within.html' title='Performance Competition Within Hibernate Query Methods'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/SgCkxAOGnwI/AAAAAAAAAFo/hXDEys9tosY/s72-c/aaa.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-9056628769602973039</id><published>2009-04-30T16:09:00.000-07:00</published><updated>2009-04-30T16:38:16.676-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='pojo'/><title type='text'>Hibernate Object States and Actions</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nBJ3Bqxx7wg/SfowNxFQ9xI/AAAAAAAAAFg/noOFo0_xScE/s1600-h/aaa.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 262px;" src="http://4.bp.blogspot.com/_nBJ3Bqxx7wg/SfowNxFQ9xI/AAAAAAAAAFg/noOFo0_xScE/s400/aaa.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5330626122018256658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Transient&lt;/span&gt;&lt;br /&gt;an object is transient if it has just been instantiated using the new operator, and it is not associated with a Hibernate Session. It has no persistent representation in the database and no identifier value has been assigned. Transient instances will be destroyed by the garbage collector if the application doesn't hold a reference anymore. Use the Hibernate Session to make an object persistent (and let Hibernate take care of the SQL statements that need to be executed for this transition).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Persistent&lt;/span&gt;&lt;br /&gt;a persistent instance has a representation in the database and an identifier value. It might just have been saved or loaded, however, it is by definition in the scope of a Session. Hibernate will detect any changes made to an object in persistent state and synchronize the state with the database when the unit of work completes. Developers don't execute manual UPDATE statements, or DELETE statements when an object should be made transient.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Detached&lt;/span&gt;&lt;br /&gt;a detached instance is an object that has been persistent, but its Session has been closed. The reference to the object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be reattached to a new Session at a later point in time, making it (and all the modifications) persistent again. This feature enables a programming model for long running units of work that require user think-time. We call them application transactions, i.e. a unit of work from the point of view of the user.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;save&lt;/span&gt;&lt;br /&gt;stores an object into the database. That means it insert an entry if the identifier doesn't exist, else it will throw error. If the primary key already present in the table, it cannot be inserted.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;update&lt;/span&gt;&lt;br /&gt;is used for updating the object using identifier. If the identifier is missing or doesn't exist, it will throw exception.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;saveOrUpdate&lt;/span&gt;&lt;br /&gt;calls save() or update() based on the operation. If the identifier exists, it will call update method else the save method will be called.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;persist&lt;/span&gt;&lt;br /&gt;does the same like session.save(). But session.save() return Serializable object but session.persist() return void.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;lock&lt;/span&gt;&lt;br /&gt;simply reattaches the object to the session without checking or updating the database on the assumption that the database in sync with the detached object. It is the best practice to use either session.update(..) or session.saveOrUpdate(). Use session.lock() only if you are absolutely sure that the detached object is in sync with your detached object or if it does not matter because you will be overwriting all the columns that would have changed later on within the same transaction.When you reattach detached objects you need to make sure that the dependent objects are reatched as well. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;get and load&lt;/span&gt;&lt;br /&gt;Both methods create a persistent object by loading the required object from the database. But if there was not such object in the database then the method load() throws an exception whereas get() returns null.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-9056628769602973039?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/9056628769602973039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/04/hibernate-object-states-and-actions.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/9056628769602973039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/9056628769602973039'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/04/hibernate-object-states-and-actions.html' title='Hibernate Object States and Actions'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_nBJ3Bqxx7wg/SfowNxFQ9xI/AAAAAAAAAFg/noOFo0_xScE/s72-c/aaa.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-2539964610683571454</id><published>2009-04-22T16:10:00.000-07:00</published><updated>2009-04-22T16:16:19.407-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='annotation'/><title type='text'>How to Use Hibernate Annotation</title><content type='html'>1. applicationContext.xml&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    &amp;lt;bean id=&amp;quot;sessionFactory&amp;quot;&lt;br /&gt;        class=&amp;quot;org.springframework.orm.hibernate3.annotation.&lt;span style="font-weight:bold;"&gt;AnnotationSessionFactoryBean&lt;/span&gt;&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;dataSource&amp;quot; ref=&amp;quot;dataSource&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;annotatedClasses&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;list&amp;gt;&lt;br /&gt;                &amp;lt;value&amp;gt;com.aais.model.Transaction&amp;lt;/value&amp;gt;&lt;br /&gt;                &amp;lt;value&amp;gt;com.aais.model.Account&amp;lt;/value&amp;gt;&lt;br /&gt;                &amp;lt;value&amp;gt;com.aais.model.Security&amp;lt;/value&amp;gt;&lt;br /&gt;                &amp;lt;value&amp;gt;com.aais.model.TradeType&amp;lt;/value&amp;gt;&lt;br /&gt;                &amp;lt;value&amp;gt;com.aais.model.JournalEntry&amp;lt;/value&amp;gt;&lt;br /&gt;                &amp;lt;value&amp;gt;com.aais.model.SecurityType&amp;lt;/value&amp;gt;&lt;br /&gt;            &amp;lt;/list&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2. SecurityType.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;import org.hibernate.annotations.Cache;&lt;br /&gt;import org.hibernate.annotations.CacheConcurrencyStrategy;&lt;br /&gt;import org.hibernate.annotations.NamedQueries;&lt;br /&gt;import org.hibernate.annotations.NamedQuery;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * SecurityType entity.&lt;br /&gt; */&lt;br /&gt;@SuppressWarnings(&amp;quot;serial&amp;quot;)&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &amp;quot;security_type&amp;quot;)&lt;br /&gt;@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)&lt;br /&gt;@NamedQueries({&lt;br /&gt;    @NamedQuery(name = &amp;quot;SecurityType.FindAll&amp;quot;, query = &amp;quot;from SecurityType order by securityTypeId asc&amp;quot;) ,&lt;br /&gt;    @NamedQuery(name = &amp;quot;SecurityType.FindById&amp;quot;, query = &amp;quot;from SecurityType where securityTypeId=:securityTypeId&amp;quot;)&lt;br /&gt;}) &lt;br /&gt;public class SecurityType implements java.io.Serializable {&lt;br /&gt;&lt;br /&gt;    // Fields&lt;br /&gt;&lt;br /&gt;    private Integer securityTypeId;&lt;br /&gt;    private String name;&lt;br /&gt;&lt;br /&gt;    // Constructors&lt;br /&gt;&lt;br /&gt;    /** default constructor */&lt;br /&gt;    public SecurityType() {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Property accessors&lt;br /&gt;    @Id&lt;br /&gt;    @Column(name = &amp;quot;security_type_id&amp;quot;, unique = true, nullable = false)&lt;br /&gt;    public Integer getSecurityTypeId() {&lt;br /&gt;        return this.securityTypeId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setSecurityTypeId(Integer securityTypeId) {&lt;br /&gt;        this.securityTypeId = securityTypeId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Column(name = &amp;quot;name&amp;quot;, length = 128)&lt;br /&gt;    public String getName() {&lt;br /&gt;        return this.name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setName(String name) {&lt;br /&gt;        this.name = name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public int hashCode() {&lt;br /&gt;        final int prime = 31;&lt;br /&gt;        int result = 1;&lt;br /&gt;        result = prime * result&lt;br /&gt;                + ((securityTypeId == null) ? 0 : securityTypeId.hashCode());&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public boolean equals(Object obj) {&lt;br /&gt;        if (this == obj)&lt;br /&gt;            return true;&lt;br /&gt;        if (obj == null)&lt;br /&gt;            return false;&lt;br /&gt;        if (getClass() != obj.getClass())&lt;br /&gt;            return false;&lt;br /&gt;        SecurityType other = (SecurityType) obj;&lt;br /&gt;        if (securityTypeId == null) {&lt;br /&gt;            if (other.securityTypeId != null)&lt;br /&gt;                return false;&lt;br /&gt;        } else if (!securityTypeId.equals(other.securityTypeId))&lt;br /&gt;            return false;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3. Security.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.FetchType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Security entity.&lt;br /&gt; */&lt;br /&gt;@SuppressWarnings(&amp;quot;serial&amp;quot;)&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &amp;quot;security&amp;quot;)&lt;br /&gt;public class Security implements java.io.Serializable {&lt;br /&gt;&lt;br /&gt;    // Fields&lt;br /&gt;&lt;br /&gt;    private Integer securityId;&lt;br /&gt;    private SecurityType securityType;&lt;br /&gt;    private String ticker;&lt;br /&gt;&lt;br /&gt;    // Constructors&lt;br /&gt;&lt;br /&gt;    /** default constructor */&lt;br /&gt;    public Security() {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Property accessors&lt;br /&gt;    @Id &lt;br /&gt;    @Column(name = &amp;quot;security_id&amp;quot;, unique = true, nullable = false)&lt;br /&gt;    public Integer getSecurityId() {&lt;br /&gt;        return this.securityId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setSecurityId(Integer securityId) {&lt;br /&gt;        this.securityId = securityId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @ManyToOne(fetch = FetchType.EAGER)&lt;br /&gt;    @JoinColumn(name = &amp;quot;security_type_id&amp;quot;)&lt;br /&gt;    public SecurityType getSecurityType() {&lt;br /&gt;        return this.securityType;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setSecurityType(SecurityType securityType) {&lt;br /&gt;        this.securityType = securityType;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Column(name = &amp;quot;ticker&amp;quot;, length = 128)&lt;br /&gt;    public String getTicker() {&lt;br /&gt;        return this.ticker;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setTicker(String ticker) {&lt;br /&gt;        this.ticker = ticker;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public int hashCode() {&lt;br /&gt;        final int prime = 31;&lt;br /&gt;        int result = 1;&lt;br /&gt;        result = prime * result&lt;br /&gt;                + ((securityId == null) ? 0 : securityId.hashCode());&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public boolean equals(Object obj) {&lt;br /&gt;        if (this == obj)&lt;br /&gt;            return true;&lt;br /&gt;        if (obj == null)&lt;br /&gt;            return false;&lt;br /&gt;        if (getClass() != obj.getClass())&lt;br /&gt;            return false;&lt;br /&gt;        Security other = (Security) obj;&lt;br /&gt;        if (securityId == null) {&lt;br /&gt;            if (other.securityId != null)&lt;br /&gt;                return false;&lt;br /&gt;        } else if (!securityId.equals(other.securityId))&lt;br /&gt;            return false;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4. JournalEntry.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.FetchType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * JournalEntry entity.&lt;br /&gt; */&lt;br /&gt;@SuppressWarnings(&amp;quot;serial&amp;quot;)&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &amp;quot;journal_entry&amp;quot;)&lt;br /&gt;public class JournalEntry implements java.io.Serializable {&lt;br /&gt;&lt;br /&gt;    // Fields&lt;br /&gt;&lt;br /&gt;    private Integer journalEntryId;&lt;br /&gt;    private Transaction transaction;&lt;br /&gt;    private Account account;&lt;br /&gt;    private Double debit;&lt;br /&gt;    private Double credit;&lt;br /&gt;&lt;br /&gt;    // Constructors&lt;br /&gt;&lt;br /&gt;    /** default constructor */&lt;br /&gt;    public JournalEntry() {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Property accessors&lt;br /&gt;    @Id&lt;br /&gt;    @Column(name = &amp;quot;journal_entry_id&amp;quot;, unique = true, nullable = false)&lt;br /&gt;    public Integer getJournalEntryId() {&lt;br /&gt;        return this.journalEntryId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setJournalEntryId(Integer journalEntryId) {&lt;br /&gt;        this.journalEntryId = journalEntryId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @ManyToOne(fetch = FetchType.EAGER)&lt;br /&gt;    @JoinColumn(name = &amp;quot;transaction_id&amp;quot;)&lt;br /&gt;    public Transaction getTransaction() {&lt;br /&gt;        return this.transaction;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setTransaction(Transaction transaction) {&lt;br /&gt;        this.transaction = transaction;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @ManyToOne(fetch = FetchType.EAGER)&lt;br /&gt;    @JoinColumn(name = &amp;quot;account_id&amp;quot;)&lt;br /&gt;    public Account getAccount() {&lt;br /&gt;        return this.account;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setAccount(Account account) {&lt;br /&gt;        this.account = account;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Column(name = &amp;quot;debit&amp;quot;, precision = 18, scale = 4)&lt;br /&gt;    public Double getDebit() {&lt;br /&gt;        return this.debit;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setDebit(Double debit) {&lt;br /&gt;        this.debit = debit;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Column(name = &amp;quot;credit&amp;quot;, precision = 18, scale = 4)&lt;br /&gt;    public Double getCredit() {&lt;br /&gt;        return this.credit;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setCredit(Double credit) {&lt;br /&gt;        this.credit = credit;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public int hashCode() {&lt;br /&gt;        final int prime = 31;&lt;br /&gt;        int result = 1;&lt;br /&gt;        result = prime * result&lt;br /&gt;                + ((journalEntryId == null) ? 0 : journalEntryId.hashCode());&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public boolean equals(Object obj) {&lt;br /&gt;        if (this == obj)&lt;br /&gt;            return true;&lt;br /&gt;        if (obj == null)&lt;br /&gt;            return false;&lt;br /&gt;        if (getClass() != obj.getClass())&lt;br /&gt;            return false;&lt;br /&gt;        JournalEntry other = (JournalEntry) obj;&lt;br /&gt;        if (journalEntryId == null) {&lt;br /&gt;            if (other.journalEntryId != null)&lt;br /&gt;                return false;&lt;br /&gt;        } else if (!journalEntryId.equals(other.journalEntryId))&lt;br /&gt;            return false;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5. Transaction.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import java.util.HashSet;&lt;br /&gt;import java.util.Set;&lt;br /&gt;import javax.persistence.CascadeType;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.FetchType;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.OneToMany;&lt;br /&gt;import javax.persistence.OrderBy;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Transaction entity.&lt;br /&gt; */&lt;br /&gt;@SuppressWarnings(&amp;quot;serial&amp;quot;)&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &amp;quot;transaction&amp;quot;)&lt;br /&gt;public class Transaction implements java.io.Serializable {&lt;br /&gt;&lt;br /&gt;    // Fields&lt;br /&gt;&lt;br /&gt;    private Integer transactionId;&lt;br /&gt;    private Security security;&lt;br /&gt;    private TradeType tradeType;&lt;br /&gt;    private Double price;&lt;br /&gt;    private Integer quantity;&lt;br /&gt;    private Set&amp;lt;JournalEntry&amp;gt; journalEntries = new HashSet&amp;lt;JournalEntry&amp;gt;(0);&lt;br /&gt;&lt;br /&gt;    // Constructors&lt;br /&gt;&lt;br /&gt;    /** default constructor */&lt;br /&gt;    public Transaction() {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Property accessors&lt;br /&gt;    @Id&lt;br /&gt;    @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;    @Column(name = &amp;quot;transaction_id&amp;quot;, unique = true, nullable = false)&lt;br /&gt;    public Integer getTransactionId() {&lt;br /&gt;        return this.transactionId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setTransactionId(Integer transactionId) {&lt;br /&gt;        this.transactionId = transactionId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @ManyToOne(fetch = FetchType.EAGER)&lt;br /&gt;    @JoinColumn(name = &amp;quot;security_id&amp;quot;)&lt;br /&gt;    public Security getSecurity() {&lt;br /&gt;        return this.security;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setSecurity(Security security) {&lt;br /&gt;        this.security = security;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @ManyToOne(fetch = FetchType.EAGER)&lt;br /&gt;    @JoinColumn(name = &amp;quot;trade_type_id&amp;quot;)&lt;br /&gt;    public TradeType getTradeType() {&lt;br /&gt;        return this.tradeType;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setTradeType(TradeType tradeType) {&lt;br /&gt;        this.tradeType = tradeType;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Column(name = &amp;quot;price&amp;quot;, precision = 8, scale = 4)&lt;br /&gt;    public Double getPrice() {&lt;br /&gt;        return this.price;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setPrice(Double price) {&lt;br /&gt;        this.price = price;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Column(name = &amp;quot;quantity&amp;quot;)&lt;br /&gt;    public Integer getQuantity() {&lt;br /&gt;        return this.quantity;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setQuantity(Integer quantity) {&lt;br /&gt;        this.quantity = quantity;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = &amp;quot;transaction&amp;quot;)&lt;br /&gt;    @OrderBy(&amp;quot;journalEntryId asc&amp;quot;)&lt;br /&gt;    public Set&amp;lt;JournalEntry&amp;gt; getJournalEntries() {&lt;br /&gt;        return this.journalEntries;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setJournalEntries(Set&amp;lt;JournalEntry&amp;gt; journalEntries) {&lt;br /&gt;        this.journalEntries = journalEntries;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public int hashCode() {&lt;br /&gt;        final int prime = 31;&lt;br /&gt;        int result = 1;&lt;br /&gt;        result = prime * result&lt;br /&gt;                + ((transactionId == null) ? 0 : transactionId.hashCode());&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public boolean equals(Object obj) {&lt;br /&gt;        if (this == obj)&lt;br /&gt;            return true;&lt;br /&gt;        if (obj == null)&lt;br /&gt;            return false;&lt;br /&gt;        if (getClass() != obj.getClass())&lt;br /&gt;            return false;&lt;br /&gt;        Transaction other = (Transaction) obj;&lt;br /&gt;        if (transactionId == null) {&lt;br /&gt;            if (other.transactionId != null)&lt;br /&gt;                return false;&lt;br /&gt;        } else if (!transactionId.equals(other.transactionId))&lt;br /&gt;            return false;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-2539964610683571454?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/2539964610683571454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/04/how-to-use-hibernate-annotation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/2539964610683571454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/2539964610683571454'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/04/how-to-use-hibernate-annotation.html' title='How to Use Hibernate Annotation'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-5787047386201443442</id><published>2009-04-03T15:42:00.000-07:00</published><updated>2009-04-22T16:21:07.949-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='pagnation'/><category scheme='http://www.blogger.com/atom/ns#' term='dao'/><title type='text'>Generic Data Access Objects with Pagnation under Spring and Hibernate Framework</title><content type='html'>Page.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class Page&amp;lt;T&amp;gt; {&lt;br /&gt;    private List&amp;lt;T&amp;gt; rowsInPage;&lt;br /&gt;    private int pageSize;&lt;br /&gt;    private int pageNo;&lt;br /&gt;    private int totalRows;&lt;br /&gt;       &lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @param pageNo&lt;br /&gt;     * @param pageSize&lt;br /&gt;     * @param rowsInPage&lt;br /&gt;     * @param totalRows&lt;br /&gt;     */&lt;br /&gt;    public Page(int pageNo, int pageSize, List&amp;lt;T&amp;gt; rowsInPage, int totalRows) {&lt;br /&gt;        if(pageSize &amp;gt; 0){&lt;br /&gt;            this.pageNo = (pageNo &amp;gt; 0) ? pageNo : 1;&lt;br /&gt;            this.pageSize = pageSize;&lt;br /&gt;            this.rowsInPage = rowsInPage;&lt;br /&gt;            this.totalRows = totalRows;&lt;br /&gt;        }else if(pageSize == 0){&lt;br /&gt;            this.pageNo = 0;&lt;br /&gt;            this.pageSize = 0;&lt;br /&gt;            this.rowsInPage = null;&lt;br /&gt;            this.totalRows = 0;&lt;br /&gt;        }else{&lt;br /&gt;            this.pageNo = 1;&lt;br /&gt;            this.pageSize = -1;&lt;br /&gt;            this.rowsInPage = rowsInPage;&lt;br /&gt;            this.totalRows = -1;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;        &lt;br /&gt;    /**&lt;br /&gt;     *    &lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public boolean hasNext() {&lt;br /&gt;        return getPages() &amp;gt; pageNo;&lt;br /&gt;    }&lt;br /&gt;       &lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public boolean hasPrevious() {&lt;br /&gt;        return pageNo &amp;gt; 1;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public List&amp;lt;T&amp;gt; getRowsInPage() {&lt;br /&gt;        return rowsInPage;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public int getPageSize() {&lt;br /&gt;        return pageSize;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public int getPageNo() {&lt;br /&gt;        return pageNo;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public int getTotalRows() {&lt;br /&gt;        return totalRows;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public int getPages() {&lt;br /&gt;        if(totalRows &amp;gt; 0)&lt;br /&gt;            return (totalRows%pageSize == 0) ? totalRows / pageSize : totalRows / pageSize + 1;&lt;br /&gt;        else if(totalRows == 0)&lt;br /&gt;            return 0;&lt;br /&gt;        else&lt;br /&gt;            return 1;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;GenericDAO.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import java.io.Serializable;&lt;br /&gt;import org.hibernate.criterion.Order;&lt;br /&gt;import org.springframework.transaction.annotation.Propagation;&lt;br /&gt;import org.springframework.transaction.annotation.Transactional;&lt;br /&gt;&lt;br /&gt;import com.aais.core.utils.Page;&lt;br /&gt;&lt;br /&gt;@Transactional(rollbackFor=Exception.class)&lt;br /&gt;public interface GenericDAO&amp;lt;T, ID extends Serializable&amp;gt; {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @param id&lt;br /&gt;     * @param lock&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    @Transactional(readOnly=true)&lt;br /&gt;    public T findById(ID id, boolean lock);&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @param pageNo&lt;br /&gt;     * @param pageSize&lt;br /&gt;     * @param order&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    @Transactional(readOnly=true)&lt;br /&gt;    public Page&amp;lt;T&amp;gt; findAll(int pageNo, int pageSize, Order order);&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @param pageNo&lt;br /&gt;     * @param pageSize&lt;br /&gt;     * @param exampleInstance&lt;br /&gt;     * @param order&lt;br /&gt;     * @param excludeProperty&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    @Transactional(readOnly=true)&lt;br /&gt;    public Page&amp;lt;T&amp;gt; findByExample(int pageNo, int pageSize, T exampleInstance, Order order, String[] excludeProperty);&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @param pageNo&lt;br /&gt;     * @param pageSize&lt;br /&gt;     * @param queryName&lt;br /&gt;     * @param paramNames&lt;br /&gt;     * @param values&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    @Transactional(readOnly=true)&lt;br /&gt;    public Page&amp;lt;T&amp;gt; findByHQL(int pageNo, int pageSize, String queryName, String[] paramNames, Object[] values);&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @param entity&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    @Transactional(propagation=Propagation.REQUIRED)&lt;br /&gt;    public T saveOrUpdate(T entity);&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @param entity&lt;br /&gt;     */&lt;br /&gt;    @Transactional(propagation=Propagation.REQUIRED)&lt;br /&gt;    public void delete(T entity);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;GenericDAOHibernateImpl.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import java.io.Serializable;&lt;br /&gt;import java.lang.reflect.ParameterizedType;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.logging.Log;&lt;br /&gt;import org.apache.commons.logging.LogFactory;&lt;br /&gt;import org.hibernate.Criteria;&lt;br /&gt;import org.hibernate.HibernateException;&lt;br /&gt;import org.hibernate.Query;&lt;br /&gt;import org.hibernate.LockMode;&lt;br /&gt;import org.hibernate.Session;&lt;br /&gt;import org.hibernate.criterion.Criterion;&lt;br /&gt;import org.hibernate.criterion.Example;&lt;br /&gt;import org.hibernate.criterion.Order;&lt;br /&gt;import org.hibernate.criterion.Projections;&lt;br /&gt;import org.springframework.dao.DataIntegrityViolationException;&lt;br /&gt;import org.springframework.orm.hibernate3.HibernateCallback;&lt;br /&gt;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;&lt;br /&gt;&lt;br /&gt;import com.aais.core.dao.GenericDAO;&lt;br /&gt;import com.aais.core.utils.Page;&lt;br /&gt;&lt;br /&gt;public abstract class GenericDAOHibernateImpl&amp;lt;T, ID extends Serializable&amp;gt; extends HibernateDaoSupport implements GenericDAO&amp;lt;T, ID&amp;gt; {&lt;br /&gt;&lt;br /&gt;    private Class&amp;lt;T&amp;gt; persistentClass;&lt;br /&gt;    private final static Log logger = LogFactory.getLog(GenericDAOHibernateImpl.class);&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     */&lt;br /&gt;    @SuppressWarnings(&amp;quot;unchecked&amp;quot;)&lt;br /&gt;    public GenericDAOHibernateImpl() {&lt;br /&gt;        this.persistentClass = (Class&amp;lt;T&amp;gt;) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public Class&amp;lt;T&amp;gt; getPersistentClass() {&lt;br /&gt;        return persistentClass;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     *  (pageNo &amp;gt; 0 &amp;amp;&amp;amp; pageSize &amp;gt; 0) paginate&lt;br /&gt;     *  (pageNo &amp;lt; 0 &amp;amp;&amp;amp; pageSize &amp;lt; 0) don't paginate&lt;br /&gt;     */&lt;br /&gt;    public Page&amp;lt;T&amp;gt; findAll(int pageNo, int pageSize, Order order) {&lt;br /&gt;        return findByCriteria(pageNo, pageSize, order, (Criterion[])null);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     *  (pageNo &amp;gt; 0 &amp;amp;&amp;amp; pageSize &amp;gt; 0) paginate&lt;br /&gt;     *  (pageNo &amp;lt; 0 &amp;amp;&amp;amp; pageSize &amp;lt; 0) don't paginate&lt;br /&gt;     */&lt;br /&gt;    @SuppressWarnings(&amp;quot;unchecked&amp;quot;)&lt;br /&gt;    protected Page&amp;lt;T&amp;gt; findByCriteria(int pageNo, int pageSize, Order order, Criterion...criterion) {&lt;br /&gt;        Criteria crit = getCriteria();&lt;br /&gt;        if(criterion != null){&lt;br /&gt;            for (Criterion c : criterion) {&lt;br /&gt;                crit.add(c);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        if(order != null)&lt;br /&gt;            crit.addOrder(order);&lt;br /&gt;        int rowCount = 0;  &lt;br /&gt;        if(pageSize &amp;gt; 0){&lt;br /&gt;            rowCount = (Integer) ((Criteria) crit.setProjection(Projections.rowCount())).uniqueResult();  &lt;br /&gt;            crit.setProjection(null);  &lt;br /&gt;            if(pageNo &amp;lt; 1)&lt;br /&gt;                pageNo = 1;&lt;br /&gt;            ((Criteria) crit).setFirstResult((pageNo - 1) * pageSize);  &lt;br /&gt;            ((Criteria) crit).setMaxResults(pageSize);  &lt;br /&gt;            if(pageSize &amp;gt; rowCount)&lt;br /&gt;                pageSize = rowCount;&lt;br /&gt;        }&lt;br /&gt;         crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);&lt;br /&gt;        List&amp;lt;T&amp;gt; list = crit.list();&lt;br /&gt;        return new Page&amp;lt;T&amp;gt;(pageNo, pageSize, list, rowCount);          &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    protected Criteria getCriteria(){&lt;br /&gt;        Criteria crit = this.getSession().createCriteria(getPersistentClass());&lt;br /&gt;        return crit;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     *  (pageNo &amp;gt; 0 &amp;amp;&amp;amp; pageSize &amp;gt; 0) paginate&lt;br /&gt;     *  (pageNo &amp;lt; 0 &amp;amp;&amp;amp; pageSize &amp;lt; 0) don't paginate&lt;br /&gt;     */&lt;br /&gt;    @SuppressWarnings(&amp;quot;unchecked&amp;quot;)&lt;br /&gt;    protected Page&amp;lt;T&amp;gt; findByCriteria(int pageNo, int pageSize, Criteria crit, Order order){&lt;br /&gt;        if(order != null)&lt;br /&gt;            crit.addOrder(order);&lt;br /&gt;        int rowCount = 0;  &lt;br /&gt;        if(pageSize &amp;gt; 0){&lt;br /&gt;            rowCount = (Integer) ((Criteria) crit.setProjection(Projections.rowCount())).uniqueResult();  &lt;br /&gt;            crit.setProjection(null);  &lt;br /&gt;            if(pageNo &amp;lt; 1)&lt;br /&gt;                pageNo = 1;&lt;br /&gt;            ((Criteria) crit).setFirstResult((pageNo - 1) * pageSize);  &lt;br /&gt;            ((Criteria) crit).setMaxResults(pageSize);  &lt;br /&gt;            if(pageSize &amp;gt; rowCount)&lt;br /&gt;                pageSize = rowCount;&lt;br /&gt;        }&lt;br /&gt;         crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);&lt;br /&gt;        List&amp;lt;T&amp;gt; list = crit.list();&lt;br /&gt;        return new Page&amp;lt;T&amp;gt;(pageNo, pageSize, list, rowCount);          &lt;br /&gt;     }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     *  (pageNo &amp;gt; 0 &amp;amp;&amp;amp; pageSize &amp;gt; 0) paginate&lt;br /&gt;     *  (pageNo &amp;lt; 0 &amp;amp;&amp;amp; pageSize &amp;lt; 0) don't paginate&lt;br /&gt;     */&lt;br /&gt;    @SuppressWarnings(&amp;quot;unchecked&amp;quot;)&lt;br /&gt;    public Page&amp;lt;T&amp;gt; findByExample(int pageNo, int pageSize, T exampleInstance, Order order, String[] excludeProperty) {&lt;br /&gt;        Criteria crit = getCriteria();&lt;br /&gt;        Example example =  Example.create(exampleInstance).enableLike();&lt;br /&gt;        if(excludeProperty != null){&lt;br /&gt;            for (String exclude : excludeProperty) {&lt;br /&gt;                example.excludeProperty(exclude);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        crit.add(example);&lt;br /&gt;        if(order != null)&lt;br /&gt;            crit.addOrder(order);&lt;br /&gt;        int rowCount = 0;  &lt;br /&gt;        if(pageSize &amp;gt; 0){&lt;br /&gt;            rowCount = (Integer) ((Criteria) crit.setProjection(Projections.rowCount())).uniqueResult();  &lt;br /&gt;            crit.setProjection(null);  &lt;br /&gt;            if(pageNo &amp;lt; 1)&lt;br /&gt;                pageNo = 1;&lt;br /&gt;            ((Criteria) crit).setFirstResult((pageNo - 1) * pageSize);  &lt;br /&gt;            ((Criteria) crit).setMaxResults(pageSize);  &lt;br /&gt;            if(pageSize &amp;gt; rowCount)&lt;br /&gt;                pageSize = rowCount;&lt;br /&gt;        }&lt;br /&gt;        crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);&lt;br /&gt;        List&amp;lt;T&amp;gt; list = crit.list();&lt;br /&gt;        return new Page&amp;lt;T&amp;gt;(pageNo, pageSize, list, rowCount);          &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     */&lt;br /&gt;    public T findById(ID id, boolean lock) {&lt;br /&gt;        T entity = null;&lt;br /&gt;        if (lock)&lt;br /&gt;            entity = (T) getHibernateTemplate().get(getPersistentClass(), id, LockMode.UPGRADE);&lt;br /&gt;        else&lt;br /&gt;            entity = (T) getHibernateTemplate().get(getPersistentClass(), id);&lt;br /&gt;        if(entity == null){&lt;br /&gt;            logger.warn(&amp;quot;Could not find out &amp;quot; + getPersistentClass().getName() + &amp;quot; instance with id=&amp;quot; + id);&lt;br /&gt;        }else{&lt;br /&gt;            if(logger.isDebugEnabled())&lt;br /&gt;                logger.debug(&amp;quot;Getting &amp;quot;+getPersistentClass().getName()+&amp;quot; instance with id: &amp;quot; + id);&lt;br /&gt;        }&lt;br /&gt;        return entity;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @param queryName&lt;br /&gt;     * @param paramNames&lt;br /&gt;     * @param values&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    private Query createQuery(String queryName, String[] paramNames, Object[] values) {&lt;br /&gt;        Query query = getSession().getNamedQuery(queryName);&lt;br /&gt;        query.setCacheable(true);&lt;br /&gt;        if ((paramNames != null) &amp;amp;&amp;amp; (values != null)) {&lt;br /&gt;            for (int i = 0; i &amp;lt; paramNames.length; i++) {&lt;br /&gt;                query.setParameter(paramNames[i], values[i]);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return query;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     *  (pageNo &amp;gt; 0 &amp;amp;&amp;amp; pageSize &amp;gt; 0) paginate&lt;br /&gt;     *  (pageNo &amp;lt; 0 &amp;amp;&amp;amp; pageSize &amp;lt; 0) don't paginate&lt;br /&gt;     *  don't use for full table paginate, that would be low efficency&lt;br /&gt;     */&lt;br /&gt;    @SuppressWarnings(&amp;quot;unchecked&amp;quot;)&lt;br /&gt;    public Page&amp;lt;T&amp;gt; findByHQL(int pageNo, int pageSize, String queryName, String[] paramNames, Object[] values){&lt;br /&gt;        long rowCount = 0;  &lt;br /&gt;        Query query = createQuery(queryName, paramNames, values);&lt;br /&gt;        if(pageSize &amp;gt; 0){&lt;br /&gt;            rowCount = ((Long)getRowCountByHQL(appendRowCountHQL(queryName), paramNames, values)).longValue();  &lt;br /&gt;            if(pageNo &amp;lt; 1)&lt;br /&gt;                pageNo = 1;&lt;br /&gt;            if(pageSize &amp;gt; rowCount)&lt;br /&gt;                pageSize = (int)rowCount;&lt;br /&gt;            query.setFirstResult((pageNo - 1) * pageSize);&lt;br /&gt;            query.setMaxResults(pageSize);&lt;br /&gt;        }&lt;br /&gt;        List&amp;lt;T&amp;gt; list = query.list();&lt;br /&gt;        return new Page&amp;lt;T&amp;gt;(pageNo, pageSize, list, (int)rowCount);          &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @param queryName&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    private String appendRowCountHQL(String queryName){&lt;br /&gt;        return queryName + &amp;quot;.Count&amp;quot;;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     * @param queryName&lt;br /&gt;     * @param paramNames&lt;br /&gt;     * @param values&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    @SuppressWarnings(&amp;quot;unchecked&amp;quot;)&lt;br /&gt;    private Object getRowCountByHQL(final String queryName, final String[] paramNames, final Object[] values) {&lt;br /&gt;        return ((Object) getHibernateTemplate().execute(new HibernateCallback() {&lt;br /&gt;            public Object doInHibernate(Session session) throws HibernateException {&lt;br /&gt;                Query query = createQuery(queryName, paramNames, values);&lt;br /&gt;                if (paramNames != null &amp;amp;&amp;amp; values != null &amp;amp;&amp;amp; paramNames.length == values.length) {&lt;br /&gt;                    for (int i = 0, max = paramNames.length; i &amp;lt; max; i++) {&lt;br /&gt;                        query.setParameter(paramNames[i], values[i]);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                return query.uniqueResult();&lt;br /&gt;            }&lt;br /&gt;        }));&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     */&lt;br /&gt;    public T saveOrUpdate(T entity) throws DataIntegrityViolationException{&lt;br /&gt;        getHibernateTemplate().saveOrUpdate(entity);&lt;br /&gt;        return entity;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * &lt;br /&gt;     */&lt;br /&gt;    public void delete(T entity) {&lt;br /&gt;        getHibernateTemplate().delete(entity);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-5787047386201443442?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/5787047386201443442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/04/generic-data-access-objects-with.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/5787047386201443442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/5787047386201443442'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/04/generic-data-access-objects-with.html' title='Generic Data Access Objects with Pagnation under Spring and Hibernate Framework'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-4080291590147048487</id><published>2009-04-02T15:11:00.000-07:00</published><updated>2009-04-03T10:49:08.835-07: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='junit'/><title type='text'>Unit Testing Sample with Spring and JUnit Annotations</title><content type='html'>&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package test.com.one.dao.impl;&lt;br /&gt;&lt;br /&gt;import java.util.Calendar;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import junit.framework.Assert;&lt;br /&gt;&lt;br /&gt;import org.junit.After;&lt;br /&gt;import org.junit.Before;&lt;br /&gt;import org.junit.Ignore;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;import org.junit.runner.RunWith;&lt;br /&gt;import org.springframework.beans.factory.annotation.Autowired;&lt;br /&gt;import org.springframework.test.context.ContextConfiguration;&lt;br /&gt;import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;&lt;br /&gt;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;&lt;br /&gt;&lt;br /&gt;import com.one.dao.CustomerDAO;&lt;br /&gt;import com.one.model.Customer;&lt;br /&gt;&lt;br /&gt;@ContextConfiguration(locations={&amp;quot;/applicationContext.xml&amp;quot;})&lt;br /&gt;@RunWith(SpringJUnit4ClassRunner.class)&lt;br /&gt;public class CustomerDAOHibernateImplTests extends AbstractTransactionalJUnit4SpringContextTests{&lt;br /&gt;&lt;br /&gt;    @Autowired&lt;br /&gt;    private CustomerDAO customerDAO;&lt;br /&gt;    &lt;br /&gt;    @Before&lt;br /&gt;    public void setup(){&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    @After&lt;br /&gt;    public void clean(){&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    @Test&lt;br /&gt;    public void testCRUD(){&lt;br /&gt;        Customer customer = new Customer();&lt;br /&gt;        customer.setCustomerFirstName(&amp;quot;firstName&amp;quot;);&lt;br /&gt;        customer.setCustomerLastName(&amp;quot;lastName&amp;quot;);&lt;br /&gt;        customer.setEmailAddr(&amp;quot;email&amp;quot;);&lt;br /&gt;        customer.setCreatedOn(new Date());&lt;br /&gt;        customer.setUpdatedOn(new Date());&lt;br /&gt;        customerDAO.saveOrUpdateCustomer(customer);&lt;br /&gt;        Assert.assertNotNull(customer.getCustomerId());&lt;br /&gt;        Assert.assertTrue(customer.getCustomerId().intValue() &amp;gt; 0);&lt;br /&gt;        customer = (Customer) customerDAO.getCustomerByCustomerId(customer.getCustomerId());&lt;br /&gt;        Assert.assertNotNull(customer);&lt;br /&gt;        Assert.assertEquals(customer.getCustomerFirstName(), &amp;quot;firstName&amp;quot;);&lt;br /&gt;        Assert.assertEquals(customer.getCustomerLastName(), &amp;quot;lastName&amp;quot;);&lt;br /&gt;        Assert.assertEquals(customer.getEmailAddr(), &amp;quot;email&amp;quot;);&lt;br /&gt;        customerDAO.deleteCustomer(customer);&lt;br /&gt;        customer = (Customer) customerDAO.getCustomerByCustomerId(customer.getCustomerId());&lt;br /&gt;        Assert.assertNull(customer);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testGetCustomersByDateRange(){&lt;br /&gt;        Customer customer = new Customer();&lt;br /&gt;        customer.setCustomerFirstName(&amp;quot;firstName&amp;quot;);&lt;br /&gt;        customer.setCustomerLastName(&amp;quot;lastName&amp;quot;);&lt;br /&gt;        customer.setEmailAddr(&amp;quot;email&amp;quot;);&lt;br /&gt;        customer.setCreatedOn(new Date());&lt;br /&gt;        customer.setUpdatedOn(new Date());&lt;br /&gt;        customerDAO.saveOrUpdateCustomer(customer);&lt;br /&gt;        Assert.assertNotNull(customer.getCustomerId());&lt;br /&gt;        Assert.assertTrue(customer.getCustomerId().intValue() &amp;gt; 0);&lt;br /&gt;        Calendar c = Calendar.getInstance();&lt;br /&gt;        c.add(Calendar.DAY_OF_YEAR, -1);&lt;br /&gt;        Date from = c.getTime();&lt;br /&gt;        c.add(Calendar.DAY_OF_YEAR, +2);&lt;br /&gt;        Date to = c.getTime();&lt;br /&gt;        List list =  customerDAO.getCustomersByDateRange(from, to);&lt;br /&gt;        Assert.assertNotNull(list);&lt;br /&gt;        Assert.assertTrue(list.size() &amp;gt; 0);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Ignore&lt;br /&gt;    public void testGetCustomerByFirstnameAndLastnameAndEmail(){&lt;br /&gt;        Customer customer = new Customer();&lt;br /&gt;        customer.setCustomerFirstName(&amp;quot;firstName&amp;quot;);&lt;br /&gt;        customer.setCustomerLastName(&amp;quot;lastName&amp;quot;);&lt;br /&gt;        customer.setEmailAddr(&amp;quot;email&amp;quot;);&lt;br /&gt;        customer.setCreatedOn(new Date());&lt;br /&gt;        customer.setUpdatedOn(new Date());&lt;br /&gt;        customerDAO.saveOrUpdateCustomer(customer);&lt;br /&gt;        Assert.assertNotNull(customer.getCustomerId());&lt;br /&gt;        Assert.assertTrue(customer.getCustomerId().intValue() &amp;gt; 0);&lt;br /&gt;        customer = (Customer) customerDAO.getCustomerByFirstnameAndLastnameAndEmail(&amp;quot;firstName&amp;quot;, &amp;quot;lastName&amp;quot;, &amp;quot;email&amp;quot;);&lt;br /&gt;        Assert.assertNotNull(customer);&lt;br /&gt;        Assert.assertEquals(customer.getCustomerFirstName(), &amp;quot;firstName&amp;quot;);&lt;br /&gt;        Assert.assertEquals(customer.getCustomerLastName(), &amp;quot;lastName&amp;quot;);&lt;br /&gt;        Assert.assertEquals(customer.getEmailAddr(), &amp;quot;email&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-4080291590147048487?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/4080291590147048487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/04/unit-testing-sample-with-spring-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/4080291590147048487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/4080291590147048487'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/04/unit-testing-sample-with-spring-and.html' title='Unit Testing Sample with Spring and JUnit Annotations'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-2047591735783538571</id><published>2009-03-31T10:53:00.000-07:00</published><updated>2009-03-31T11:09:16.203-07:00</updated><title type='text'>Using Spring BlazeDS Integration 1.0.0.M1</title><content type='html'>1. Download &lt;a href="http://www.springsource.org/download"&gt;Spring&lt;/a&gt; and &lt;a href="http://opensource.adobe.com/wiki/display/blazeds/Downloads"&gt;BlazeDS&lt;/a&gt;.&lt;br /&gt;2. Create a java project, remember to push blazeds configuration files to the properly folder.&lt;br /&gt;3. Add this part to your web.xml:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    &amp;lt;!-- The front controller of this Spring Web application, responsible for handling all application requests --&amp;gt;&lt;br /&gt;    &amp;lt;servlet&amp;gt;&lt;br /&gt;        &amp;lt;servlet-name&amp;gt;Spring MVC Dispatcher Servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;        &amp;lt;servlet-class&amp;gt;org.springframework.web.servlet.DispatcherServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;        &amp;lt;init-param&amp;gt;&lt;br /&gt;            &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;            &amp;lt;param-value&amp;gt;/WEB-INF/applicationContext.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;        &amp;lt;/init-param&amp;gt;&lt;br /&gt;        &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;    &amp;lt;/servlet&amp;gt;&lt;br /&gt;   &lt;br /&gt;    &amp;lt;!-- Map all /messagbroker requests to the DispatcherServlet for handling --&amp;gt;&lt;br /&gt;    &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;        &amp;lt;servlet-name&amp;gt;Spring MVC Dispatcher Servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;        &amp;lt;url-pattern&amp;gt;/messagebroker/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;    &amp;lt;/servlet-mapping&amp;gt;    &lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;4. Write your applicationContext.xml like this:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;br /&gt;       xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;       xmlns:aop=&amp;quot;http://www.springframework.org/schema/aop&amp;quot;&lt;br /&gt;       xmlns:tx=&amp;quot;http://www.springframework.org/schema/tx&amp;quot;&lt;br /&gt;       xmlns:flex=&amp;quot;http://www.springframework.org/schema/flex&amp;quot;&lt;br /&gt;       xsi:schemaLocation=&amp;quot;&lt;br /&gt;           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd&lt;br /&gt;           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd&lt;br /&gt;           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd&lt;br /&gt;           http://www.springframework.org/schema/flex http://www.springframework.org/schema/flex/spring-flex-1.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- Bootstraps and exposes the BlazeDS MessageBroker --&amp;gt;&lt;br /&gt;    &amp;lt;bean id=&amp;quot;_messageBroker&amp;quot; class=&amp;quot;org.springframework.flex.messaging.MessageBrokerFactoryBean&amp;quot; /&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;!-- Maps request paths at /* to the BlazeDS MessageBroker --&amp;gt;&lt;br /&gt;    &amp;lt;bean class=&amp;quot;org.springframework.web.servlet.handler.SimpleUrlHandlerMapping&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;mappings&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;value&amp;gt;&lt;br /&gt;                /*=_messageBroker&lt;br /&gt;            &amp;lt;/value&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;/bean&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;!-- Dispatches requests mapped to a MessageBroker --&amp;gt;&lt;br /&gt;    &amp;lt;bean class=&amp;quot;org.springframework.flex.messaging.servlet.MessageBrokerHandlerAdapter&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;bean id=&amp;quot;testService&amp;quot;&lt;br /&gt;        class=&amp;quot;com.one.service.impl.TestServiceImpl&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;flex:remote-service /&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;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;5. Enjoy it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-2047591735783538571?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/2047591735783538571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/03/using-spring-blazeds-integration-100m1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/2047591735783538571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/2047591735783538571'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/03/using-spring-blazeds-integration-100m1.html' title='Using Spring BlazeDS Integration 1.0.0.M1'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-2838151990574713875</id><published>2009-03-22T14:56:00.000-07:00</published><updated>2009-03-27T10:44:08.766-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='exception handling'/><category scheme='http://www.blogger.com/atom/ns#' term='logging'/><title type='text'>Best Practices for Exception Handling and Logging</title><content type='html'>&lt;span style="font-weight:bold;"&gt;The Nature of Exceptions&lt;/span&gt;&lt;br /&gt;Broadly speaking, there are three different situations that cause exceptions to be thrown:&lt;br /&gt;Exceptions due to programming errors: In this category, exceptions are generated due to programming errors (e.g., NullPointerException and IllegalArgumentException). The client code usually cannot do anything about programming errors.&lt;br /&gt;Exceptions due to client code errors: Client code attempts something not allowed by the API, and thereby violates its contract. The client can take some alternative course of action, if there is useful information provided in the exception. For example: an exception is thrown while parsing an XML document that is not well-formed. The exception contains useful information about the location in the XML document that causes the problem. The client can use this information to take recovery steps.&lt;br /&gt;Exceptions due to resource failures: Exceptions that get generated when resources fail. For example: the system runs out of memory or a network connection fails. The client's response to resource failures is context-driven. The client can retry the operation after some time or just log the resource failure and bring the application to a halt.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Best Practices for Exception Handling&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;1. When deciding on checked exceptions vs. unchecked exceptions, ask yourself, "What action can the client code take when the exception occurs?"&lt;/span&gt;&lt;br /&gt;If the client can take some alternate action to recover from the exception, make it a checked exception. If the client cannot do anything useful, then make the exception unchecked. By useful, I mean taking steps to recover from the exception and not just logging the exception.&lt;br /&gt;Moreover, prefer unchecked exceptions for all programming errors: unchecked exceptions have the benefit of not forcing the client API to explicitly deal with them. They propagate to where you want to catch them, or they go all the way out and get reported. The Java API has many unchecked exceptions, such as NullPointerException, IllegalArgumentException, and IllegalStateException. I prefer working with standard exceptions provided in Java rather than creating my own. They make my code easy to understand and avoid increasing the memory footprint of code.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;2. Preserve encapsulation.&lt;/span&gt;&lt;br /&gt;Never let implementation-specific checked exceptions escalate to the higher layers. For example, do not propagate SQLException from data access code to the business objects layer. Business objects layer do not need to know about SQLException. You have two options:&lt;br /&gt;1) Convert SQLException into another checked exception, if the client code is expected to recuperate from the exception.&lt;br /&gt;2) Convert SQLException into an unchecked exception, if the client code cannot do anything about it.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;3. Try not to create new custom exceptions if they do not have useful information for client code.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;4. Do not use your base exception class for "unkown" exception cases.&lt;/span&gt;&lt;br /&gt;actually a follow-up from the first advice above. If you model your own exception hierarchy, you will typically have an exception base class (eg. MyAPIException) and several specific ones that inherit from that one (eg. MyAPIPathNotFoundException). Now it is tempting to throw the base exception class whenever you don't really know what else to throw, because the error case is not clear or very seldom. It's probably a Fault and thus you would start mixing it with your Contingency exception class hierarchy, which is obviously a bad thing.&lt;br /&gt;One of the advantages of an exception base class is that the client has the choice to catch the base class if he does not want to handle the specific cases (although that's probably not the most robust code). But if that exception is also thrown in faulty situations, the client can no longer make a distinction between one-of-those-contingency-cases and all-those-unexcpected-fault-cases. And it obviously brakes your explicit exception design: there are those specific error cases you state and let the client know about, but then there is this generic exception thrown where the client cannot know what it means and is not able to handle it as a consequence.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;5. When wrapping or logging exceptions, add your specific data to the message. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;6. Don't throw exceptions in methods that are likely to be used for the exception handling itself.&lt;/span&gt;&lt;br /&gt;This follows straight from the two previous advices: if you throw or log exceptions, you are typically in exception handling code, because you wrap a lower-level exception. If you add dynamic data to your exceptions, you might access methods from the underlying API. But if those methods throw exceptions, your code becomes ugly.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;7. Document exceptions.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Best Practices for Using Exceptions&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;1. Always clean up after yourself&lt;/span&gt;&lt;br /&gt;If you are using resources like database connections or network connections, make sure you clean them up. If the API you are invoking uses only unchecked exceptions, you should still clean up resources after use, with try - finally blocks.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;2. Never use exceptions for flow control&lt;/span&gt;&lt;br /&gt;Generating stack traces is expensive and the value of a stack trace is in debugging. In a flow-control situation, the stack trace would be ignored, since the client just wants to know how to proceed.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;3. Do not suppress or ignore exceptions&lt;/span&gt;&lt;br /&gt;When a method from an API throws a checked exception, it is trying to tell you that you should take some counter action. If the checked exception does not make sense to you, do not hesitate to convert it into an unchecked exception and throw it again, but do not ignore it by catching it with {} and then continue as if nothing had happened.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;4. Do not catch top-level exceptions&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;5. Log exceptions just once&lt;/span&gt;&lt;br /&gt;Logging the same exception stack trace more than once can confuse the programmer examining the stack trace about the original source of exception. So just log it once.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Logging&lt;/span&gt;&lt;br /&gt;When your code encounters an exception, it must either handle it, let it bubble up, wrap it, or log it. If your code can programmatically handle an exception (e.g., retry in the case of a network failure), then it should. If it can't, it should generally either let it bubble up (for unchecked exceptions) or wrap it (for checked exceptions). However, it is ultimately going to be someone's responsibility to log the fact that this exception occurred if nobody in the calling stack was able to handle it programmatically. This code should typically live as high in the execution stack as it can. Some examples are the onMessage() method of an MDB, and the main() method of a class. Once you catch the exception, you should log it appropriately.&lt;br /&gt;The JDK has a java.util.logging package built in, although the Log4j project from Apache continues to be a commonly-used alternative. Apache also offers the Commons Logging project, which acts as a thin layer that allows you to swap out different logging implementations underneath in a pluggable fashion. All of these logging frameworks that I've mentioned have basically equivalent levels:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;1) FATAL:&lt;/span&gt; Should be used in extreme cases, where immediate attention is needed. This level can be useful to trigger a support engineer's pager.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;2) ERROR:&lt;/span&gt; Indicates a bug, or a general error condition, but not necessarily one that brings the system to a halt. This level can be useful to trigger email to an alerts list, where it can be filed as a bug by a support engineer.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;3) WARN:&lt;/span&gt; Not necessarily a bug, but something someone will probably want to know about. If someone is reading a log file, they will typically want to see any warnings that arise.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;4) INFO:&lt;/span&gt; Used for basic, high-level diagnostic information. Most often good to stick immediately before and after relatively long-running sections of code to answer the question "What is the app doing?" Messages at this level should avoid being very chatty.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;5) DEBUG:&lt;/span&gt; Used for low-level debugging assistance.&lt;br /&gt;If you are using commons-logging or Log4j, watch out for a common gotcha. The error, warn, info, and debug methods are overloaded with one version that takes only a message parameter, and one that also takes a Throwable as the second parameter. Make sure that if you are trying to log the fact that an exception was thrown, you pass both a message and the exception. If you call the version that accepts a single parameter, and pass it the exception, it hides the stack trace of the exception.&lt;br /&gt;When calling log.debug(), it's good practice to always surround the call with a check for log.isDebugEnabled(). This is purely for optimization. It's simply a good habit to get into, and once you do it for a few days, it will just become automatic.&lt;br /&gt;Do not use System.out or System.err. You should always use a logger. Loggers are extremely configurable and flexible, and each appender can decide which level of severity it wants to report/act on, on a package-by-package basis. Printing a message to System.out is just sloppy and generally unforgivable.&lt;br /&gt;&lt;br /&gt;Thanks for these following articles:&lt;br /&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html?page=1"&gt;Best Practices for Exception Handling&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/entry/exception_best_practices"&gt;Exception Handling Best Practices Part 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/entry/exception_handling_best_practices_part"&gt;Exception Handling Best Practices Part 2: Control flow in data oriented APIs&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.goshaky.com/weblogs/alexkli/entry/exception_handling_best_practices_part1"&gt;Exception Handling Best Practices Part 3&lt;/a&gt;&lt;br /&gt;&lt;a href="http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html"&gt;Exception-Handling Antipatterns&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/pub/articles/dev2arch/2006/11/effective-exceptions.html"&gt;Effective Java Exceptions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://today.java.net/pub/a/today/2003/12/04/exceptions.html"&gt;Three Rules for Effective Exception Handling&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-2838151990574713875?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/2838151990574713875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/03/best-practices-for-exception-handling.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/2838151990574713875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/2838151990574713875'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/03/best-practices-for-exception-handling.html' title='Best Practices for Exception Handling and Logging'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-1782898161877159780</id><published>2009-03-05T21:06:00.000-08:00</published><updated>2009-03-29T17:25:11.810-07:00</updated><title type='text'>Sample of Java Pattern -- Adapter</title><content type='html'>LegacyModel.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package adapter;&lt;br /&gt;&lt;br /&gt;public class LegacyModel {&lt;br /&gt;    public void ins(String sku){&lt;br /&gt;        System.out.println(&amp;quot;call ins method.&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;ModernModel.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package adapter;&lt;br /&gt;&lt;br /&gt;public interface ModernModel {&lt;br /&gt;    public void save(Order order);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;ModernModelAdapter.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package adapter;&lt;br /&gt;&lt;br /&gt;public class ModernModelAdapter implements ModernModel{&lt;br /&gt;    private LegacyModel legacyModel;&lt;br /&gt;    &lt;br /&gt;    public ModernModelAdapter(LegacyModel legacyModel) {&lt;br /&gt;        super();&lt;br /&gt;        this.legacyModel = legacyModel;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void save(Order order){&lt;br /&gt;        String sku = order.getSku();&lt;br /&gt;        legacyModel = new LegacyModel();&lt;br /&gt;        legacyModel.ins(sku);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Order.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package adapter;&lt;br /&gt;&lt;br /&gt;public class Order {&lt;br /&gt;    private String sku;&lt;br /&gt;&lt;br /&gt;    public String getSku() {&lt;br /&gt;        return sku;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setSku(String sku) {&lt;br /&gt;        this.sku = sku;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;AdapterTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package adapter;&lt;br /&gt;&lt;br /&gt;public class AdapterTest {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        LegacyModel legacy = new LegacyModel(); &lt;br /&gt;        Order order = new Order();&lt;br /&gt;        order.setSku(&amp;quot;sku&amp;quot;);&lt;br /&gt;        ModernModelAdapter adapter = new ModernModelAdapter(legacy);&lt;br /&gt;        adapter.save(order);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/adapter.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-1782898161877159780?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/1782898161877159780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/03/java-pattern-adapter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1782898161877159780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1782898161877159780'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/03/java-pattern-adapter.html' title='Sample of Java Pattern -- Adapter'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-1441849565028665762</id><published>2009-02-27T10:22:00.001-08:00</published><updated>2009-03-29T17:26:19.104-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><title type='text'>Sample of Java Pattern -- Proxy</title><content type='html'>Order.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package proxy;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;public class Order implements Serializable {&lt;br /&gt;&lt;br /&gt;    private int orderId;&lt;br /&gt;    private String sku;&lt;br /&gt;    private Date createdOn;&lt;br /&gt;    private Date updatedOn;&lt;br /&gt;    private int status;&lt;br /&gt;    &lt;br /&gt;    public int getOrderId() {&lt;br /&gt;        return orderId;&lt;br /&gt;    }&lt;br /&gt;    public void setOrderId(int orderId) {&lt;br /&gt;        this.orderId = orderId;&lt;br /&gt;    }&lt;br /&gt;    public String getSku() {&lt;br /&gt;        return sku;&lt;br /&gt;    }&lt;br /&gt;    public void setSku(String sku) {&lt;br /&gt;        this.sku = sku;&lt;br /&gt;    }&lt;br /&gt;    public Date getCreatedOn() {&lt;br /&gt;        return createdOn;&lt;br /&gt;    }&lt;br /&gt;    public void setCreatedOn(Date createdOn) {&lt;br /&gt;        this.createdOn = createdOn;&lt;br /&gt;    }&lt;br /&gt;    public Date getUpdatedOn() {&lt;br /&gt;        return updatedOn;&lt;br /&gt;    }&lt;br /&gt;    public void setUpdatedOn(Date updatedOn) {&lt;br /&gt;        this.updatedOn = updatedOn;&lt;br /&gt;    }&lt;br /&gt;    public int getStatus() {&lt;br /&gt;        return status;&lt;br /&gt;    }&lt;br /&gt;    public void setStatus(int status) {&lt;br /&gt;        this.status = status;&lt;br /&gt;    }&lt;br /&gt;    @Override&lt;br /&gt;    public int hashCode() {&lt;br /&gt;        final int prime = 31;&lt;br /&gt;        int result = 1;&lt;br /&gt;        result = prime * result + ((sku == null) ? 0 : sku.hashCode());&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;    @Override&lt;br /&gt;    public boolean equals(Object obj) {&lt;br /&gt;        if (this == obj)&lt;br /&gt;            return true;&lt;br /&gt;        if (obj == null)&lt;br /&gt;            return false;&lt;br /&gt;        if (getClass() != obj.getClass())&lt;br /&gt;            return false;&lt;br /&gt;        Order other = (Order) obj;&lt;br /&gt;        if (sku == null) {&lt;br /&gt;            if (other.sku != null)&lt;br /&gt;                return false;&lt;br /&gt;        } else if (!sku.equals(other.sku))&lt;br /&gt;            return false;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;OrderDAO.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package proxy;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public interface OrderDAO {&lt;br /&gt;    public List&amp;lt;Order&amp;gt; getAllOrders();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;OrderDAOImpl.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package proxy;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class OrderDAOImpl implements OrderDAO{&lt;br /&gt;    public List&amp;lt;Order&amp;gt; getAllOrders(){&lt;br /&gt;        List&amp;lt;Order&amp;gt; list = new ArrayList&amp;lt;Order&amp;gt;();&lt;br /&gt;        for(int i =0; i&amp;lt;10; i++){&lt;br /&gt;            Order order = new Order();&lt;br /&gt;            order.setSku(&amp;quot;sku&amp;quot;+i);&lt;br /&gt;            list.add(order);&lt;br /&gt;        }&lt;br /&gt;        return list;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;OrderDAOProxy.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package proxy;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class OrderDAOProxy implements OrderDAO{&lt;br /&gt;    public List&amp;lt;Order&amp;gt; getAllOrders(){&lt;br /&gt;        long stTime = System.currentTimeMillis();&lt;br /&gt;        OrderDAO orderDAOImpl = new OrderDAOImpl();&lt;br /&gt;        List&amp;lt;Order&amp;gt; list = orderDAOImpl.getAllOrders();&lt;br /&gt;        long endTime = System.currentTimeMillis();&lt;br /&gt;        System.out.println(&amp;quot;took &amp;quot; + (endTime - stTime) + &amp;quot; milliseconds.&amp;quot;);&lt;br /&gt;        return list;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;ProxyTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package proxy;&lt;br /&gt;&lt;br /&gt;public class ProxyTest {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        OrderDAO orderDAOProxy = new OrderDAOProxy();&lt;br /&gt;        orderDAOProxy.getAllOrders();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/proxy.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-1441849565028665762?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/1441849565028665762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/02/java-pattern-proxy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1441849565028665762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1441849565028665762'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/02/java-pattern-proxy.html' title='Sample of Java Pattern -- Proxy'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-6362831711270021991</id><published>2009-02-21T15:24:00.000-08:00</published><updated>2009-03-29T17:27:07.430-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='state'/><title type='text'>Sample of Java Pattern -- State</title><content type='html'>OrderState.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package state;&lt;br /&gt;&lt;br /&gt;public interface OrderState {&lt;br /&gt;    public void handleOrder(String orderNo);&lt;br /&gt;    public void cancelOrder(String orderNo);&lt;br /&gt;    public void completeOrder(String orderNo);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;OrderOpendState.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package state;&lt;br /&gt;&lt;br /&gt;public class OrderOpendState implements OrderState {&lt;br /&gt;    &lt;br /&gt;    OrderStateMgmt orderStateMgmt;&lt;br /&gt;    &lt;br /&gt;    public OrderOpendState(OrderStateMgmt orderStateMgmt){&lt;br /&gt;        this.orderStateMgmt = orderStateMgmt;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void handleOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;handle this order, orderNo=&amp;quot; + orderNo);&lt;br /&gt;        orderStateMgmt.setState(orderStateMgmt.getOrderInProgressState());&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void cancelOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;cancel this order, orderNo=&amp;quot; + orderNo);&lt;br /&gt;        orderStateMgmt.setState(orderStateMgmt.getOrderCancelledState());&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void completeOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;could not complete this order under opend status, orderNo=&amp;quot; + orderNo);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;OrderInProgressState.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package state;&lt;br /&gt;&lt;br /&gt;public class OrderInProgressState implements OrderState {&lt;br /&gt;    &lt;br /&gt;    OrderStateMgmt orderStateMgmt;&lt;br /&gt;    &lt;br /&gt;    public OrderInProgressState(OrderStateMgmt orderStateMgmt){&lt;br /&gt;        this.orderStateMgmt = orderStateMgmt;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void handleOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;could not handle this order under in progress status, orderNo=&amp;quot; + orderNo);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void cancelOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;cancel this order, orderNo=&amp;quot; + orderNo);&lt;br /&gt;        orderStateMgmt.setState(orderStateMgmt.getOrderCancelledState());&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void completeOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;complete this order, orderNo=&amp;quot; + orderNo);&lt;br /&gt;        orderStateMgmt.setState(orderStateMgmt.getOrderClosedState());&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;OrderCancelledState.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package state;&lt;br /&gt;&lt;br /&gt;public class OrderCancelledState implements OrderState {&lt;br /&gt;    &lt;br /&gt;    OrderStateMgmt orderStateMgmt;&lt;br /&gt;    &lt;br /&gt;    public OrderCancelledState(OrderStateMgmt orderStateMgmt){&lt;br /&gt;        this.orderStateMgmt = orderStateMgmt;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void handleOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;could not handle this order under cancelled status, orderNo=&amp;quot; + orderNo);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void cancelOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;could not cancel this order under cancelled status, orderNo=&amp;quot; + orderNo);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void completeOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;could not complete this order under cancelled status, orderNo=&amp;quot; + orderNo);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;OrderClosedState.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package state;&lt;br /&gt;&lt;br /&gt;public class OrderClosedState implements OrderState {&lt;br /&gt;    &lt;br /&gt;    OrderStateMgmt orderStateMgmt;&lt;br /&gt;    &lt;br /&gt;    public OrderClosedState(OrderStateMgmt orderStateMgmt){&lt;br /&gt;        this.orderStateMgmt = orderStateMgmt;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void handleOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;could not handle this order under closed status, orderNo=&amp;quot; + orderNo);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void cancelOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;could not cancel this order under closed status, orderNo=&amp;quot; + orderNo);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void completeOrder(String orderNo){&lt;br /&gt;        System.out.println(&amp;quot;could not complete this order under closed status, orderNo=&amp;quot; + orderNo);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;OrderStateMgmt.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package state;&lt;br /&gt;&lt;br /&gt;public class OrderStateMgmt {&lt;br /&gt;    &lt;br /&gt;    private OrderOpendState orderOpendState;&lt;br /&gt;    private OrderInProgressState orderInProgressState;&lt;br /&gt;    private OrderCancelledState orderCancelledState;&lt;br /&gt;    private OrderClosedState orderClosedState;&lt;br /&gt;    &lt;br /&gt;    private OrderState orderState;&lt;br /&gt;    &lt;br /&gt;    public OrderStateMgmt(){&lt;br /&gt;        this.orderOpendState = new OrderOpendState(this);&lt;br /&gt;        this.orderInProgressState = new OrderInProgressState(this);&lt;br /&gt;        this.orderCancelledState = new OrderCancelledState(this);&lt;br /&gt;        this.orderClosedState = new OrderClosedState(this);&lt;br /&gt;        this.orderState = this.orderOpendState;&lt;br /&gt;        System.out.println(&amp;quot;The order inital status is: opend.&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void setState(OrderState orderState){&lt;br /&gt;        this.orderState = orderState;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public OrderOpendState getOrderOpendState() {&lt;br /&gt;        return orderOpendState;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public OrderInProgressState getOrderInProgressState() {&lt;br /&gt;        return orderInProgressState;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public OrderCancelledState getOrderCancelledState() {&lt;br /&gt;        return orderCancelledState;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public OrderClosedState getOrderClosedState() {&lt;br /&gt;        return orderClosedState;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void handleOrder(String orderNo){&lt;br /&gt;        orderState.handleOrder(orderNo);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void cancelOrder(String orderNo){&lt;br /&gt;        orderState.cancelOrder(orderNo);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void completeOrder(String orderNo){&lt;br /&gt;        orderState.completeOrder(orderNo);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;OrderStateTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package state;&lt;br /&gt;&lt;br /&gt;public class OrderStateTest {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        OrderStateMgmt orderStateMgmtA = new OrderStateMgmt();&lt;br /&gt;        &lt;br /&gt;        orderStateMgmtA.handleOrder(&amp;quot;01&amp;quot;);&lt;br /&gt;        orderStateMgmtA.completeOrder(&amp;quot;01&amp;quot;);&lt;br /&gt;&lt;br /&gt;        OrderStateMgmt orderStateMgmtB = new OrderStateMgmt();&lt;br /&gt;&lt;br /&gt;        orderStateMgmtB.handleOrder(&amp;quot;02&amp;quot;);&lt;br /&gt;        orderStateMgmtB.cancelOrder(&amp;quot;02&amp;quot;);&lt;br /&gt;        &lt;br /&gt;        OrderStateMgmt orderStateMgmtC = new OrderStateMgmt();&lt;br /&gt;&lt;br /&gt;        orderStateMgmtC.completeOrder(&amp;quot;03&amp;quot;);&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;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/state.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-6362831711270021991?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/6362831711270021991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/02/java-pattern-state.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/6362831711270021991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/6362831711270021991'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/02/java-pattern-state.html' title='Sample of Java Pattern -- State'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-4493984125437040013</id><published>2009-02-13T11:09:00.000-08:00</published><updated>2009-03-29T17:28:08.133-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='composite'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><title type='text'>Sample of Java Pattern -- Composite</title><content type='html'>Department.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package composite;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public interface Department {&lt;br /&gt;    public Department getDepartment();&lt;br /&gt;    public String getDepartmentname();&lt;br /&gt;    public void add(Department department);&lt;br /&gt;    public void remove(Department department);&lt;br /&gt;    public boolean hasSubDepartments();&lt;br /&gt;    public List&amp;lt;Department&amp;gt; getSubDepartments();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;CompositeDepartment.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package composite;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class CompositeDepartment implements Department {&lt;br /&gt;    private String name;&lt;br /&gt;    private List&amp;lt;Department&amp;gt; departments = new ArrayList&amp;lt;Department&amp;gt;();&lt;br /&gt;    &lt;br /&gt;    public CompositeDepartment(String name) {&lt;br /&gt;        super();&lt;br /&gt;        System.out.println(&amp;quot;Department &amp;quot; + name + &amp;quot; is created.&amp;quot;);&lt;br /&gt;        this.name = name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Department getDepartment() {&lt;br /&gt;        return this;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getDepartmentname() {&lt;br /&gt;        return this.name;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void add(Department department){&lt;br /&gt;        System.out.println(&amp;quot;Department &amp;quot; + department.getDepartmentname() + &amp;quot; is added to Department &amp;quot; + this.name + &amp;quot;.&amp;quot;);&lt;br /&gt;        departments.add(department);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void remove(Department department){&lt;br /&gt;        System.out.println(&amp;quot;Department &amp;quot; + department.getDepartmentname() + &amp;quot; is removed from Department &amp;quot; + this.name + &amp;quot;.&amp;quot;);&lt;br /&gt;        departments.remove(department);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public boolean hasSubDepartments(){&lt;br /&gt;        if(departments == null &amp;#124;&amp;#124; departments.isEmpty())&lt;br /&gt;            return false;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public List&amp;lt;Department&amp;gt; getSubDepartments(){&lt;br /&gt;        if(hasSubDepartments())&lt;br /&gt;            return departments;&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;SingleDepartment.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package composite;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class SingleDepartment implements Department {&lt;br /&gt;    private String name;&lt;br /&gt;    &lt;br /&gt;    public SingleDepartment(String name) {&lt;br /&gt;        super();&lt;br /&gt;        System.out.println(&amp;quot;Department &amp;quot; + name + &amp;quot; is created.&amp;quot;);&lt;br /&gt;        this.name = name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Department getDepartment() {&lt;br /&gt;        return this;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getDepartmentname() {&lt;br /&gt;        return this.name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void add(Department department){&lt;br /&gt;        System.out.println(&amp;quot;Could not add a child department in Department &amp;quot; + this.name + &amp;quot;.&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void remove(Department department){&lt;br /&gt;        System.out.println(&amp;quot;Department &amp;quot; + department.getDepartmentname() + &amp;quot; doesn't belong to Department &amp;quot; + this.name + &amp;quot;.&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public boolean hasSubDepartments(){&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public List&amp;lt;Department&amp;gt; getSubDepartments(){&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;CompositeTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package composite;&lt;br /&gt;&lt;br /&gt;public class CompositeTest {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        Department hq = new CompositeDepartment(&amp;quot;HQ&amp;quot;);&lt;br /&gt;        Department financing = new SingleDepartment(&amp;quot;Financing&amp;quot;);&lt;br /&gt;        Department marketing = new CompositeDepartment(&amp;quot;Marketing&amp;quot;);&lt;br /&gt;        Department preSales = new SingleDepartment(&amp;quot;PreSales&amp;quot;);&lt;br /&gt;        Department sales = new SingleDepartment(&amp;quot;Sales&amp;quot;);&lt;br /&gt;        Department postSales = new SingleDepartment(&amp;quot;PostSales&amp;quot;);&lt;br /&gt;        Department techSupport = new SingleDepartment(&amp;quot;TechSupport&amp;quot;);&lt;br /&gt;        hq.add(financing);&lt;br /&gt;        hq.add(marketing);&lt;br /&gt;        hq.add(techSupport);&lt;br /&gt;        marketing.add(preSales);&lt;br /&gt;        marketing.add(sales);&lt;br /&gt;        marketing.add(postSales);&lt;br /&gt;        System.out.println(&amp;quot;hq has sub departments: &amp;quot; + hq.hasSubDepartments());&lt;br /&gt;        System.out.println(&amp;quot;marketing has sub departments: &amp;quot; + marketing.hasSubDepartments());&lt;br /&gt;        System.out.println(&amp;quot;techSupport has sub departments: &amp;quot; + techSupport.hasSubDepartments());&lt;br /&gt;        marketing.remove(preSales);&lt;br /&gt;        marketing.remove(sales);&lt;br /&gt;        marketing.remove(postSales);&lt;br /&gt;        sales.remove(preSales);&lt;br /&gt;        hq.remove(financing);&lt;br /&gt;        hq.remove(marketing);&lt;br /&gt;        hq.remove(techSupport);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/composite.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-4493984125437040013?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/4493984125437040013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/02/java-pattern-composite.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/4493984125437040013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/4493984125437040013'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/02/java-pattern-composite.html' title='Sample of Java Pattern -- Composite'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-1075579392709808211</id><published>2009-02-07T16:00:00.000-08:00</published><updated>2009-03-29T17:28:56.704-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='iterator'/><title type='text'>Sample of Java Pattern -- Iterator</title><content type='html'>Aggregate.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package iterator;&lt;br /&gt;&lt;br /&gt;public interface Aggregate {&lt;br /&gt;    public abstract Iterator iterator();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Iterator.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package iterator;&lt;br /&gt;&lt;br /&gt;public interface Iterator {&lt;br /&gt;    public abstract boolean hasNext();  &lt;br /&gt;    public abstract Object next();  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Order.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package iterator;&lt;br /&gt;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;public class Order {&lt;br /&gt;    private String name;&lt;br /&gt;    private Date createdOn = new Date();&lt;br /&gt;    private Date updatedOn = new Date();&lt;br /&gt;    &lt;br /&gt;    public Order(String name) {&lt;br /&gt;        super();&lt;br /&gt;        this.name = name;&lt;br /&gt;    }&lt;br /&gt;    public String getName() {&lt;br /&gt;        return name;&lt;br /&gt;    }&lt;br /&gt;    public void setName(String name) {&lt;br /&gt;        this.name = name;&lt;br /&gt;    }&lt;br /&gt;    public Date getCreatedOn() {&lt;br /&gt;        return createdOn;&lt;br /&gt;    }&lt;br /&gt;    public void setCreatedOn(Date createdOn) {&lt;br /&gt;        this.createdOn = createdOn;&lt;br /&gt;    }&lt;br /&gt;    public Date getUpdatedOn() {&lt;br /&gt;        return updatedOn;&lt;br /&gt;    }&lt;br /&gt;    public void setUpdatedOn(Date updatedOn) {&lt;br /&gt;        this.updatedOn = updatedOn;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Orders.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package iterator;&lt;br /&gt;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;public class Orders implements Aggregate{&lt;br /&gt;    private Order[] orders;&lt;br /&gt;    private int last = 0;&lt;br /&gt;    &lt;br /&gt;    public Orders(int max){&lt;br /&gt;        this.orders = new Order[max];&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public Order getOrderAt(int index){&lt;br /&gt;        return this.orders[index];&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void appendOrder(Order order){&lt;br /&gt;        this.orders[last] = order;&lt;br /&gt;        this.last ++ ;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public int getLength(){&lt;br /&gt;        return orders.length;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public Iterator iterator() {&lt;br /&gt;        return new OrdersIterator(this);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;OrdersIterator.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package iterator;&lt;br /&gt;&lt;br /&gt;public class OrdersIterator implements Iterator{&lt;br /&gt;    private Orders orders;&lt;br /&gt;    private int index;&lt;br /&gt;    &lt;br /&gt;    public OrdersIterator(Orders orders) {&lt;br /&gt;        this.orders = orders;&lt;br /&gt;        this.index = 0;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public boolean hasNext(){&lt;br /&gt;        if(index &amp;lt; orders.getLength()){&lt;br /&gt;            return true;&lt;br /&gt;        }else{&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public Order next(){&lt;br /&gt;        Order order = orders.getOrderAt(this.index);&lt;br /&gt;        this.index ++ ;&lt;br /&gt;        return order;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;IteratorTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package iterator;&lt;br /&gt;&lt;br /&gt;public class IteratorTest {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        Orders orders = new Orders(3);&lt;br /&gt;        orders.appendOrder(new Order(&amp;quot;order1&amp;quot;));&lt;br /&gt;        orders.appendOrder(new Order(&amp;quot;order2&amp;quot;));&lt;br /&gt;        orders.appendOrder(new Order(&amp;quot;order3&amp;quot;));&lt;br /&gt;        Iterator iterator = orders.iterator();&lt;br /&gt;        while(iterator.hasNext()) {&lt;br /&gt;            Order order = (Order)iterator.next();&lt;br /&gt;            System.out.println(order.getName());&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;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/iterator.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-1075579392709808211?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/1075579392709808211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/02/java-pattern-iterator.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1075579392709808211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1075579392709808211'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/02/java-pattern-iterator.html' title='Sample of Java Pattern -- Iterator'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-2754073611118089758</id><published>2009-01-30T17:25:00.000-08:00</published><updated>2009-03-29T17:29:45.117-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='template method'/><title type='text'>Sample of Java Pattern -- Template Method</title><content type='html'>EmailTemplate.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package templatemethod;&lt;br /&gt;&lt;br /&gt;import javax.mail.*;&lt;br /&gt;import javax.mail.internet.*;&lt;br /&gt;&lt;br /&gt;public abstract class EmailTemplate {&lt;br /&gt;    public void send(String smtpHostName, String smtpPort, String smtpAuthUser, String smtpAuthPwd, String[] recipients, String subject,String message, String from){&lt;br /&gt;        MimeMessage msg = connect(smtpHostName, smtpPort, smtpAuthUser, smtpAuthPwd);&lt;br /&gt;        try {&lt;br /&gt;            InternetAddress addressFrom = new InternetAddress(from);&lt;br /&gt;            msg.setFrom(addressFrom);&lt;br /&gt;&lt;br /&gt;            InternetAddress[] addressTo = new InternetAddress[recipients.length];&lt;br /&gt;            for (int i = 0; i &amp;lt; recipients.length; i++) {&lt;br /&gt;                addressTo[i] = new InternetAddress(recipients[i]);&lt;br /&gt;            }&lt;br /&gt;            msg.setRecipients(Message.RecipientType.TO, addressTo);&lt;br /&gt;&lt;br /&gt;            msg.setSubject(subject);&lt;br /&gt;            msg.setContent(message, &amp;quot;text/html&amp;quot;);&lt;br /&gt;            Transport.send(msg);&lt;br /&gt;        } catch (MessagingException e) {&lt;br /&gt;            System.out.println(&amp;quot;Could not send this email, title=&amp;quot; + subject + &amp;quot; addressTo=&amp;quot; + recipients[0] + &amp;quot;, please check the email server connection.&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    protected abstract MimeMessage connect(String smtpHostName, String smtpPort, String smtpAuthUser, String smtpAuthPwd);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;GeneralEmailService.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package templatemethod;&lt;br /&gt;&lt;br /&gt;import java.security.Security;&lt;br /&gt;import java.util.Properties;&lt;br /&gt;&lt;br /&gt;import javax.mail.Authenticator;&lt;br /&gt;import javax.mail.Session;&lt;br /&gt;import javax.mail.internet.MimeMessage;&lt;br /&gt;&lt;br /&gt;import templatemethod.GoogleEmailService.SMTPAuthenticator;&lt;br /&gt;&lt;br /&gt;public class GeneralEmailService extends EmailTemplate{&lt;br /&gt;    private String smtpAuthUser;&lt;br /&gt;    private String smtpAuthPwd;&lt;br /&gt;    protected MimeMessage connect(String smtpHostName, String smtpPort, String smtpAuthUser, String smtpAuthPwd){&lt;br /&gt;        &lt;br /&gt;        this.smtpAuthUser = smtpAuthUser;&lt;br /&gt;        this.smtpAuthPwd = smtpAuthPwd;&lt;br /&gt;        &lt;br /&gt;        boolean debug = false;&lt;br /&gt;&lt;br /&gt;        Properties props = new Properties();&lt;br /&gt;        props.setProperty(&amp;quot;mail.transport.protocol&amp;quot;, &amp;quot;smtp&amp;quot;);&lt;br /&gt;        props.setProperty(&amp;quot;mail.host&amp;quot;, smtpHostName);&lt;br /&gt;        props.put(&amp;quot;mail.smtp.auth&amp;quot;, &amp;quot;true&amp;quot;);&lt;br /&gt;        props.put(&amp;quot;mail.smtp.port&amp;quot;, smtpPort);&lt;br /&gt;        props.setProperty(&amp;quot;mail.smtp.quitwait&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;&lt;br /&gt;        Authenticator auth = new SMTPAuthenticator();&lt;br /&gt;        Session session = Session.getDefaultInstance(props, auth);&lt;br /&gt;&lt;br /&gt;        session.setDebug(debug);&lt;br /&gt;&lt;br /&gt;        MimeMessage msg = new MimeMessage(session);&lt;br /&gt;        &lt;br /&gt;        return msg;&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private class SMTPAuthenticator extends javax.mail.Authenticator {&lt;br /&gt;        public PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;            String username = smtpAuthUser;&lt;br /&gt;            String password = smtpAuthPwd;&lt;br /&gt;            return new PasswordAuthentication(username, password);&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;GoogleEmailService.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package templatemethod;&lt;br /&gt;&lt;br /&gt;import java.security.Security;&lt;br /&gt;import java.util.Properties;&lt;br /&gt;&lt;br /&gt;import javax.mail.Authenticator;&lt;br /&gt;import javax.mail.PasswordAuthentication;&lt;br /&gt;import javax.mail.Session;&lt;br /&gt;import javax.mail.internet.MimeMessage;&lt;br /&gt;&lt;br /&gt;public class GoogleEmailService extends EmailTemplate{&lt;br /&gt;    private String smtpAuthUser;&lt;br /&gt;    private String smtpAuthPwd;&lt;br /&gt;    protected MimeMessage connect(String smtpHostName, String smtpPort, String smtpAuthUser, String smtpAuthPwd){&lt;br /&gt;        &lt;br /&gt;        this.smtpAuthUser = smtpAuthUser;&lt;br /&gt;        this.smtpAuthPwd = smtpAuthPwd;&lt;br /&gt;        &lt;br /&gt;        boolean debug = false;&lt;br /&gt;&lt;br /&gt;        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());&lt;br /&gt;&lt;br /&gt;        Properties props = new Properties();&lt;br /&gt;        props.setProperty(&amp;quot;mail.transport.protocol&amp;quot;, &amp;quot;smtp&amp;quot;);&lt;br /&gt;        props.setProperty(&amp;quot;mail.host&amp;quot;, smtpHostName);&lt;br /&gt;        props.put(&amp;quot;mail.smtp.auth&amp;quot;, &amp;quot;true&amp;quot;);&lt;br /&gt;        props.put(&amp;quot;mail.smtp.port&amp;quot;, smtpPort);&lt;br /&gt;        props.setProperty(&amp;quot;mail.smtp.quitwait&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;&lt;br /&gt;        props.put(&amp;quot;mail.smtp.socketFactory.port&amp;quot;, smtpPort);&lt;br /&gt;        props.put(&amp;quot;mail.smtp.socketFactory.class&amp;quot;,&amp;quot;javax.net.ssl.SSLSocketFactory&amp;quot;);&lt;br /&gt;        props.put(&amp;quot;mail.smtp.socketFactory.fallback&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;&lt;br /&gt;        Authenticator auth = new SMTPAuthenticator();&lt;br /&gt;        Session session = Session.getDefaultInstance(props, auth);&lt;br /&gt;&lt;br /&gt;        session.setDebug(debug);&lt;br /&gt;&lt;br /&gt;        MimeMessage msg = new MimeMessage(session);&lt;br /&gt;        &lt;br /&gt;        return msg;&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private class SMTPAuthenticator extends javax.mail.Authenticator {&lt;br /&gt;        public PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;            String username = smtpAuthUser;&lt;br /&gt;            String password = smtpAuthPwd;&lt;br /&gt;            return new PasswordAuthentication(username, password);&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;TemplateMethodTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package templatemethod;&lt;br /&gt;&lt;br /&gt;public class TemplateMethodTest {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        String smtpHostName = &amp;quot;&amp;quot;;&lt;br /&gt;        String smtpPort = &amp;quot;&amp;quot;;&lt;br /&gt;        String smtpAuthUser = &amp;quot;&amp;quot;;&lt;br /&gt;        String smtpAuthPwd = &amp;quot;&amp;quot;;&lt;br /&gt;        String[] recipients = {&amp;quot;&amp;quot;};&lt;br /&gt;        String subject = &amp;quot;&amp;quot;;&lt;br /&gt;        String message = &amp;quot;&amp;quot;;&lt;br /&gt;        String from = &amp;quot;&amp;quot;;&lt;br /&gt;        EmailTemplate googleEmailService = new GoogleEmailService();&lt;br /&gt;        googleEmailService.send(smtpHostName, smtpPort, smtpAuthUser, smtpAuthPwd, recipients, subject, message, from);&lt;br /&gt;        EmailTemplate generalEmailService = new GeneralEmailService();&lt;br /&gt;        generalEmailService.send(smtpHostName, smtpPort, smtpAuthUser, smtpAuthPwd, recipients, subject, message, from);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/templatemethod.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-2754073611118089758?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/2754073611118089758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/01/java-pattern-template-method.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/2754073611118089758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/2754073611118089758'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/01/java-pattern-template-method.html' title='Sample of Java Pattern -- Template Method'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-2491947816527026022</id><published>2009-01-24T22:35:00.000-08:00</published><updated>2009-03-29T17:30:33.954-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='façade'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><title type='text'>Sample of Java Pattern -- Façade</title><content type='html'>Customer.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package facade;&lt;br /&gt;&lt;br /&gt;public class Customer {&lt;br /&gt;    private String name;&lt;br /&gt;    private String address;&lt;br /&gt;    private Order order;&lt;br /&gt;    &lt;br /&gt;    public String getName() {&lt;br /&gt;        return name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setName(String name) {&lt;br /&gt;        this.name = name;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getAddress() {&lt;br /&gt;        return address;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setAddress(String address) {&lt;br /&gt;        this.address = address;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public Order getOrder() {&lt;br /&gt;        return order;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setOrder(Order order) {&lt;br /&gt;        this.order = order;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void save(){&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;Order.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package facade;&lt;br /&gt;&lt;br /&gt;public class Order {&lt;br /&gt;    private String sku;&lt;br /&gt;&lt;br /&gt;    public String getSku() {&lt;br /&gt;        return sku;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setSku(String sku) {&lt;br /&gt;        this.sku = sku;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void save(){&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;CustomerFacade.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package facade;&lt;br /&gt;&lt;br /&gt;public class CustomerFacade {&lt;br /&gt;    public void placeOrder(String customerName, String customerAddress, String sku){&lt;br /&gt;        Customer customer = new Customer();&lt;br /&gt;        customer.setName(customerName);&lt;br /&gt;        customer.setAddress(customerAddress);&lt;br /&gt;        Order order = new Order();&lt;br /&gt;        order.setSku(sku);&lt;br /&gt;        customer.setOrder(order);&lt;br /&gt;        customer.save();&lt;br /&gt;        order.save();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;FacadeTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package facade;&lt;br /&gt;&lt;br /&gt;public class FacadeTest {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        CustomerFacade customerFacade = new CustomerFacade();&lt;br /&gt;        customerFacade.placeOrder(&amp;quot;customerName&amp;quot;, &amp;quot;customerAddress&amp;quot;, &amp;quot;sku&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/facade.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-2491947816527026022?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/2491947816527026022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/01/java-pattern-faade.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/2491947816527026022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/2491947816527026022'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/01/java-pattern-faade.html' title='Sample of Java Pattern -- Façade'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-73974888182538333</id><published>2009-01-22T11:36:00.000-08:00</published><updated>2009-01-28T20:56:47.905-08:00</updated><title type='text'>Debug Tomcat and JBoss Web-application in Eclipse</title><content type='html'>1. configure tomcat to allow remote debugging&lt;br /&gt;ensure the startup.bat includes:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;set JPDA_ADDRESS=8000&lt;br /&gt;set JPDA_TRANSPORT=dt_socket&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;or startup.sh includes:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;export JPDA_ADDRESS=8000&lt;br /&gt;export JPDA_TRANSPORT=dt_socket&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;and update the execute line to inlcude(the first line for startup.bat, the second line for startup.sh):&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;call &amp;quot;%EXECUTABLE%&amp;quot; jpda start %CMD_LINE_ARGS%&lt;br /&gt;exec &amp;quot;$PRGDIR&amp;quot;/&amp;quot;$EXECUTABLE&amp;quot; jpda start &amp;quot;$@&amp;quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2. configure jboss to allow remote debugging&lt;br /&gt;ensure the JAVA_OPTS in your jboss run.sh or run.bat includes:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;3. configure eclipse to remote debug&lt;br /&gt;go into 'debug' in eclipse and new a remote debug application, remember apply 'port number' to web application server debug port, in this case, this port number is 8787, not 8080.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-73974888182538333?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/73974888182538333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/01/debug-tomcat-and-jboss-web-application.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/73974888182538333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/73974888182538333'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/01/debug-tomcat-and-jboss-web-application.html' title='Debug Tomcat and JBoss Web-application in Eclipse'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-388300221080203941</id><published>2009-01-16T08:57:00.000-08:00</published><updated>2009-03-29T17:31:18.406-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='adapter'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><title type='text'>Sample of Java Pattern -- Adapter</title><content type='html'>LegacyModel.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package adapter;&lt;br /&gt;&lt;br /&gt;public class LegacyModel {&lt;br /&gt;    public void ins(String sku){&lt;br /&gt;        System.out.println(&amp;quot;call ins method.&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;ModernModel.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package adapter;&lt;br /&gt;&lt;br /&gt;public interface ModernModel {&lt;br /&gt;    public void save(Order order);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;ModernModelAdapter.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package adapter;&lt;br /&gt;&lt;br /&gt;public class ModernModelAdapter implements ModernModel{&lt;br /&gt;    private LegacyModel legacyModel;&lt;br /&gt;    &lt;br /&gt;    public ModernModelAdapter(LegacyModel legacyModel) {&lt;br /&gt;        super();&lt;br /&gt;        this.legacyModel = legacyModel;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void save(Order order){&lt;br /&gt;        String sku = order.getSku();&lt;br /&gt;        legacyModel = new LegacyModel();&lt;br /&gt;        legacyModel.ins(sku);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Order.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package adapter;&lt;br /&gt;&lt;br /&gt;public class Order {&lt;br /&gt;    private String sku;&lt;br /&gt;&lt;br /&gt;    public String getSku() {&lt;br /&gt;        return sku;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setSku(String sku) {&lt;br /&gt;        this.sku = sku;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;AdapterTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package adapter;&lt;br /&gt;&lt;br /&gt;public class AdapterTest {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        LegacyModel legacy = new LegacyModel(); &lt;br /&gt;        Order order = new Order();&lt;br /&gt;        order.setSku(&amp;quot;sku&amp;quot;);&lt;br /&gt;        ModernModelAdapter adapter = new ModernModelAdapter(legacy);&lt;br /&gt;        adapter.save(order);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/adapter.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-388300221080203941?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/388300221080203941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/01/java-pattern-adapter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/388300221080203941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/388300221080203941'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/01/java-pattern-adapter.html' title='Sample of Java Pattern -- Adapter'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-3227840495147795688</id><published>2009-01-12T10:44:00.001-08:00</published><updated>2009-03-15T13:51:35.585-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='command'/><title type='text'>Sample of Java Pattern -- Command</title><content type='html'>Command.java&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;package command;&lt;br /&gt;&lt;br /&gt;public interface Command {&lt;br /&gt;  public void execute();&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ConfirmCommand.java&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;package command;&lt;br /&gt;&lt;br /&gt;public class ConfirmCommand implements Command {&lt;br /&gt;&lt;br /&gt;  private EmailService emailService;&lt;br /&gt;&lt;br /&gt;  public ConfirmCommand(){}&lt;br /&gt;&lt;br /&gt;  public void execute() {&lt;br /&gt;      emailService = new EmailService();&lt;br /&gt;      emailService.confirmMeeting();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;CancelCommand.java&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;package command;&lt;br /&gt;&lt;br /&gt;public class CancelCommand implements Command {&lt;br /&gt;&lt;br /&gt;  private EmailService emailService;&lt;br /&gt;&lt;br /&gt;  public CancelCommand(){}&lt;br /&gt;&lt;br /&gt;  public void execute() {&lt;br /&gt;      emailService = new EmailService();&lt;br /&gt;      emailService.cancelMeeting();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;EmailService.java&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;package command;&lt;br /&gt;&lt;br /&gt;public class EmailService {&lt;br /&gt;&lt;br /&gt;  public EmailService(){}&lt;br /&gt;&lt;br /&gt;  public void cancelMeeting(){&lt;br /&gt;      System.out.println("send cacellation email");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void confirmMeeting(){&lt;br /&gt;      System.out.println("send confirmation email");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Invoker.java&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;package command;&lt;br /&gt;&lt;br /&gt;public class Invoker {&lt;br /&gt;  private Command command;&lt;br /&gt;&lt;br /&gt;  public Invoker(){&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void setCommand(Command command){&lt;br /&gt;      this.command = command;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void executeCommand(){&lt;br /&gt;      this.command.execute();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;CommandTest.java&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;package command;&lt;br /&gt;&lt;br /&gt;public class CommandTest {&lt;br /&gt;&lt;br /&gt;  public static void main(String[] args) {&lt;br /&gt;      CancelCommand cancelCommand = new CancelCommand();&lt;br /&gt;      ConfirmCommand confirmCommand = new ConfirmCommand();&lt;br /&gt;      Invoker invoker = new Invoker();&lt;br /&gt;      invoker.setCommand(confirmCommand);&lt;br /&gt;      invoker.executeCommand();&lt;br /&gt;      invoker.setCommand(cancelCommand);&lt;br /&gt;      invoker.executeCommand();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;you can download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/command.rar"&gt;source code&lt;/a&gt; .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-3227840495147795688?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/3227840495147795688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/01/java-pattern-command.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/3227840495147795688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/3227840495147795688'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/01/java-pattern-command.html' title='Sample of Java Pattern -- Command'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-4747193407032004373</id><published>2009-01-05T10:09:00.000-08:00</published><updated>2009-03-29T17:32:40.299-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='singleton'/><title type='text'>Sample of Java Pattern -- Singleton</title><content type='html'>Utils.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package singleton;&lt;br /&gt;&lt;br /&gt;public class Utils {&lt;br /&gt;    &lt;br /&gt;    private Utils(){}&lt;br /&gt;    &lt;br /&gt;    private static Utils instance = new Utils();&lt;br /&gt;    &lt;br /&gt;    public static Utils getInstance() {&lt;br /&gt;        return instance;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void println(String str){&lt;br /&gt;        System.out.println(str);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        Utils.getInstance().println(&amp;quot;Hello&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/singleton.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-4747193407032004373?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/4747193407032004373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2009/01/java-pattern-singleton.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/4747193407032004373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/4747193407032004373'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2009/01/java-pattern-singleton.html' title='Sample of Java Pattern -- Singleton'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-7837900862875761399</id><published>2008-12-29T10:55:00.000-08:00</published><updated>2009-03-29T17:33:31.820-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='factory'/><title type='text'>Sample of Java Pattern -- Factory</title><content type='html'>Customer.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package factory;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.HashSet;&lt;br /&gt;import java.util.Set;&lt;br /&gt;&lt;br /&gt;public class Customer implements Serializable {&lt;br /&gt;&lt;br /&gt;    private Long customerId;&lt;br /&gt;    private String firstName;&lt;br /&gt;    private String lastName;&lt;br /&gt;    private String address;&lt;br /&gt;    private String city;&lt;br /&gt;    private String postalCode;&lt;br /&gt;    private String workPhone;&lt;br /&gt;    private String homePhone;&lt;br /&gt;    private String cellPhone;&lt;br /&gt;    private String email;&lt;br /&gt;    private Date createdOn;&lt;br /&gt;    private Date updatedOn;&lt;br /&gt;    private Set&amp;lt;Order&amp;gt; orders = new HashSet&amp;lt;Order&amp;gt;(0);&lt;br /&gt;    &lt;br /&gt;    public Long getCustomerId() {&lt;br /&gt;        return customerId;&lt;br /&gt;    }&lt;br /&gt;    public void setCustomerId(Long customerId) {&lt;br /&gt;        this.customerId = customerId;&lt;br /&gt;    }&lt;br /&gt;    public String getFirstName() {&lt;br /&gt;        return firstName;&lt;br /&gt;    }&lt;br /&gt;    public void setFirstName(String firstName) {&lt;br /&gt;        this.firstName = firstName;&lt;br /&gt;    }&lt;br /&gt;    public String getLastName() {&lt;br /&gt;        return lastName;&lt;br /&gt;    }&lt;br /&gt;    public void setLastName(String lastName) {&lt;br /&gt;        this.lastName = lastName;&lt;br /&gt;    }&lt;br /&gt;    public String getAddress() {&lt;br /&gt;        return address;&lt;br /&gt;    }&lt;br /&gt;    public void setAddress(String address) {&lt;br /&gt;        this.address = address;&lt;br /&gt;    }&lt;br /&gt;    public String getCity() {&lt;br /&gt;        return city;&lt;br /&gt;    }&lt;br /&gt;    public void setCity(String city) {&lt;br /&gt;        this.city = city;&lt;br /&gt;    }&lt;br /&gt;    public String getPostalCode() {&lt;br /&gt;        return postalCode;&lt;br /&gt;    }&lt;br /&gt;    public void setPostalCode(String postalCode) {&lt;br /&gt;        this.postalCode = postalCode;&lt;br /&gt;    }&lt;br /&gt;    public String getWorkPhone() {&lt;br /&gt;        return workPhone;&lt;br /&gt;    }&lt;br /&gt;    public void setWorkPhone(String workPhone) {&lt;br /&gt;        this.workPhone = workPhone;&lt;br /&gt;    }&lt;br /&gt;    public String getHomePhone() {&lt;br /&gt;        return homePhone;&lt;br /&gt;    }&lt;br /&gt;    public void setHomePhone(String homePhone) {&lt;br /&gt;        this.homePhone = homePhone;&lt;br /&gt;    }&lt;br /&gt;    public String getCellPhone() {&lt;br /&gt;        return cellPhone;&lt;br /&gt;    }&lt;br /&gt;    public void setCellPhone(String cellPhone) {&lt;br /&gt;        this.cellPhone = cellPhone;&lt;br /&gt;    }&lt;br /&gt;    public String getEmail() {&lt;br /&gt;        return email;&lt;br /&gt;    }&lt;br /&gt;    public void setEmail(String email) {&lt;br /&gt;        this.email = email;&lt;br /&gt;    }&lt;br /&gt;    public Date getCreatedOn() {&lt;br /&gt;        return createdOn;&lt;br /&gt;    }&lt;br /&gt;    public void setCreatedOn(Date createdOn) {&lt;br /&gt;        this.createdOn = createdOn;&lt;br /&gt;    }&lt;br /&gt;    public Date getUpdatedOn() {&lt;br /&gt;        return updatedOn;&lt;br /&gt;    }&lt;br /&gt;    public void setUpdatedOn(Date updatedOn) {&lt;br /&gt;        this.updatedOn = updatedOn;&lt;br /&gt;    }&lt;br /&gt;    public Set&amp;lt;Order&amp;gt; getOrders() {&lt;br /&gt;        return orders;&lt;br /&gt;    }&lt;br /&gt;    public void setOrders(Set&amp;lt;Order&amp;gt; orders) {&lt;br /&gt;        this.orders = orders;&lt;br /&gt;    }&lt;br /&gt;    @Override&lt;br /&gt;    public int hashCode() {&lt;br /&gt;        final int prime = 31;&lt;br /&gt;        int result = 1;&lt;br /&gt;        result = prime * result + ((email == null) ? 0 : email.hashCode());&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;    @Override&lt;br /&gt;    public boolean equals(Object obj) {&lt;br /&gt;        if (this == obj)&lt;br /&gt;            return true;&lt;br /&gt;        if (obj == null)&lt;br /&gt;            return false;&lt;br /&gt;        if (getClass() != obj.getClass())&lt;br /&gt;            return false;&lt;br /&gt;        Customer other = (Customer) obj;&lt;br /&gt;        if (email == null) {&lt;br /&gt;            if (other.email != null)&lt;br /&gt;                return false;&lt;br /&gt;        } else if (!email.equals(other.email))&lt;br /&gt;            return false;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Order.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package factory;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;public class Order implements Serializable {&lt;br /&gt;&lt;br /&gt;    private int orderId;&lt;br /&gt;    private Customer customer;&lt;br /&gt;    private String sku;&lt;br /&gt;    private Date createdOn;&lt;br /&gt;    private Date updatedOn;&lt;br /&gt;    private int status;&lt;br /&gt;    &lt;br /&gt;    public int getOrderId() {&lt;br /&gt;        return orderId;&lt;br /&gt;    }&lt;br /&gt;    public void setOrderId(int orderId) {&lt;br /&gt;        this.orderId = orderId;&lt;br /&gt;    }&lt;br /&gt;    public Customer getCustomer() {&lt;br /&gt;        return customer;&lt;br /&gt;    }&lt;br /&gt;    public void setCustomer(Customer customer) {&lt;br /&gt;        this.customer = customer;&lt;br /&gt;    }&lt;br /&gt;    public String getSku() {&lt;br /&gt;        return sku;&lt;br /&gt;    }&lt;br /&gt;    public void setSku(String sku) {&lt;br /&gt;        this.sku = sku;&lt;br /&gt;    }&lt;br /&gt;    public Date getCreatedOn() {&lt;br /&gt;        return createdOn;&lt;br /&gt;    }&lt;br /&gt;    public void setCreatedOn(Date createdOn) {&lt;br /&gt;        this.createdOn = createdOn;&lt;br /&gt;    }&lt;br /&gt;    public Date getUpdatedOn() {&lt;br /&gt;        return updatedOn;&lt;br /&gt;    }&lt;br /&gt;    public void setUpdatedOn(Date updatedOn) {&lt;br /&gt;        this.updatedOn = updatedOn;&lt;br /&gt;    }&lt;br /&gt;    public int getStatus() {&lt;br /&gt;        return status;&lt;br /&gt;    }&lt;br /&gt;    public void setStatus(int status) {&lt;br /&gt;        this.status = status;&lt;br /&gt;    }&lt;br /&gt;    @Override&lt;br /&gt;    public int hashCode() {&lt;br /&gt;        final int prime = 31;&lt;br /&gt;        int result = 1;&lt;br /&gt;        result = prime * result + ((sku == null) ? 0 : sku.hashCode());&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;    @Override&lt;br /&gt;    public boolean equals(Object obj) {&lt;br /&gt;        if (this == obj)&lt;br /&gt;            return true;&lt;br /&gt;        if (obj == null)&lt;br /&gt;            return false;&lt;br /&gt;        if (getClass() != obj.getClass())&lt;br /&gt;            return false;&lt;br /&gt;        Order other = (Order) obj;&lt;br /&gt;        if (sku == null) {&lt;br /&gt;            if (other.sku != null)&lt;br /&gt;                return false;&lt;br /&gt;        } else if (!sku.equals(other.sku))&lt;br /&gt;            return false;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;DomainObjMgmt.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package factory;&lt;br /&gt;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;public class DomainObjMgmt {&lt;br /&gt;    public static Object create(String which){&lt;br /&gt;        Object obj = null;&lt;br /&gt;        if (which.equalsIgnoreCase(&amp;quot;customer&amp;quot;)) {&lt;br /&gt;            Customer customer = new Customer();&lt;br /&gt;            customer.setFirstName(&amp;quot;firstName&amp;quot;);&lt;br /&gt;            customer.setLastName(&amp;quot;lastName&amp;quot;);&lt;br /&gt;            customer.setAddress(&amp;quot;address&amp;quot;);&lt;br /&gt;            customer.setCity(&amp;quot;city&amp;quot;);&lt;br /&gt;            customer.setPostalCode(&amp;quot;postalCode&amp;quot;);&lt;br /&gt;            customer.setWorkPhone(&amp;quot;workPhone&amp;quot;);&lt;br /&gt;            customer.setHomePhone(&amp;quot;homePhone&amp;quot;);&lt;br /&gt;            customer.setCellPhone(&amp;quot;cellPhone&amp;quot;);&lt;br /&gt;            customer.setEmail(&amp;quot;email&amp;quot;);&lt;br /&gt;            customer.setCreatedOn(new Date());&lt;br /&gt;            customer.setUpdatedOn(new Date());&lt;br /&gt;            obj = customer;&lt;br /&gt;            System.out.println(&amp;quot;Creating a customer, done.&amp;quot;);&lt;br /&gt;        }else if(which.equalsIgnoreCase(&amp;quot;order&amp;quot;)){&lt;br /&gt;            Order order = new Order();&lt;br /&gt;            order.setSku(&amp;quot;sku&amp;quot;);&lt;br /&gt;            order.setCreatedOn(new Date());&lt;br /&gt;            order.setUpdatedOn(new Date());&lt;br /&gt;            obj = order;&lt;br /&gt;            System.out.println(&amp;quot;Creating an order, done.&amp;quot;);&lt;br /&gt;        }else{&lt;br /&gt;            obj = null;&lt;br /&gt;            System.out.println(&amp;quot;Could not create this object&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;        return obj;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;FactoryTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package factory;&lt;br /&gt;&lt;br /&gt;public class FactoryTest {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        Customer customer = (Customer)DomainObjMgmt.create(&amp;quot;customer&amp;quot;); &lt;br /&gt;        Order order = (Order)DomainObjMgmt.create(&amp;quot;order&amp;quot;); &lt;br /&gt;        DomainObjMgmt.create(&amp;quot;advisor&amp;quot;); &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/factory.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-7837900862875761399?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/7837900862875761399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2008/12/java-pattern-factory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/7837900862875761399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/7837900862875761399'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2008/12/java-pattern-factory.html' title='Sample of Java Pattern -- Factory'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-5026821970194867909</id><published>2008-12-22T13:40:00.000-08:00</published><updated>2009-03-18T22:08:57.439-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='observer'/><title type='text'>Sample of Java Pattern -- Observer</title><content type='html'>Appointment.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package observer;&lt;br /&gt;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.Observable;&lt;br /&gt;&lt;br /&gt;public class Appointment extends Observable {&lt;br /&gt;    private String host;&lt;br /&gt;    private String guest;&lt;br /&gt;    private Date appointmentDate;&lt;br /&gt;    private int status;&lt;br /&gt;    &lt;br /&gt;    public Appointment(){}&lt;br /&gt;    &lt;br /&gt;    public String getHost() {&lt;br /&gt;        return host;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getGuest() {&lt;br /&gt;        return guest;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Date getAppointmentDate() {&lt;br /&gt;        return appointmentDate;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public int getStatus() {&lt;br /&gt;        return status;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void createAppointment(String host, String guest, Date appointmentDate){&lt;br /&gt;        this.host = host;&lt;br /&gt;        this.guest = guest;&lt;br /&gt;        this.appointmentDate = appointmentDate;&lt;br /&gt;        this.status = 0;&lt;br /&gt;        setChanged();&lt;br /&gt;        this.notifyObservers(this);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void cancelAppointment(String host, String guest, Date appointmentDate){&lt;br /&gt;        if(this.host != null &amp;amp;&amp;amp; this.guest != null &amp;amp;&amp;amp; this.appointmentDate != null &amp;amp;&amp;amp; this.status != 1){&lt;br /&gt;            this.status = 1;&lt;br /&gt;            setChanged();&lt;br /&gt;            this.notifyObservers(this);&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;EmailService.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package observer;&lt;br /&gt;&lt;br /&gt;import java.util.Observable;&lt;br /&gt;import java.util.Observer;&lt;br /&gt;&lt;br /&gt;public class EmailService implements Observer {&lt;br /&gt;    private Observable observable;&lt;br /&gt;    &lt;br /&gt;    public EmailService(Observable observable){&lt;br /&gt;        this.observable = observable;&lt;br /&gt;        observable.addObserver(this);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void update(Observable o, Object arg) {&lt;br /&gt;        if(arg instanceof Appointment){&lt;br /&gt;            Appointment appointment = (Appointment)arg;&lt;br /&gt;            if(appointment.getStatus() ==0)&lt;br /&gt;                System.out.println(&amp;quot;send a creation email to host and guest&amp;quot;);&lt;br /&gt;            else&lt;br /&gt;                System.out.println(&amp;quot;send a cancellation email to host and guest&amp;quot;);&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;SMSService.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package observer;&lt;br /&gt;&lt;br /&gt;import java.util.Observable;&lt;br /&gt;import java.util.Observer;&lt;br /&gt;&lt;br /&gt;public class SMSService implements Observer {&lt;br /&gt;    private Observable observable;&lt;br /&gt;    &lt;br /&gt;    public SMSService(Observable observable){&lt;br /&gt;        this.observable = observable;&lt;br /&gt;        observable.addObserver(this);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void update(Observable o, Object arg) {&lt;br /&gt;        if(arg instanceof Appointment){&lt;br /&gt;            Appointment appointment = (Appointment)arg;&lt;br /&gt;            if(appointment.getStatus() ==0)&lt;br /&gt;                System.out.println(&amp;quot;send a creation sms to host and guest&amp;quot;);&lt;br /&gt;            else&lt;br /&gt;                System.out.println(&amp;quot;send a cancellation sms to host and guest&amp;quot;);&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;ObserverTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package observer;&lt;br /&gt;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;public class ObserverTest {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        Appointment appointment = new Appointment();&lt;br /&gt;        EmailService emailService = new EmailService(appointment);&lt;br /&gt;        SMSService smsService = new SMSService(appointment);&lt;br /&gt;        String host =&amp;quot;&amp;quot;;&lt;br /&gt;        String guest =&amp;quot;&amp;quot;;&lt;br /&gt;        Date appointmentDate = new Date();&lt;br /&gt;        appointment.createAppointment(host, guest, appointmentDate);&lt;br /&gt;        appointment.cancelAppointment(host, guest, appointmentDate);&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;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/observer.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-5026821970194867909?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/5026821970194867909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2008/12/design-pattern-decorator.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/5026821970194867909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/5026821970194867909'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2008/12/design-pattern-decorator.html' title='Sample of Java Pattern -- Observer'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-6166127971368242987</id><published>2008-12-15T10:46:00.000-08:00</published><updated>2009-04-24T14:02:33.108-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='strategy'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><title type='text'>sample of Java Pattern -- Strategy</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Intent&lt;/span&gt;&lt;br /&gt;Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Type&lt;/span&gt;&lt;br /&gt;Object Behavioral&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Solution&lt;/span&gt;&lt;br /&gt;The Strategy Pattern is one of the less complex patterns defined by the Gang of Four. The Strategy Pattern first identifies the behaviors or algorithms that vary and separate them from the system that stays the same. These behaviors or algorithms are encapsulated in classes that implement a common interface. This enables the developer to program to an interface and not an implementation. The different algorithms are encapsulated in a concrete class (ConcreteStrategy). Each of these objects are referenced by classes (Context) through the common interface (Strategy).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Class Diagram Example&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nBJ3Bqxx7wg/SfInWdk-6dI/AAAAAAAAAFY/twV0ln59BSw/s1600-h/Strategy.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 184px;" src="http://4.bp.blogspot.com/_nBJ3Bqxx7wg/SfInWdk-6dI/AAAAAAAAAFY/twV0ln59BSw/s400/Strategy.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5328364575983069650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Java Sample Code&lt;/span&gt;&lt;br /&gt;EmailService.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package strategy;&lt;br /&gt;&lt;br /&gt;public interface EmailService {&lt;br /&gt;    public void send(String[] recipients, String subject, String message, String from);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;GeneralEmailServiceImpl.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package strategy;&lt;br /&gt;&lt;br /&gt;import java.util.Properties;&lt;br /&gt;&lt;br /&gt;import javax.mail.Authenticator;&lt;br /&gt;import javax.mail.Message;&lt;br /&gt;import javax.mail.MessagingException;&lt;br /&gt;import javax.mail.PasswordAuthentication;&lt;br /&gt;import javax.mail.Session;&lt;br /&gt;import javax.mail.Transport;&lt;br /&gt;import javax.mail.internet.InternetAddress;&lt;br /&gt;import javax.mail.internet.MimeMessage;&lt;br /&gt;&lt;br /&gt;public class GeneralEmailServiceImpl implements EmailService {&lt;br /&gt;    private String smtpHostName;&lt;br /&gt;    private String smtpPort;&lt;br /&gt;    private String smtpAuthUser;&lt;br /&gt;    private String smtpAuthPwd;&lt;br /&gt;    &lt;br /&gt;    public String getSmtpHostName() {&lt;br /&gt;        return smtpHostName;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getSmtpPort() {&lt;br /&gt;        return smtpPort;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getSmtpAuthUser() {&lt;br /&gt;        return smtpAuthUser;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getSmtpAuthPwd() {&lt;br /&gt;        return smtpAuthPwd;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public GeneralEmailServiceImpl(String smtpHostName, String smtpPort, String smtpAuthUser, String smtpAuthPwd){&lt;br /&gt;        this.smtpHostName = smtpHostName;&lt;br /&gt;        this.smtpPort = smtpPort;&lt;br /&gt;        this.smtpAuthUser = smtpAuthUser;&lt;br /&gt;        this.smtpAuthPwd = smtpAuthPwd;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void send(String[] recipients, String subject, String message, String from) {&lt;br /&gt;        boolean debug = false;&lt;br /&gt;&lt;br /&gt;        Properties props = new Properties();&lt;br /&gt;        props.setProperty(&amp;quot;mail.transport.protocol&amp;quot;, &amp;quot;smtp&amp;quot;);&lt;br /&gt;        props.setProperty(&amp;quot;mail.host&amp;quot;, getSmtpHostName());&lt;br /&gt;        props.put(&amp;quot;mail.smtp.auth&amp;quot;, &amp;quot;true&amp;quot;);&lt;br /&gt;        props.put(&amp;quot;mail.smtp.port&amp;quot;, getSmtpPort());&lt;br /&gt;        props.setProperty(&amp;quot;mail.smtp.quitwait&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;&lt;br /&gt;        Authenticator auth = new SMTPAuthenticator();&lt;br /&gt;        Session session = Session.getDefaultInstance(props, auth);&lt;br /&gt;&lt;br /&gt;        session.setDebug(debug);&lt;br /&gt;&lt;br /&gt;        MimeMessage msg = new MimeMessage(session);&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            InternetAddress addressFrom = new InternetAddress(from);&lt;br /&gt;            msg.setFrom(addressFrom);&lt;br /&gt;&lt;br /&gt;            InternetAddress[] addressTo = new InternetAddress[recipients.length];&lt;br /&gt;            for (int i = 0; i &amp;lt; recipients.length; i++) {&lt;br /&gt;                addressTo[i] = new InternetAddress(recipients[i]);&lt;br /&gt;            }&lt;br /&gt;            msg.setRecipients(Message.RecipientType.TO, addressTo);&lt;br /&gt;&lt;br /&gt;            msg.setSubject(subject);&lt;br /&gt;            msg.setContent(message, &amp;quot;text/html&amp;quot;);&lt;br /&gt;            Transport.send(msg);&lt;br /&gt;        } catch (MessagingException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private class SMTPAuthenticator extends javax.mail.Authenticator {&lt;br /&gt;        public PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;            String username = getSmtpAuthUser();&lt;br /&gt;            String password = getSmtpAuthPwd();&lt;br /&gt;            return new PasswordAuthentication(username, password);&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;GoogleEmailServiceImpl.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package strategy;&lt;br /&gt;&lt;br /&gt;import java.security.Security;&lt;br /&gt;import java.util.Properties;&lt;br /&gt;&lt;br /&gt;import javax.mail.Authenticator;&lt;br /&gt;import javax.mail.Message;&lt;br /&gt;import javax.mail.MessagingException;&lt;br /&gt;import javax.mail.PasswordAuthentication;&lt;br /&gt;import javax.mail.Session;&lt;br /&gt;import javax.mail.Transport;&lt;br /&gt;import javax.mail.internet.InternetAddress;&lt;br /&gt;import javax.mail.internet.MimeMessage;&lt;br /&gt;&lt;br /&gt;public class GoogleEmailServiceImpl implements EmailService {&lt;br /&gt;    private String smtpHostName;&lt;br /&gt;    private String smtpPort;&lt;br /&gt;    private String smtpAuthUser;&lt;br /&gt;    private String smtpAuthPwd;&lt;br /&gt;    &lt;br /&gt;    public String getSmtpHostName() {&lt;br /&gt;        return smtpHostName;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getSmtpPort() {&lt;br /&gt;        return smtpPort;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getSmtpAuthUser() {&lt;br /&gt;        return smtpAuthUser;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getSmtpAuthPwd() {&lt;br /&gt;        return smtpAuthPwd;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public GoogleEmailServiceImpl(String smtpHostName, String smtpPort, String smtpAuthUser, String smtpAuthPwd){&lt;br /&gt;        this.smtpHostName = smtpHostName;&lt;br /&gt;        this.smtpPort = smtpPort;&lt;br /&gt;        this.smtpAuthUser = smtpAuthUser;&lt;br /&gt;        this.smtpAuthPwd = smtpAuthPwd;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void send(String[] recipients, String subject, String message, String from) {&lt;br /&gt;        boolean debug = false;&lt;br /&gt;&lt;br /&gt;        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());&lt;br /&gt;&lt;br /&gt;        Properties props = new Properties();&lt;br /&gt;        props.setProperty(&amp;quot;mail.transport.protocol&amp;quot;, &amp;quot;smtp&amp;quot;);&lt;br /&gt;        props.setProperty(&amp;quot;mail.host&amp;quot;, getSmtpHostName());&lt;br /&gt;        props.put(&amp;quot;mail.smtp.auth&amp;quot;, &amp;quot;true&amp;quot;);&lt;br /&gt;        props.put(&amp;quot;mail.smtp.port&amp;quot;, getSmtpPort());&lt;br /&gt;        props.setProperty(&amp;quot;mail.smtp.quitwait&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;        props.put(&amp;quot;mail.smtp.socketFactory.port&amp;quot;, getSmtpPort());&lt;br /&gt;        props.put(&amp;quot;mail.smtp.socketFactory.class&amp;quot;,&amp;quot;javax.net.ssl.SSLSocketFactory&amp;quot;);&lt;br /&gt;        props.put(&amp;quot;mail.smtp.socketFactory.fallback&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;&lt;br /&gt;        Authenticator auth = new SMTPAuthenticator();&lt;br /&gt;        Session session = Session.getDefaultInstance(props, auth);&lt;br /&gt;&lt;br /&gt;        session.setDebug(debug);&lt;br /&gt;&lt;br /&gt;        MimeMessage msg = new MimeMessage(session);&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            InternetAddress addressFrom = new InternetAddress(from);&lt;br /&gt;            msg.setFrom(addressFrom);&lt;br /&gt;&lt;br /&gt;            InternetAddress[] addressTo = new InternetAddress[recipients.length];&lt;br /&gt;            for (int i = 0; i &amp;lt; recipients.length; i++) {&lt;br /&gt;                addressTo[i] = new InternetAddress(recipients[i]);&lt;br /&gt;            }&lt;br /&gt;            msg.setRecipients(Message.RecipientType.TO, addressTo);&lt;br /&gt;&lt;br /&gt;            msg.setSubject(subject);&lt;br /&gt;            msg.setContent(message, &amp;quot;text/html&amp;quot;);&lt;br /&gt;            Transport.send(msg);&lt;br /&gt;        } catch (MessagingException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private class SMTPAuthenticator extends javax.mail.Authenticator {&lt;br /&gt;        public PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;            String username = getSmtpAuthUser();&lt;br /&gt;            String password = getSmtpAuthPwd();&lt;br /&gt;            return new PasswordAuthentication(username, password);&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;EmailServiceSelectorTest.java&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package strategy;&lt;br /&gt;&lt;br /&gt;public class EmailServiceSelectorTest {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        String smtpHostName = &amp;quot;&amp;quot;;&lt;br /&gt;        String smtpPort = &amp;quot;&amp;quot;;&lt;br /&gt;        String smtpAuthUser = &amp;quot;&amp;quot;;&lt;br /&gt;        String smtpAuthPwd = &amp;quot;&amp;quot;;&lt;br /&gt;        String[] recipients = {&amp;quot;&amp;quot;}; &lt;br /&gt;        String subject = &amp;quot;&amp;quot;;&lt;br /&gt;        String message = &amp;quot;&amp;quot;;&lt;br /&gt;        String from = &amp;quot;&amp;quot;;&lt;br /&gt;        GoogleEmailServiceImpl googleEmailServiceImpl = new GoogleEmailServiceImpl(smtpHostName, smtpPort, smtpAuthUser, smtpAuthPwd);&lt;br /&gt;        GeneralEmailServiceImpl generalEmailServiceImpl = new GeneralEmailServiceImpl(smtpHostName, smtpPort, smtpAuthUser, smtpAuthPwd);&lt;br /&gt;        googleEmailServiceImpl.send(recipients, subject, message, from);&lt;br /&gt;        generalEmailServiceImpl.send(recipients, subject, message, from);&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;you may download the &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/strategy.rar"&gt;source code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-6166127971368242987?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/6166127971368242987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2008/12/java-pattern-strategy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/6166127971368242987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/6166127971368242987'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2008/12/java-pattern-strategy.html' title='sample of Java Pattern -- Strategy'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_nBJ3Bqxx7wg/SfInWdk-6dI/AAAAAAAAAFY/twV0ln59BSw/s72-c/Strategy.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-6349879902700574209</id><published>2008-11-28T19:46:00.001-08:00</published><updated>2009-01-28T18:38:26.368-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blazeds'/><title type='text'>Blazeds Configuration under Http and Https</title><content type='html'>1. visitor --&gt; Flex app on Apache/IIS (Https) --&gt; Backend system on Tomcat/JBoss(Http)&lt;br /&gt;service-config.xml:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;channel-definition &lt;br /&gt;  id=&amp;quot;my-amf-secure&amp;quot; &lt;br /&gt;  class=&amp;quot;mx.messaging.channels.SecureAMFChannel&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;endpoint &lt;br /&gt;  uri=&amp;quot;https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure&amp;quot; &lt;br /&gt;  class=&amp;quot;flex.messaging.endpoints.AMFEndpoint &amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;&amp;lt;add-no-cache-headers&amp;gt;false&amp;lt;/add-no-cache-headers&amp;gt;&lt;br /&gt;&amp;lt;/properties&amp;gt;&lt;br /&gt;&amp;lt;/channel-definition&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2. visitor --&gt; Flex app on Apache/IIS (Http) --&gt; Backend system on Tomcat/JBoss(Https)&lt;br /&gt;service-config.xml:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;channel-definition &lt;br /&gt;  id=&amp;quot;my-amf&amp;quot; &lt;br /&gt;  class=&amp;quot;mx.messaging.channels.SecureAMFChannel&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;endpoint &lt;br /&gt;  uri=&amp;quot;https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure&amp;quot; &lt;br /&gt;  class=&amp;quot;flex.messaging.endpoints.SecureAMFEndpoint&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;&amp;lt;add-no-cache-headers&amp;gt;false&amp;lt;/add-no-cache-headers&amp;gt;&lt;br /&gt;&amp;lt;/properties&amp;gt;&lt;br /&gt;&amp;lt;/channel-definition&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-6349879902700574209?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/6349879902700574209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2008/11/blazeds-configuration-under-http-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/6349879902700574209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/6349879902700574209'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2008/11/blazeds-configuration-under-http-and.html' title='Blazeds Configuration under Http and Https'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-1001694598935517100</id><published>2008-11-25T20:08:00.000-08:00</published><updated>2009-01-26T18:29:48.283-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blazeds'/><title type='text'>Bind Java Object to Flex Object</title><content type='html'>To represent a server-side Java object in a client application, you use the [RemoteClass(alias=" ")] metadata tag to create an ActionScript object that maps directly to the Java object. You specify the fully qualified class name of the Java class as the value of alias. This is the same technique that you use to map to Java objects when using RemoteObject components.&lt;br /&gt;&lt;br /&gt;You can use the [RemoteClass] metadata tag without an alias if you do not map to a Java object on the server, but you do send back your object type from the server. Your ActionScript object is serialized to a Map object when it is sent to the server, but the object returned from the server to the clients is your original ActionScript type.&lt;br /&gt;&lt;br /&gt;1. write a bindable class and attach the [RemoteClass] tag.&lt;br /&gt;2. use this class in your main flex code.&lt;br /&gt;&lt;br /&gt;sample code:&lt;br /&gt;&lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/blazeds-rc-server-tutorial.rar"&gt;blazeds-rc-server-tutorial.rar&lt;/a&gt; and &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/blazeds-rc-client-tutorial.rar"&gt;blazeds-rc-client-tutorial.rar&lt;/a&gt; , enjoy it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-1001694598935517100?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/1001694598935517100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2008/11/bind-java-object-to-flex-object.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1001694598935517100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/1001694598935517100'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2008/11/bind-java-object-to-flex-object.html' title='Bind Java Object to Flex Object'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-8927989101768454007</id><published>2008-11-17T22:10:00.001-08:00</published><updated>2009-01-25T15:04:30.577-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blazeds'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Integrated BlazeDS with Spring Framework</title><content type='html'>Spring is one of the most popular Java frameworks. The foundation of the Spring framework is a lightweight component container that implements the Inversion of Control (IoC) pattern.&lt;br /&gt;Using an IoC container, components don't instantiate or even look up their dependencies (the objects they work with). The container is responsible for injecting those dependencies when it creates the components (hence the term "Dependency Injection" also used to describe this pattern).&lt;br /&gt;The result is looser coupling between components. The Spring IoC container has proven to be a solid foundation for building robust enterprise applications. The components managed by the Spring IoC container are called Spring beans.&lt;br /&gt;&lt;br /&gt;step by step:&lt;br /&gt;&lt;br /&gt;1. Follow &lt;a href="http://futureyard.blogspot.com/2008/11/build-java-flex-application-based-on.html"&gt;this article&lt;/a&gt; to create a basic blazeds-based java project.&lt;br /&gt;2. Download &lt;a href="http://www.springframework.org/download"&gt;spring framework&lt;/a&gt; and put the spring.jar into the blazeds-based java project.&lt;br /&gt;3. Download &lt;a href="http://download.macromedia.com/pub/developer/flex_spring.zip"&gt;flex-spring.zip&lt;/a&gt; and unzip it and put the SpringFactory.java to your source code folder. don't fotget to adjust the package name according to your package path.&lt;br /&gt;4. Register the Spring factory on your services-config.xml.&lt;br /&gt;5. Create  applicationContext.xml in /WEB-INF and register Spring beans.&lt;br /&gt;6. Update your remoting-config.xml.&lt;br /&gt;7. Update your web.xml.&lt;br /&gt;8. Create your flex app and new remoteObject to call java module.&lt;br /&gt;&lt;br /&gt;For another new way to integrate spring to blazeds, pls go to &lt;a href="http://blog.springsource.com/2008/12/17/using-spring-blazeds-integration-m1/"&gt;Using Spring BlazeDS Integration 1.0.0.M1&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;sample code:&lt;br /&gt;&lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/blazeds%7C_spring%7C_server%7C_tutorial.rar"&gt;blazeds-spring-server-tutorial.rar&lt;/a&gt; and &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/blazeds-spring-client-tutorial.rar"&gt;blazeds-spring-client-tutorial.rar&lt;/a&gt; , enjoy it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-8927989101768454007?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/8927989101768454007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2008/11/integrated-blazeds-with-spring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/8927989101768454007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/8927989101768454007'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2008/11/integrated-blazeds-with-spring.html' title='Integrated BlazeDS with Spring Framework'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1142858050650538817.post-5353539165739857862</id><published>2008-11-09T19:57:00.000-08:00</published><updated>2009-01-24T22:41:24.210-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='blazeds'/><title type='text'>Build a Java-Flex Application Based on BlazeDS</title><content type='html'>BlazeDS is the server-based Java remoting and web messaging technology that enables developers to easily connect to back-end distributed data and push data in real-time to Adobe® Flex® and Adobe AIR™ applications for more responsive rich Internet application (RIA) experiences.&lt;br /&gt;&lt;br /&gt;Follow these steps to get started with BlazeDS:&lt;br /&gt;&lt;br /&gt;1. Ensure any &lt;strong style="font-weight: normal;"&gt;necessary &lt;/strong&gt;software and configuration item work properly on your computer.  For instance, jdk, a java application server( tomcat, jboss, weblogic... ) that BlazeDS support.&lt;br /&gt;2. &lt;a href="http://opensource.adobe.com/wiki/display/blazeds/Downloads" title="Downloads"&gt;Download&lt;/a&gt; and save BlazeDS to your computer.&lt;br /&gt;3. Create a new web-project in eclipse.&lt;br /&gt;3. Unzip balzeds.war, and copy folder /WEB-INF to your /WEB-INF folder.&lt;br /&gt;4. Create a balzeds remote call interface file, I create and name it WeatherService.&lt;br /&gt;5. Edit remoteing-config.xml, add your destination item.&lt;br /&gt;&lt;code&gt;&lt;/code&gt;6. Create your flex application, and new a remoteObject to call java function above.&lt;br /&gt;&lt;br /&gt;sample code:&lt;br /&gt;&lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/blazeds-client-tutorial.rar"&gt;blazeds-client-tutorial.rar&lt;/a&gt; and &lt;a href="http://cid-5e7ff59e5bb5fd9d.skydrive.live.com/self.aspx/.Public/blazeds-server-tutorial.rar"&gt;blazeds-server-tutorial.rar&lt;/a&gt; , enjoy it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1142858050650538817-5353539165739857862?l=futureyard.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://futureyard.blogspot.com/feeds/5353539165739857862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://futureyard.blogspot.com/2008/11/build-java-flex-application-based-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/5353539165739857862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1142858050650538817/posts/default/5353539165739857862'/><link rel='alternate' type='text/html' href='http://futureyard.blogspot.com/2008/11/build-java-flex-application-based-on.html' title='Build a Java-Flex Application Based on BlazeDS'/><author><name>Henry</name><uri>http://www.blogger.com/profile/13155439771356246166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_nBJ3Bqxx7wg/Smt4qGs7XaI/AAAAAAAAAGU/yxq1Ei76FJc/S220/fy.jpg'/></author><thr:total>0</thr:total></entry></feed>
