<?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-8559058673267774097</id><updated>2012-02-17T10:42:30.537+09:00</updated><category term='UNIX'/><category term='Redmine'/><category term='Tuning'/><category term='JBoss'/><category term='MySQL'/><category term='SQL'/><category term='vi'/><category term='Java EE'/><category term='Hibernate'/><category term='HSQLDB'/><category term='XML'/><category term='SQLite'/><category term='Windows'/><category term='Security'/><category term='Log4j'/><category term='Oracle'/><category term='WebSphere'/><category term='Microsoft SQL Server'/><category term='H2'/><category term='Programming'/><category term='misc'/><category term='Regex'/><category term='Tomcat'/><category term='P6Spy'/><category term='PostgreSQL'/><category term='Maven'/><category term='DB2'/><category term='Eclipse'/><category term='Java SE'/><category term='JForum'/><category term='iBATIS'/><category term='Spring'/><category term='HTML/CSS'/><category term='JavaScript'/><category term='J2EE'/><category term='Ant'/><category term='DbUnit'/><title type='text'>Thirdstage's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3633398629908629966</id><published>2011-11-22T20:07:00.004+09:00</published><updated>2011-11-22T20:14:52.878+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><title type='text'>Exception Handling of EJB</title><content type='html'>&lt;h4&gt;EJB 2.1&lt;/h4&gt;
&lt;p align='right'&gt;&lt;i&gt;from Chapter 18. Exception Handling of Enterprise JavaBeans Specification Version 2.1&lt;/i&gt;&lt;/p&gt;

&lt;h5&gt;Exceptions from a Session or Entity Bean’s Business Methods&lt;/h5&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-JO_Wm77nOzQ/TsuBe67MszI/AAAAAAAAAag/dri1CfxOKmE/s1600/exception-handling-ebj-2-1-part1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 900px; " src="http://1.bp.blogspot.com/-JO_Wm77nOzQ/TsuBe67MszI/AAAAAAAAAag/dri1CfxOKmE/exception-handling-ebj-2-1-part1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5677774123444253490" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-UmLJvKMA3HI/TsuCzukrpHI/AAAAAAAAAas/I26pYeghCqg/s1600/exception-handling-ebj-2-1-part2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 900px;" src="http://3.bp.blogspot.com/-UmLJvKMA3HI/TsuCzukrpHI/AAAAAAAAAas/I26pYeghCqg/exception-handling-ebj-2-1-part2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5677775580417467506" /&gt;&lt;/a&gt;


&lt;h4&gt;EJB 3.0&lt;/h4&gt;
&lt;p align='right'&gt;&lt;i&gt;from Chapter 14. Exception Handling of Enterprise JavaBeans Specification Version 3.0&lt;/i&gt;&lt;/p&gt;

&lt;h5&gt;Exceptions from a Session Bean’s Business Interface Methods&lt;/h5&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-PY2iGPmrgPA/TsuC7f1JqWI/AAAAAAAAAa4/pl-umbQjOxE/s1600/exception-handling-ebj-3-0-part1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 900px;" src="http://4.bp.blogspot.com/-PY2iGPmrgPA/TsuC7f1JqWI/AAAAAAAAAa4/pl-umbQjOxE/exception-handling-ebj-3-0-part1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5677775713898965346" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-MqjYsNqnjq0/TsuDJkysivI/AAAAAAAAAbE/WlwJeemXIgY/s1600/exception-handling-ebj-3-0-part2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 900px;" src="http://4.bp.blogspot.com/-MqjYsNqnjq0/TsuDJkysivI/AAAAAAAAAbE/WlwJeemXIgY/exception-handling-ebj-3-0-part2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5677775955749014258" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-fXNy4LHpzsE/TsuDJ29ZGYI/AAAAAAAAAbU/uNKi_DbXRYk/s1600/exception-handling-ebj-3-0-part3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 900px; " src="http://2.bp.blogspot.com/-fXNy4LHpzsE/TsuDJ29ZGYI/AAAAAAAAAbU/uNKi_DbXRYk/exception-handling-ebj-3-0-part3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5677775960625715586" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-3633398629908629966?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3633398629908629966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/11/exception-handling-of-ejb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3633398629908629966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3633398629908629966'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/11/exception-handling-of-ejb.html' title='Exception Handling of EJB'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-JO_Wm77nOzQ/TsuBe67MszI/AAAAAAAAAag/dri1CfxOKmE/s72-c/exception-handling-ebj-2-1-part1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-6904597448323532536</id><published>2011-10-20T21:05:00.014+09:00</published><updated>2011-10-21T11:01:21.037+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Redmine'/><title type='text'>Using SyntaxHighlighter in Redmine</title><content type='html'>&lt;p&gt;
&lt;strong&gt;&lt;code&gt;Redmine&lt;/code&gt;&lt;/strong&gt; provides built-in syntax highlighting based on &lt;strong&gt;&lt;code&gt;CodeRay&lt;/code&gt;&lt;/strong&gt; (for this, refer &lt;a target="_blank" href="http://www.redmine.org/projects/redmine/wiki/RedmineTextFormatting#Code-highlighting"&gt;here&lt;/a&gt;).
But it is not so much powerful as leading libraries such as &lt;strong&gt;&lt;code&gt;SyntaxHighlighter&lt;/code&gt;&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
You can use SyntaxHighlighter with Redmine by simply modifying one template file in the Redmine.
The file to modify, &lt;strong&gt;&lt;code&gt;base.rhtml&lt;/code&gt;&lt;/strong&gt; is a template file specifying the layout of most pages and located at the following position.
&lt;p&gt;
&lt;script type="syntaxhighlighter" class="brush:plain"&gt;&lt;![CDATA[
${redmine.home}/app/views/layouts/base.rhtml
]]&gt;&lt;/script&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;p&gt;
The default contents of &lt;code&gt;base.rhtml&lt;/code&gt; is like followings.
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:xhtml"&gt;&lt;![CDATA[
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"&gt;
&lt;head&gt;
&lt;meta http-equiv="content-type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;&lt;%=h html_title %&gt;&lt;/title&gt;
&lt;meta name="description" content="&lt;%= Redmine::Info.app_name %&gt;" /&gt;
&lt;meta name="keywords" content="issue,bug,tracker" /&gt;
&lt;%= csrf_meta_tag %&gt;
&lt;%= favicon %&gt;
&lt;%= stylesheet_link_tag 'application', :media =&gt; 'all' %&gt;
&lt;%= stylesheet_link_tag 'rtl', :media =&gt; 'all' if l(:direction) == 'rtl' %&gt;
&lt;%= javascript_heads %&gt;
&lt;%= heads_for_theme %&gt;
&lt;!--[if IE 6]&gt;
    &lt;style type="text/css"&gt;
      * html body{ width: expression( document.documentElement.clientWidth &lt; 900 ? '900px' : '100%' ); }
      body {behavior: url(&lt;%= stylesheet_path "csshover.htc" %&gt;);}
    &lt;/style&gt;
&lt;![endif]--&gt;
&lt;%= call_hook :view_layouts_base_html_head %&gt;
&lt;!-- page specific tags --&gt;
&lt;%= yield :header_tags -%&gt;
&lt;/head&gt;
&lt;body class="&lt;%=h body_css_classes %&gt;"&gt;

...

]]&gt;&lt;/script&gt;

&lt;br/&gt;

&lt;p&gt;
You can add a few header elements for styles and scripts to install SyntaxHighlighter like the following.
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:js;html-script:true;highlight:[14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]"&gt;&lt;![CDATA[
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"&gt;
&lt;head&gt;
&lt;meta http-equiv="content-type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;&lt;%=h html_title %&gt;&lt;/title&gt;
&lt;meta name="description" content="&lt;%= Redmine::Info.app_name %&gt;" /&gt;
&lt;meta name="keywords" content="issue,bug,tracker" /&gt;
&lt;%= csrf_meta_tag %&gt;
&lt;%= favicon %&gt;
&lt;%= stylesheet_link_tag 'application', :media =&gt; 'all' %&gt;
&lt;%= stylesheet_link_tag 'rtl', :media =&gt; 'all' if l(:direction) == 'rtl' %&gt;
&lt;%= javascript_heads %&gt;

&lt;!-- custom header elements to enable SyntaxHighlighter(http://alexgorbatchev.com/SyntaxHighlighter/) --&gt;
&lt;link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/&gt;
&lt;link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/&gt;
&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/&gt;
&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/&gt;
&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/&gt;
&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/&gt;
&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/&gt;
&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/&gt;
&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/&gt;
&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/&gt;
&lt;script type='text/javascript'&gt;
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
&amp;lt;/script&gt;
&lt;!-- end of custom header elements --&gt;

&lt;%= heads_for_theme %&gt;
&lt;!--[if IE 6]&gt;
    &lt;style type="text/css"&gt;
      * html body{ width: expression( document.documentElement.clientWidth &lt; 900 ? '900px' : '100%' ); }
      body {behavior: url(&lt;%= stylesheet_path "csshover.htc" %&gt;);}
    &lt;/style&gt;
&lt;![endif]--&gt;
&lt;%= call_hook :view_layouts_base_html_head %&gt;
&lt;!-- page specific tags --&gt;
&lt;%= yield :header_tags -%&gt;
&lt;/head&gt;
&lt;body class="&lt;%=h body_css_classes %&gt;"&gt;

...

]]&gt;&lt;/script&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;p&gt;
You should restart Redmine to apply the change of template. When loading Redmine using Apache HTTP server, just restart Apache HTTP server.
&lt;/p&gt;
&lt;p&gt;
For more about SyntaxHighlighter refer its homepage at &lt;a target="_blank" href="http://alexgorbatchev.com/SyntaxHighlighter/"&gt;http://alexgorbatchev.com/SyntaxHighlighter/&lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-6904597448323532536?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/6904597448323532536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/10/using-syntaxhighlighter-in-redmine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6904597448323532536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6904597448323532536'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/10/using-syntaxhighlighter-in-redmine.html' title='Using SyntaxHighlighter in Redmine'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-4539298482682699744</id><published>2011-10-13T14:55:00.022+09:00</published><updated>2012-01-17T11:34:25.834+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Guildelines for Multi-moduled Maven Project</title><content type='html'>&lt;h4&gt;Guildelines for Multi-moduled Maven Project&lt;/h4&gt;

&lt;h5&gt;Separate parent project from container project.&lt;/h5&gt;

&lt;h5&gt;Define properties in the parent POM file as possible.&lt;/h5&gt;

&lt;h5&gt;Define the following properties explicitly for clearness and control.&lt;/h5&gt;

  &lt;ul&gt;
    &lt;li&gt;Encoding related properties whose default value are dependent on platform.  &lt;/li&gt;
      &lt;ul type="circle"&gt;
        &lt;li&gt;&lt;code&gt;project.build.sourceEncoding&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;&lt;code&gt;project.reporting.outputEncoding&lt;/code&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;li&gt;Properties to skip situationally unnecessary long running goals.&lt;/li&gt;
      &lt;ul type="circle"&gt;
        &lt;li&gt;&lt;code&gt;skipTests&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;&lt;code&gt;maven.javadoc.skip&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;&lt;code&gt;maven.deploy.skip&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;&lt;code&gt;checkstyle.skip&lt;/code&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;li&gt;Properties to run maven more stable way.&lt;/li&gt;
      &lt;ul type="circle"&gt;
        &lt;li&gt;&lt;code&gt;dependency.locations.enabled&lt;/code&gt; : refer &lt;a target="_blank" href="http://whatiscomingtomyhead.wordpress.com/2011/04/20/if-your-maven-site-build-is-too-slow/"&gt;If your maven site build is too slow&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      &lt;li&gt;Paths for executable programs external to Maven&lt;/li&gt;
      &lt;ul type="circle"&gt;
        &lt;li&gt;&lt;code&gt;graphviz.home&lt;/code&gt;&lt;/li&gt;
      &lt;/ul&gt;
  &lt;/ul&gt;

&lt;h5&gt;Define all plugins in the &lt;code&gt;&amp;lt;pluginManagement&amp;gt;&lt;/code&gt; element of parent POM file.&lt;/h5&gt;

  &lt;ul&gt;
    &lt;li&gt;Don't specify &lt;strong&gt;&lt;code&gt;version&lt;/code&gt;&lt;/strong&gt; to &lt;code&gt;plugin&lt;/code&gt; definitions in child POM files.&lt;/li&gt;
  &lt;/ul&gt;

&lt;h5&gt;Define repositories in the parent POM file as possible.&lt;/h5&gt;

&lt;h5&gt;Define plugins to analyze or diagnose the sources or resources of the project as a reporting plugin as possible.&lt;/h5&gt;

&lt;h5&gt;Start values for path with &lt;strong&gt;&lt;code&gt;${project.basedir}&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;${project.build.directory}&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;${project.build.outputDirectory}&lt;/code&gt;&lt;/strong&gt; or so on&lt;/h5&gt;

  &lt;ul&gt;
    &lt;li&gt;When just specifying relative path such as 'target/classes', the result directory could be different if you build the project from the enclosing project in multi-module case.&lt;/li&gt;
    &lt;li&gt;If you specify the path with leading ${project.build.directory}, the resulting directory always would be one that is calculated with the current POM's project.&lt;/li&gt;
  &lt;/ul&gt;


&lt;h5&gt;Use resources in &lt;strong&gt;&lt;code&gt;target/classes&lt;/code&gt;&lt;/strong&gt; not in &lt;strong&gt;&lt;code&gt;src/main/resources&lt;/code&gt;&lt;/strong&gt;, considering resource filtering.&lt;/h5&gt;


&lt;h4&gt;Sample of Parent POM&lt;/h4&gt;

&lt;p&gt;This is the real sample of parent POM I am using.&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush:xml"&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;

   &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
   &lt;groupId&gt;nexcore.framework&lt;/groupId&gt;
   &lt;artifactId&gt;nexcore-framework-parent&lt;/artifactId&gt;
   &lt;version&gt;5.4.0-SNAPSHOT&lt;/version&gt;
   &lt;packaging&gt;pom&lt;/packaging&gt;

   &lt;name&gt;...&lt;/name&gt;
   &lt;url&gt;...&lt;/url&gt;
   &lt;inceptionYear&gt;2007&lt;/inceptionYear&gt;
   &lt;organization&gt;
      &lt;name&gt;...&lt;/name&gt;
      &lt;url&gt;...&lt;/url&gt;
   &lt;/organization&gt;

   &lt;prerequisites&gt;
      &lt;maven&gt;2.2.1&lt;/maven&gt;
   &lt;/prerequisites&gt;

   &lt;properties&gt;
      &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
      &lt;project.reporting.outputEncoding&gt;UTF-8&lt;/project.reporting.outputEncoding&gt;
      &lt;graphviz.home&gt;C:/Program Files/Graphviz 2.28&lt;/graphviz.home&gt;
      &lt;skipTests&gt;false&lt;/skipTests&gt;
      &lt;maven.deploy.skip&gt;true&lt;/maven.deploy.skip&gt;
      &lt;maven.javadoc.skip&gt;false&lt;/maven.javadoc.skip&gt;
      &lt;maven.site.deploy.skip&gt;true&lt;/maven.site.deploy.skip&gt;
      &lt;findbugs.skip&gt;true&lt;/findbugs.skip&gt;
      &lt;checkstyle.skip&gt;true&lt;/checkstyle.skip&gt;
      &lt;dependency.locations.enabled&gt;false&lt;/dependency.locations.enabled&gt;
      &lt;antrun.echos.properties&gt;true&lt;/antrun.echos.properties&gt;
      &lt;tagBase&gt;...&lt;/tagBase&gt;
      &lt;tagNameFormat&gt;@{project.artifactId}-@{project.version}&lt;/tagNameFormat&gt;
   &lt;/properties&gt;

   &lt;issueManagement&gt;
      &lt;system&gt;Redmine&lt;/system&gt;
      &lt;url&gt;...&lt;/url&gt;
   &lt;/issueManagement&gt;
   &lt;scm&gt;
      &lt;connection&gt;...&lt;/connection&gt;
      &lt;tag&gt;HEAD&lt;/tag&gt;
      &lt;url&gt;...&lt;/url&gt;
   &lt;/scm&gt;

   &lt;distributionManagement&gt;
      &lt;repository&gt;
         &lt;id&gt;...&lt;/id&gt;
         &lt;name&gt;Local release repository&lt;/name&gt;
         &lt;url&gt;http://localhost:8080/archiva/repository/internal/&lt;/url&gt;
      &lt;/repository&gt;
      &lt;snapshotRepository&gt;
         &lt;id&gt;...&lt;/id&gt;
         &lt;name&gt;Local snapshot repository&lt;/name&gt;
         &lt;url&gt;http://localhost:8080/archiva/repository/snapshots/&lt;/url&gt;
      &lt;/snapshotRepository&gt;
      &lt;site&gt;
         &lt;id&gt;...&lt;/id&gt;
         &lt;url&gt;sftp://.../${project.version}&lt;/url&gt;
      &lt;/site&gt;
   &lt;/distributionManagement&gt;

   &lt;repositories&gt;
      &lt;repository&gt;
         &lt;snapshots&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
         &lt;/snapshots&gt;
         &lt;id&gt;central2&lt;/id&gt;
         &lt;url&gt;http://repo2.maven.org/maven2/&lt;/url&gt;
      &lt;/repository&gt;
      &lt;repository&gt;
         &lt;snapshots&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
         &lt;/snapshots&gt;
         &lt;id&gt;maven2-repository.dev.java.net&lt;/id&gt;
         &lt;name&gt;Java.net Repository for Maven&lt;/name&gt;
         &lt;url&gt;http://download.java.net/maven/2/&lt;/url&gt;
      &lt;/repository&gt;
      &lt;repository&gt;
         &lt;snapshots&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
         &lt;/snapshots&gt;
         &lt;id&gt;thirdparty&lt;/id&gt;
         &lt;name&gt;3rd-party Repository&lt;/name&gt;
         &lt;url&gt;http://repo.expertvill.net/nexus/content/repositories/thirdparty&lt;/url&gt;
      &lt;/repository&gt;
      &lt;repository&gt;
         &lt;id&gt;evolvis-3rdparty&lt;/id&gt;
         &lt;url&gt;http://maven-repo.evolvis.org/3rdparty&lt;/url&gt;
      &lt;/repository&gt;
   &lt;/repositories&gt;
   &lt;pluginRepositories&gt;
      &lt;pluginRepository&gt;
         &lt;snapshots&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
         &lt;/snapshots&gt;
         &lt;id&gt;central2&lt;/id&gt;
         &lt;url&gt;http://repo2.maven.org/maven2/&lt;/url&gt;
      &lt;/pluginRepository&gt;
      &lt;pluginRepository&gt;
         &lt;snapshots&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
         &lt;/snapshots&gt;
         &lt;id&gt;mojo-release&lt;/id&gt;
         &lt;url&gt;http://repository.codehaus.org/&lt;/url&gt;
      &lt;/pluginRepository&gt;
      &lt;pluginRepository&gt;
         &lt;releases&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
         &lt;/releases&gt;
         &lt;snapshots&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
         &lt;/snapshots&gt;
         &lt;id&gt;mojo-snapshot&lt;/id&gt;
         &lt;url&gt;http://snapshots.repository.codehaus.org/&lt;/url&gt;
      &lt;/pluginRepository&gt;
      &lt;pluginRepository&gt;
         &lt;snapshots&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
         &lt;/snapshots&gt;
         &lt;id&gt;spring-beandoc&lt;/id&gt;
         &lt;url&gt;http://spring-beandoc.sourceforge.net/repo&lt;/url&gt;
      &lt;/pluginRepository&gt;
      &lt;pluginRepository&gt;
         &lt;snapshots&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
         &lt;/snapshots&gt;
         &lt;id&gt;tmatesoft-releases&lt;/id&gt;
         &lt;url&gt;http://maven.tmatesoft.com/content/repositories/releases/&lt;/url&gt;
      &lt;/pluginRepository&gt;
      &lt;pluginRepository&gt;
         &lt;releases&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
         &lt;/releases&gt;
         &lt;id&gt;tmatesoft-snapshots&lt;/id&gt;
         &lt;url&gt;http://maven.tmatesoft.com/content/repositories/snapshots/&lt;/url&gt;
      &lt;/pluginRepository&gt;
      &lt;pluginRepository&gt;
         &lt;id&gt;evolvis-3rdparty&lt;/id&gt;
         &lt;url&gt;http://maven-repo.evolvis.org/3rdparty&lt;/url&gt;
      &lt;/pluginRepository&gt;
      &lt;pluginRepository&gt;
         &lt;snapshots&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
         &lt;/snapshots&gt;
         &lt;id&gt;elca-services&lt;/id&gt;
         &lt;url&gt;http://el4.elca-services.ch/el4j/maven2repository&lt;/url&gt;
      &lt;/pluginRepository&gt;
   &lt;/pluginRepositories&gt;
   &lt;reporting&gt;
      &lt;plugins&gt;
         &lt;plugin&gt;
            &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
            &lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;
            &lt;configuration&gt;
               &lt;configLocation&gt;../parent/src/main/config/checkstyle/checkstyle.xml&lt;/configLocation&gt;
               &lt;propertyExpansion&gt;parent.basedir=../parent&lt;/propertyExpansion&gt;
               &lt;failsOnError&gt;false&lt;/failsOnError&gt;
            &lt;/configuration&gt;
         &lt;/plugin&gt;
         &lt;plugin&gt;
            &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
            &lt;artifactId&gt;findbugs-maven-plugin&lt;/artifactId&gt;
            &lt;version&gt;2.3.2&lt;/version&gt;
            &lt;configuration&gt;
               &lt;effort&gt;Max&lt;/effort&gt;
               &lt;threshold&gt;Low&lt;/threshold&gt;
               &lt;excludeFilterFile&gt;../parent/src/main/config/findbugs/findbugs-exclude.xml&lt;/excludeFilterFile&gt;
            &lt;/configuration&gt;
         &lt;/plugin&gt;
      &lt;/plugins&gt;
   &lt;/reporting&gt;
   &lt;build&gt;
      &lt;plugins&gt;
         &lt;plugin&gt;
            &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
            &lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;
            &lt;executions&gt;
               &lt;execution&gt;
                  &lt;id&gt;validate-properties&lt;/id&gt;
                  &lt;phase&gt;validate&lt;/phase&gt;
                  &lt;goals&gt;
                     &lt;goal&gt;run&lt;/goal&gt;
                  &lt;/goals&gt;
                  &lt;configuration&gt;
                     &lt;failOnError&gt;true&lt;/failOnError&gt;
                     &lt;target name="validate-properties"&gt;
                        &lt;taskdef name="if" classname="ise.antelope.tasks.IfTask"
                           classpathref="maven.plugin.classpath" /&gt;

                        &lt;if name="antrun.echos.properties" value="true"&gt;
                           &lt;echo&gt;Head revision of the project "${project.artifactId}" is
                              ${project.svn.revision}.&lt;/echo&gt;
                           &lt;echo&gt;project.artifactId : ${project.artifactId}&lt;/echo&gt;
                           &lt;echo&gt;project.basedir : ${project.basedir}&lt;/echo&gt;
                           &lt;echo&gt;project.parent : ${project.parent}&lt;/echo&gt;
                           &lt;echo&gt;project.parent.groupId : ${project.parent.groupId}&lt;/echo&gt;
                           &lt;echo&gt;project.parent.artifactId : ${project.parent.artifactId}&lt;/echo&gt;
                           &lt;echo&gt;project.parent.relativePath :
                              ${project.parent.relativePath}&lt;/echo&gt;

                           &lt;pathconvert pathsep="${line.separator}" property="classpath.maven.plugin"
                              refid="maven.plugin.classpath" /&gt;

                           &lt;pathconvert pathsep="${line.separator}" property="classpath.maven.compile"
                              refid="maven.compile.classpath" /&gt;
                           &lt;echo&gt;&lt;/echo&gt;
                           &lt;echo&gt;Compile-time classpath for Maven :&lt;/echo&gt;
                           &lt;echo&gt;${classpath.maven.compile}&lt;/echo&gt;

                           &lt;pathconvert pathsep="${line.separator}" property="classpath.maven.runtime"
                              refid="maven.runtime.classpath" /&gt;
                           &lt;echo&gt;&lt;/echo&gt;
                           &lt;echo&gt;Run-time classpath for Maven :&lt;/echo&gt;
                           &lt;echo&gt;${classpath.maven.runtime}&lt;/echo&gt;

                           &lt;echo&gt;Check Korean output : 한글이 정상적으로 보이나요?&lt;/echo&gt;
                           &lt;echo&gt;All properties given to Ant are : &lt;/echo&gt;
                           &lt;echoproperties /&gt;
                        &lt;/if&gt;
                     &lt;/target&gt;
                  &lt;/configuration&gt;
               &lt;/execution&gt;
            &lt;/executions&gt;
            &lt;dependencies&gt;
               &lt;dependency&gt;
                  &lt;groupId&gt;ise.antelope&lt;/groupId&gt;
                  &lt;artifactId&gt;ant-antelope-tasks&lt;/artifactId&gt;
                  &lt;version&gt;3.5.0&lt;/version&gt;
               &lt;/dependency&gt;
            &lt;/dependencies&gt;
         &lt;/plugin&gt;
      &lt;/plugins&gt;
      &lt;pluginManagement&gt;
         &lt;plugins&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
               &lt;version&gt;2.3.2&lt;/version&gt;
               &lt;inherited&gt;true&lt;/inherited&gt;
               &lt;configuration&gt;
                  &lt;source&gt;1.5&lt;/source&gt;
                  &lt;target&gt;1.5&lt;/target&gt;
               &lt;/configuration&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-site-plugin&lt;/artifactId&gt;
               &lt;version&gt;3.0&lt;/version&gt;
               &lt;dependencies&gt;
                  &lt;dependency&gt;
                     &lt;groupId&gt;org.apache.maven.wagon&lt;/groupId&gt;
                     &lt;artifactId&gt;wagon-ssh&lt;/artifactId&gt;
                     &lt;version&gt;2.0&lt;/version&gt;
                  &lt;/dependency&gt;
               &lt;/dependencies&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt;
               &lt;version&gt;2.3.2&lt;/version&gt;
               &lt;configuration&gt;
                  &lt;archive&gt;
                     &lt;addMavenDescriptor&gt;false&lt;/addMavenDescriptor&gt;
                     &lt;forced&gt;true&lt;/forced&gt;
                     &lt;index&gt;true&lt;/index&gt;
                     &lt;manifest&gt;
                        &lt;addClasspath&gt;false&lt;/addClasspath&gt;
                        &lt;addDefaultImplementationEntries&gt;true&lt;/addDefaultImplementationEntries&gt;
                        &lt;addDefaultSpecificationEntries&gt;true&lt;/addDefaultSpecificationEntries&gt;
                        &lt;addExtensions&gt;false&lt;/addExtensions&gt;
                        &lt;classpathLayoutType&gt;simple&lt;/classpathLayoutType&gt;
                     &lt;/manifest&gt;
                     &lt;manifestEntries&gt;
                        &lt;Source-Revision&gt;${project.svn.revision}&lt;/Source-Revision&gt;
                     &lt;/manifestEntries&gt;
                  &lt;/archive&gt;
               &lt;/configuration&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-assembly-plugin&lt;/artifactId&gt;
               &lt;version&gt;2.2.1&lt;/version&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;
               &lt;version&gt;2.8&lt;/version&gt;
               &lt;configuration&gt;
                  &lt;docencoding&gt;${project.reporting.outputEncoding}&lt;/docencoding&gt;
                  &lt;encoding&gt;${project.build.sourceEncoding}&lt;/encoding&gt;
                  &lt;links&gt;
                     &lt;link&gt;http://download.oracle.com/javase/1.5.0/docs/api/&lt;/link&gt;
                     &lt;link&gt;http://download.oracle.com/javaee/5/api/&lt;/link&gt;
                  &lt;/links&gt;
                  &lt;show&gt;projected&lt;/show&gt;
                  &lt;splitindex&gt;true&lt;/splitindex&gt;
               &lt;/configuration&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-project-info-reports-plugin&lt;/artifactId&gt;
               &lt;version&gt;2.4&lt;/version&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;
               &lt;version&gt;2.7&lt;/version&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;
               &lt;version&gt;1.7&lt;/version&gt;
               &lt;dependencies&gt;
                  &lt;dependency&gt;
                     &lt;groupId&gt;org.apache.ant&lt;/groupId&gt;
                     &lt;artifactId&gt;ant&lt;/artifactId&gt;
                     &lt;version&gt;1.8.2&lt;/version&gt;
                  &lt;/dependency&gt;
               &lt;/dependencies&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-release-plugin&lt;/artifactId&gt;
               &lt;version&gt;2.2.2&lt;/version&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt;
               &lt;version&gt;2.4&lt;/version&gt;
            &lt;/plugin&gt;

            &lt;plugin&gt;
               &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
               &lt;artifactId&gt;maven-eclipse-plugin&lt;/artifactId&gt;
               &lt;version&gt;2.8&lt;/version&gt;
               &lt;configuration&gt;
                  &lt;downloadSources&gt;true&lt;/downloadSources&gt;
                  &lt;downloadJavaDocs&gt;true&lt;/downloadJavaDocs&gt;
               &lt;/configuration&gt;
            &lt;/plugin&gt;

            &lt;plugin&gt;
               &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
               &lt;artifactId&gt;properties-maven-plugin&lt;/artifactId&gt;
               &lt;version&gt;1.0-alpha-2&lt;/version&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
               &lt;artifactId&gt;maven-springbeandoc-plugin&lt;/artifactId&gt;
               &lt;version&gt;1.0.8-SNAPSHOT&lt;/version&gt;
            &lt;/plugin&gt;
            &lt;plugin&gt;
               &lt;groupId&gt;com.google.code.maven-svn-revision-number-plugin&lt;/groupId&gt;
               &lt;artifactId&gt;maven-svn-revision-number-plugin&lt;/artifactId&gt;
               &lt;version&gt;1.7&lt;/version&gt;
               &lt;executions&gt;
                  &lt;execution&gt;
                     &lt;phase&gt;validate&lt;/phase&gt;
                     &lt;goals&gt;
                        &lt;goal&gt;revision&lt;/goal&gt;
                     &lt;/goals&gt;
                     &lt;configuration&gt;
                        &lt;entries&gt;
                           &lt;entry&gt;
                              &lt;path&gt;${project.basedir}&lt;/path&gt;
                              &lt;prefix&gt;project.svn&lt;/prefix&gt;
                              &lt;depth&gt;infinity&lt;/depth&gt;
                              &lt;reportUnversioned&gt;true&lt;/reportUnversioned&gt;
                              &lt;reportIgnored&gt;false&lt;/reportIgnored&gt;
                              &lt;reportOutOfDate&gt;false&lt;/reportOutOfDate&gt;
                           &lt;/entry&gt;
                        &lt;/entries&gt;
                     &lt;/configuration&gt;
                  &lt;/execution&gt;
               &lt;/executions&gt;
               &lt;dependencies&gt;
                  &lt;dependency&gt;
                     &lt;groupId&gt;org.tmatesoft.svnkit&lt;/groupId&gt;
                     &lt;artifactId&gt;svnkit&lt;/artifactId&gt;
                     &lt;version&gt;1.7.0-SNAPSHOT&lt;/version&gt;
                  &lt;/dependency&gt;
               &lt;/dependencies&gt;
            &lt;/plugin&gt;

         &lt;/plugins&gt;
      &lt;/pluginManagement&gt;
   &lt;/build&gt;
&lt;/project&gt;
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-4539298482682699744?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/4539298482682699744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/10/guildelines-for-multi-moduled-maven.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4539298482682699744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4539298482682699744'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/10/guildelines-for-multi-moduled-maven.html' title='Guildelines for Multi-moduled Maven Project'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-5828304662593314846</id><published>2011-10-10T13:28:00.030+09:00</published><updated>2012-01-25T16:57:02.648+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Frameworks, Libraries, Tools, and Utilities</title><content type='html'>&lt;h4&gt;Frameworks&lt;/h4&gt;

&lt;h5&gt;Logging&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;log4jdbc&lt;/strong&gt; : &lt;a target="_blank" href="http://code.google.com/p/log4jdbc/"&gt;http://code.google.com/p/log4jdbc/&lt;/a&gt;&lt;br/&gt;
a Java JDBC driver that can log SQL and/or JDBC calls (and optionally SQL timing information) for other JDBC drivers using the Simple Logging Facade For Java (SLF4J) logging system.
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Templating&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;FreeMarker&lt;/strong&gt; : &lt;a target="_blank" href="http://freemarker.sourceforge.net/"&gt;http://freemarker.sourceforge.net/&lt;/a&gt;&lt;br/&gt;
a "template engine"; a generic tool to generate text output (anything from HTML to autogenerated source code) based on templates.
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;HTML/CSS&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Compass&lt;/strong&gt; : &lt;a target="_blank" href="http://compass-style.org/"&gt;http://compass-style.org/&lt;/a&gt;&lt;br/&gt;
open-source CSS Authoring Framework.
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Libraries&lt;/h4&gt;


&lt;h5&gt;JavaScript&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Datejs&lt;/strong&gt; : &lt;a target="_blank" href="http://code.google.com/p/datejs/"&gt;http://code.google.com/p/datejs/&lt;/a&gt;&lt;br/&gt;
open source JavaScript Date library for parsing, formatting and processing.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;SyntaxHighlighter&lt;/strong&gt; : &lt;a target="_blank" href="http://alexgorbatchev.com/SyntaxHighlighter/"&gt;http://alexgorbatchev.com/SyntaxHighlighter/&lt;/a&gt;&lt;br/&gt;
a fully functional self-contained code syntax highlighter developed in JavaScript.
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Expression Language&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Java Expression Language (JEXL)&lt;/strong&gt; : &lt;a target="_blank" href="http://commons.apache.org/jexl/"&gt;http://commons.apache.org/jexl/&lt;/a&gt;&lt;br/&gt;
a library intended to facilitate the implementation of dynamic and scripting features in applications and frameworks written in Java.
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Tools&lt;/h4&gt;

&lt;h5&gt;Java Source Analysis&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Sonar&lt;/strong&gt; : &lt;a target="_blank" href="http://www.sonarsource.org/"&gt;http://www.sonarsource.org/&lt;/a&gt;&lt;br/&gt;
Open platform to manage code quality.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;JDepend&lt;/strong&gt; : &lt;a target="_blank" href="http://www.clarkware.com/software/JDepend.html"&gt;http://www.clarkware.com/software/JDepend.html&lt;/a&gt;&lt;br/&gt;
Traverses Java class file directories and generates design quality metrics for each Java package.
    &lt;ul type="circle"&gt;
      &lt;li&gt;JDepend 2.9.1 API : &lt;a target="_blank" href="http://mcs.une.edu.au/doc/javadoc/jdepend-2.9.1/"&gt;http://mcs.une.edu.au/doc/javadoc/jdepend-2.9.1/&lt;/a&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;li&gt;&lt;strong&gt;Checkstyle&lt;/strong&gt; : &lt;a target="_blank" href="http://checkstyle.sourceforge.net/"&gt;http://checkstyle.sourceforge.net/&lt;/a&gt;&lt;br/&gt;
Development tool to help programmers write Java code that adheres to a coding standard.
&lt;/ul&gt;


&lt;h5&gt;Java Performance Monitoring&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;VisualVM&lt;/strong&gt; : &lt;a target="_blank" href="http://visualvm.java.net/"&gt;http://visualvm.java.net/&lt;/a&gt;&lt;br/&gt;
Visual tool integrating several commandline JDK tools and lightweight profiling capabilities.
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Java Dump Analysis&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;IBM HeapAnalyzer&lt;/strong&gt; : &lt;a target="_blank" href="https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091"&gt;https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091&lt;/a&gt;&lt;br/&gt;
Analyzes Java heap dumps by parsing the Java heap dump, creating directional graphs, transforming them into directional trees, and executing the heuristic search engine. 
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;IBM Thread and Monitor Dump Analyzer for Java&lt;/strong&gt; : &lt;a target="_blank" href="https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=2245aa39-fa5c-4475-b891-14c205f7333c"&gt;https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=2245aa39-fa5c-4475-b891-14c205f7333c&lt;/a&gt;&lt;br/&gt;
Analyzes javacore and diagnoses monitor locks and thread activities in order to identify the root cause of hangs, deadlocks, and resource contention or monitor bottlenecks.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Thread Dump Analyzer&lt;/strong&gt; : &lt;a target="_blank" href="http://java.net/projects/tda"&gt;http://java.net/projects/tda&lt;/a&gt;&lt;br/&gt;
Analyzes Thread Dumps of Sun, SAP and JRockit (partial).
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Eclipse Memory Analyzer&lt;/strong&gt; : &lt;a target="_blank" href="http://www.eclipse.org/mat/"&gt;http://www.eclipse.org/mat/&lt;/a&gt;&lt;br/&gt;
Fast and feature-rich Java heap analyzer that helps you find memory leaks and reduce memory consumption.
  &lt;/li&gt;


&lt;/ul&gt;



&lt;h5&gt;Web Development&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Firebug&lt;/strong&gt; : &lt;a target="_blank" href="http://getfirebug.com/"&gt;http://getfirebug.com/&lt;/a&gt;&lt;br/&gt;
Edit, debug, and monitor CSS, HTML, and JavaScript live in any web page.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;JSLint&lt;/strong&gt; : &lt;a target="_blank" href="http://www.jslint.com/"&gt;http://www.jslint.com/&lt;/a&gt;&lt;br/&gt;
a JavaScript program that looks for problems in JavaScript programs.
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;SQL Client/Database Management&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;SQuirreL SQL Client&lt;/strong&gt; : &lt;a target="_blank" href="http://www.squirrelsql.org/"&gt;http://www.squirrelsql.org/&lt;/a&gt;&lt;br/&gt;
A graphical Java program that will allow you to view the structure of a JDBC compliant database, browse the data in tables, issue SQL commands etc.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;IBM Data Studio&lt;/strong&gt; : &lt;a target="_blank" href="http://www-01.ibm.com/software/data/optim/data-studio/"&gt;http://www-01.ibm.com/software/data/optim/data-studio/&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Provides database developers and DBAs an integrated, modular environment for productive administration of DB2 for Linux, UNIX and Windows.
      &lt;/li&gt;
      &lt;li&gt;Provides collaborative database development tools for DB2, Informix, Oracle, and Sybase at no charge.
      &lt;/li&gt;
    &lt;/ul&gt;  
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Oracle SQL Developer&lt;/strong&gt; : &lt;a target="_blank" href="http://www.oracle.com/technetwork/developer-tools/sql-developer/"&gt;http://www.oracle.com/technetwork/developer-tools/sql-developer/&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;



&lt;h5&gt;ETL&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Scriptella&lt;/strong&gt; : &lt;a target="_blank" href="http://scriptella.javaforge.com/"&gt;http://scriptella.javaforge.com/&lt;/a&gt;&lt;br/&gt;
An open source ETL (Extract-Transform-Load) and script execution tool written in Java.
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Utilities&lt;/h4&gt;

&lt;h5&gt;PC Diagnostic and Recovery&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Hiren's BootCD&lt;/strong&gt; : &lt;a target="_blank" href="http://www.hiren.info/pages/bootcd"&gt;http://www.hiren.info/pages/bootcd&lt;/a&gt;&lt;br/&gt;
A bootable software CD containing a number of diagnostic programs such as partitioning agents, system performance benchmarks, disk cloning and imaging tools, data recovery tools, MBR tools, BIOS tools, and many others for fixing various computer problems.&lt;br/&gt;
For download and more information, refer &lt;a target='_blank' href='http://www.hirensbootcd.org/'&gt;fan &amp;amp; discussion site&lt;/a&gt;.
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;File Synchronization&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;rsync&lt;/strong&gt; : &lt;a target="_blank" href="http://rsync.samba.org/"&gt;http://rsync.samba.org/&lt;/a&gt;&lt;br/&gt;
An open source utility that provides fast incremental file transfer.&lt;br/&gt;
For front-end soft-wares or solutions based on rsync, refer &lt;a target='_blank' href='http://en.wikipedia.org/wiki/Rsync#Solutions_using_Rsync'&gt;http://en.wikipedia.org/wiki/Rsync#Solutions_using_Rsync&lt;/a&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/8559058673267774097-5828304662593314846?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/5828304662593314846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/10/tools.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5828304662593314846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5828304662593314846'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/10/tools.html' title='Frameworks, Libraries, Tools, and Utilities'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-4300825153996810106</id><published>2011-09-16T20:33:00.003+09:00</published><updated>2011-09-16T20:35:36.708+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Readings on Business Applications</title><content type='html'>&lt;h4&gt;Data-warehouse, BI&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.dwreview.com/OLAP/Introduction_OLAP.html'&gt;Introduction to OLAP&lt;/a&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/8559058673267774097-4300825153996810106?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/4300825153996810106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/09/readings-on-business-applications.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4300825153996810106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4300825153996810106'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/09/readings-on-business-applications.html' title='Readings on Business Applications'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-7789562297383581388</id><published>2011-07-23T01:52:00.022+09:00</published><updated>2011-12-02T20:26:33.043+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Regex'/><title type='text'>Tips on Regex</title><content type='html'>&lt;h4&gt;Readings : References, Tutorials and Articles&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://pubs.opengroup.org/onlinepubs/007908799/xbd/re.html'&gt;Regular Expressions in Single UNIX Specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html'&gt;Regular Expressions in &lt;code&gt;POSIX.1-2008&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.regular-expressions.info/tutorial.html'&gt;Tutorial on Regular-Expressions.info&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.greenend.org.uk/rjk/2002/06/regexp.html'&gt;Regexp Syntax Summary&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.regular-expressions.info/refflavors.html'&gt;Regular Expression Flavor Comparison&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul type="disc"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.ibm.com/developerworks/aix/library/au-regexp/'&gt;Know your regular expressions from developerWorks&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;Special Characters of ERE (Extended Regular Expression)&lt;/h4&gt;

&lt;p align='right'&gt;from &lt;i&gt;&lt;a target='_blank' href='http://pubs.opengroup.org/onlinepubs/007908799/xbd/re.html'&gt;Regular Expressions in Single UNIX Specification&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p align='left'&gt;An ERE special character has special properties in certain contexts. Outside those contexts, or when preceded by a backslash, such a character is an ERE that matches the special character itself. The extended regular expression special characters and the contexts in which they have their special meaning are:
&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;b&gt;. \ [ (&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;
The period, left-bracket, backslash and left-parenthesis are special except when used in a bracket expression. Outside a bracket expression, a left-parenthesis immediately followed by a right-parenthesis produces undefined results.
&lt;/dd&gt;
&lt;dt&gt;&lt;b&gt;)&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;
The right-parenthesis is special when matched with a preceding left-parenthesis, both outside a bracket expression.
&lt;/dd&gt;
&lt;dt&gt;&lt;b&gt;* + ? {&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;p&gt;The asterisk, plus-sign, question-mark and left-brace are special except when used in a bracket expression (see RE Bracket Expression ). Any of the following uses produce undefined results:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;if these characters appear first in an ERE, or immediately following a vertical-line, circumflex or left-parenthesis.&lt;/li&gt;
    &lt;li&gt;if a left-brace is not part of a valid interval expression.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;b&gt;|&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;
  &lt;p&gt;The vertical-line is special except when used in a bracket expression. A vertical-line appearing first or last in an ERE, or immediately following a vertical-line or a left-parenthesis, or immediately preceding a right-parenthesis, produces undefined results.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;b&gt;^&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;
  &lt;p&gt;The circumflex is special when used:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;as an anchor&lt;/li&gt;
    &lt;li&gt;as the first character of a bracket expression&lt;/li&gt;
  &lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;b&gt;$&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;
  &lt;p&gt;The dollar sign is special when used as an anchor.&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;



&lt;h4&gt;Regex with Java&lt;/h4&gt;

You can find the most proper information to use regex with Java in the API documentation of &lt;code&gt;java.util.regex.Pattern&lt;/code&gt; class

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html'&gt;http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Formal rules for bracket expression&lt;/h4&gt;

Bracket expressions such as [0-9a-zA-Z], [^0-9a-zA-Z], or [0-9a-zA-Z.?*+-] are kind of different from normal expressions. One of the most important differences is metacharacters or special characters. Including that, more formal detailed description for bracket expression can be found in the following

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://pubs.opengroup.org/onlinepubs/007908799/xbd/re.html#tag_007_003_005'&gt;RE Bracket Expression in Single UNIX Specification by X/Open group&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05'&gt;RE Bracket Expression in &lt;code&gt;POSIX.1-2008&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Capturing, Grouping and Backreferences&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://www.explainth.at/en/re/backref.shtml"&gt;Backreferences in Regular Expressions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;NOT operator in Regex&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://regexadvice.com/forums/thread/49027.aspx'&gt;how to use NOT operator&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://social.msdn.microsoft.com/Forums/en-US/regexp/thread/882333cf-af08-438d-be2d-0c9e65985b22/'&gt;Not Operator in Regular Expressions&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Nested pairs search&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://stackoverflow.com/questions/4445674/can-i-use-perl-regular-expressions-to-match-balanced-text'&gt;Can I use Perl regular expressions to match balanced text?&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396452.aspx'&gt;.NET Regular Expressions: Regex and Balanced Matching&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://blog.stevenlevithan.com/archives/regex-recursion'&gt;Regex Recursion (Matching Nested Constructs)&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Lookaround : lookahead and lookbehind&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.regular-expressions.info/lookaround.html'&gt;Lookahead and Lookbehind Zero-Width Assertions&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Greedy, Reluctant, or Possessive Quantifiers&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://docs.oracle.com/javase/tutorial/essential/regex/quant.html'&gt;Quantifiers in The Java Tutorials&lt;/a&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/8559058673267774097-7789562297383581388?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/7789562297383581388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/07/tips-on-regex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7789562297383581388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7789562297383581388'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/07/tips-on-regex.html' title='Tips on Regex'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2651276042813788897</id><published>2011-07-15T15:54:00.009+09:00</published><updated>2011-07-15T17:27:44.619+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java EE'/><title type='text'>Servlet, JSP, JSTL, JSF and EL Compatibility</title><content type='html'>&lt;h4&gt;Servlet and JSP Versions&lt;/h4&gt;

&lt;table border="1" width="800" style="margin-left:20px" cellpadding="2" cellspacing="0"&gt;
&lt;tr&gt;
  &lt;th&gt;Servlet ver.&lt;/th&gt;
  &lt;th&gt;Released at&lt;/th&gt;
  &lt;th&gt;JSP ver.&lt;/th&gt;
  &lt;th&gt;Java EE ver.&lt;/th&gt;
  &lt;th&gt;Java SE ver.&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Servlet 3.0&lt;/td&gt;
  &lt;td&gt;Dec. 2009&lt;/td&gt;
  &lt;td&gt;JSP 2.2&lt;/td&gt;
  &lt;td&gt;Java EE 6&lt;/td&gt;
  &lt;td&gt;Java SE 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Servlet 2.5&lt;/td&gt;
  &lt;td&gt;Sep. 2005&lt;/td&gt;
  &lt;td&gt;JSP 2.1&lt;/td&gt;
  &lt;td&gt;Java EE 5&lt;/td&gt;
  &lt;td&gt;Java SE 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Servlet 2.4&lt;/td&gt;
  &lt;td&gt;Nov. 2003&lt;/td&gt;
  &lt;td&gt;JSP 2.0&lt;/td&gt;
  &lt;td&gt;J2EE 1.4&lt;/td&gt;
  &lt;td&gt;J2SE 1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Servlet 2.3&lt;/td&gt;
  &lt;td&gt;Aug. 2001&lt;/td&gt;
  &lt;td&gt;JSP 1.2&lt;/td&gt;
  &lt;td&gt;J2EE 1.3&lt;/td&gt;
  &lt;td&gt;J2SE 1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Servlet 2.2&lt;/td&gt;
  &lt;td&gt;Aug. 1999&lt;/td&gt;
  &lt;td&gt;JSP 1.1&lt;/td&gt;
  &lt;td&gt;J2EE 1.2&lt;/td&gt;
  &lt;td&gt;J2SE 1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h4&gt;JSTL Compatibility&lt;/h4&gt;

&lt;table border="1" width="800" style="margin-left:20px" cellpadding="2" cellspacing="0"&gt;
&lt;tr&gt;
  &lt;th&gt;JSTL ver.&lt;/th&gt;
  &lt;th&gt;Released at&lt;/th&gt;
  &lt;th&gt;JSP ver.&lt;/th&gt;
  &lt;th&gt;Servlet ver.&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;JSTL 1.2&lt;/td&gt;
  &lt;td&gt;May 2006&lt;/td&gt;
  &lt;td&gt;JSP 2.1&lt;/td&gt;
  &lt;td&gt;Servlet 2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;JSTL 1.1&lt;/td&gt;
  &lt;td&gt;Nov. 2003&lt;/td&gt;
  &lt;td&gt;JSP 2.0&lt;/td&gt;
  &lt;td&gt;Servlet 2.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;JSTL 1.0&lt;/td&gt;
  &lt;td&gt;Jun. 2002&lt;/td&gt;
  &lt;td&gt;JSP 1.2&lt;/td&gt;
  &lt;td&gt;Servlet 2.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;h4&gt;JSF Compatibility&lt;/h4&gt;

&lt;table border="1" width="800" style="margin-left:20px" cellpadding="2" cellspacing="0"&gt;
&lt;tr&gt;
  &lt;th&gt;JSF ver.&lt;/th&gt;
  &lt;th&gt;Released at&lt;/th&gt;
  &lt;th&gt;JSP ver.&lt;/th&gt;
  &lt;th&gt;Servlet ver.&lt;/th&gt;
  &lt;th&gt;JSTL ver.&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;JSF 2.1&lt;/td&gt;
  &lt;td&gt;Nov. 2010&lt;/td&gt;
  &lt;td&gt;JSP 2.1&lt;/td&gt;
  &lt;td&gt;Servlet 2.5&lt;/td&gt;
  &lt;td&gt;JSTL 1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;JSF 2.0&lt;/td&gt;
  &lt;td&gt;Jun. 2009&lt;/td&gt;
  &lt;td&gt;JSP 2.1&lt;/td&gt;
  &lt;td&gt;Servlet 2.5&lt;/td&gt;
  &lt;td&gt;JSTL 1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;JSF 1.2&lt;/td&gt;
  &lt;td&gt;May 2006&lt;/td&gt;
  &lt;td&gt;JSP 2.1&lt;/td&gt;
  &lt;td&gt;Servlet 2.5&lt;/td&gt;
  &lt;td&gt;JSTL 1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;JSF 1.1&lt;/td&gt;
  &lt;td&gt;May 2004&lt;/td&gt;
  &lt;td&gt;JSP 1.2&lt;/td&gt;
  &lt;td&gt;Servlet 2.3&lt;/td&gt;
  &lt;td&gt;JSTL 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;JSF 1.0&lt;/td&gt;
  &lt;td&gt;Mar. 2004&lt;/td&gt;
  &lt;td&gt;JSP 1.2&lt;/td&gt;
  &lt;td&gt;Servlet 2.3&lt;/td&gt;
  &lt;td&gt;JSTL 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;h4&gt;EL Compatibility&lt;/h4&gt;

&lt;table border="1" width="800" style="margin-left:20px" cellpadding="2" cellspacing="0"&gt;
&lt;tr&gt;
  &lt;th&gt;EL ver.&lt;/th&gt;
  &lt;th&gt;Released at&lt;/th&gt;
  &lt;th&gt;JSP ver.&lt;/th&gt;
  &lt;th&gt;JSF ver.&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;EL 2.2&lt;/td&gt;
  &lt;td&gt;Dec. 2009&lt;/td&gt;
  &lt;td&gt;JSP 2.2&lt;/td&gt;
  &lt;td&gt;JSF 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;EL 2.1&lt;/td&gt;
  &lt;td&gt;May 2006&lt;/td&gt;
  &lt;td&gt;JSP 2.1&lt;/td&gt;
  &lt;td&gt;JSF 1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h4&gt;References&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://tomcat.apache.org/whichversion.html"&gt;Apache Tomcat Versions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://tomcat.apache.org/taglibs/standard/"&gt;Apache Standard Taglib&lt;/a&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/8559058673267774097-2651276042813788897?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2651276042813788897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/07/servlet-jsp-jstl-el-and-jsf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2651276042813788897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2651276042813788897'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/07/servlet-jsp-jstl-el-and-jsf.html' title='Servlet, JSP, JSTL, JSF and EL Compatibility'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3539468363504411281</id><published>2011-07-13T10:55:00.002+09:00</published><updated>2011-11-11T21:47:05.736+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML/CSS'/><title type='text'>My Styles</title><content type='html'>&lt;h4&gt;Styles for Redmine of my team&lt;/h4&gt;

&lt;script type="syntaxhighlighter" class="brush:css"&gt;
/* Custom styles, Sangmoon Oh, 2011-07-12 */
div.wiki h1, div.wiki h2, div.wiki h3, div.wiki h4, div.wiki h5, div.wiki h6 {
  font-family:"Lucida Grande", "Trebuchet MS", sans-serif, 맑은고딕, 새굴림;
  text-indent:5px;
}
div.wiki h1 {
  font-size:170%;
}
div.wiki h2 {
  font-size:150%;
  font-weight:bold;
  #color:#FFFFFF;
  color:#000000;
  #background-color:#0080C0;
  background-color:#99CC33;
  line-height:170%;
  margin-right:15%;
  -moz-border-radius:7px;
  -webkit-border-radius:7px;
  border-radius:7px;
}
div.wiki h2 a:link, div.wiki h2 a:visited {
  color:#FFFFFF;
  text-decoration:underline
}
div.wiki h3 {
  font-size:130%;
  font-weight:bold;
  #color:#FFFFFF;
  color:#000000;
  #background-color:orange;
  #background-color:#995533;
  background-color:#F5DEB3;
  line-height:150%;
  margin-right:10%;
  -moz-border-radius:5px;
  -webkit-border-radius:5px;
  border-radius:5px;
}
div.wiki h3 a:link, div.wiki h3 a:visited {
  color:#FFFFFF;
  text-decoration:underline
}

div.wiki h4 {
  font-size:120%;
  font-weight:bold;
  text-decoration:underline;
}
div.wiki h5 {
  font-size:110%;
  font-weight:bold;
  text-decoration:underline;
}
div.wiki h6 {
  font-size:105%;
  font-weight:bold;
  text-decoration:underline;
}

/* need more optimization for the case when wiki area doen't start with h1 */
div.wiki {
  counter-reset:step-for-h1;
  counter-reset:step-for-h2;
  counter-reset:step-for-h3;
}
div.wiki h1 {
  counter-reset:step-for-h2;
}
div.wiki h1:before {
  counter-increment:step-for-h1;
}
div.wiki h2 {
  counter-reset:step-for-h3;
}
div.wiki h2:before {
  content: counter(step-for-h2) ". ";
  counter-increment:step-for-h2;
}
div.wiki h3 {
  counter-reset:step-for-h4;
}
div.wiki h3:before {
  content: counter(step-for-h2) "." counter(step-for-h3) ". ";
  counter-increment:step-for-h3;
}
div.wiki h4 {
  counter-reset:step-for-h5;
}
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-3539468363504411281?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3539468363504411281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/07/my-styles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3539468363504411281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3539468363504411281'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/07/my-styles.html' title='My Styles'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-551077873919536651</id><published>2011-07-10T02:46:00.003+09:00</published><updated>2011-07-10T03:44:11.895+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java SE'/><title type='text'>Access InitialContext by Application Server</title><content type='html'>&lt;h4&gt;Readings&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://download.oracle.com/javase/1.5.0/docs/api/javax/naming/Context.html"&gt;javax.naming.Context&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://download.oracle.com/javase/1.5.0/docs/api/javax/naming/InitialContext.html"&gt;javax.naming.InitialContext&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://download.oracle.com/javase/1.5.0/docs/api/javax/naming/CompoundName.html"&gt;javax.naming.CompoundName&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://download.oracle.com/javase/1.5.0/docs/api/javax/naming/CompositeName.html"&gt;javax.naming.CompositeName&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;JBoss&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://docs.jboss.org/jbossas/jboss4guide/r1/html/ch3.chapter.html"&gt;Naming on JBoss 4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;WebLogic&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://download.oracle.com/docs/cd/E13222_01/wls/docs81/jndi/jndi.html"&gt;Programming WebLogic 8.1 JNDI&lt;/a&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/8559058673267774097-551077873919536651?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/551077873919536651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/07/access-initialcontext-by-application.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/551077873919536651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/551077873919536651'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/07/access-initialcontext-by-application.html' title='Access InitialContext by Application Server'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-7464088948835821191</id><published>2011-07-01T00:33:00.008+09:00</published><updated>2011-07-10T03:45:20.482+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java SE'/><title type='text'>Investgating InitialContext</title><content type='html'>&lt;p&gt;
You can get all name-class pairs under &lt;code&gt;InitialContext&lt;/code&gt; of your application server using the following simple code containing recursive call.
&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush:java"&gt;&lt;![CDATA[
/**
 * Retrieve all name class pairs recursively under the given naming context.
 *  
 * @return
 */
public static Map&lt;String, NameClassPair&gt; getNameClassPairsUnderContext(String name, Context cntx) throws NamingException{

  if(cntx == null) throw new IllegalArgumentException("Context shouldn't be null.");
  
  Map&lt;String, NameClassPair&gt; result = new HashMap&lt;String, NameClassPair&gt;();  
  NamingEnumeration&lt;NameClassPair&gt; pairs = cntx.list("");
  NameClassPair pair = null;
  Object obj = null;
  String path = null;
  while(pairs.hasMore()){
    pair = pairs.next();
    obj = cntx.lookup(pair.getName());
    path = name + "/" + pair.getName();
    
    if(obj instanceof javax.naming.Context){
      result.put(path, pair);
      result.putAll(getNameClassPairsUnderContext(path, (Context)obj));
    }
    else{ result.put(path, pair);}
  }
  
  return result;
}
]]&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-7464088948835821191?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/7464088948835821191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/07/investgating-initialcontext.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7464088948835821191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7464088948835821191'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/07/investgating-initialcontext.html' title='Investgating InitialContext'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2025608447627642846</id><published>2011-06-27T19:26:00.005+09:00</published><updated>2011-06-27T20:25:17.644+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Concurrency and Transaction in Oracle</title><content type='html'>&lt;h4&gt;Locks Obtained by DML Statements in Oracle&lt;/h4&gt;

&lt;p align="right"&gt;&lt;i&gt;from Oracle Database Concepts&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;
Oracle provides data concurrency and integrity between transactions using its locking mechanisms. Because the locking mechanisms of Oracle are tied closely to transaction control, application designers need only define transactions properly, and Oracle automatically manages locking.
&lt;/p&gt;
&lt;p&gt;
Keep in mind that Oracle locking is fully automatic and requires no user action. Implicit locking occurs for all SQL statements so that database users never need to lock any resource explicitly. Oracle's default locking mechanisms lock data at the lowest level of restrictiveness to guarantee data integrity while allowing the highest degree of data concurrency.
&lt;/p&gt;
&lt;p&gt;
The purpose of a DML lock (data lock) is to guarantee the integrity of data being accessed concurrently by multiple users. DML locks prevent destructive interference of simultaneous conflicting DML or DDL operations. DML statements automatically acquire both table-level locks and row-level locks.
&lt;/p&gt;
&lt;p&gt;
The following table summarize how Oracle automatically locks data on behalf of different DML operations.
&lt;/p&gt;
&lt;table border='1' cellspacing='0' cellpadding='1'&gt;
&lt;tr&gt;
  &lt;th&gt;DML Statement&lt;/th&gt;
  &lt;th&gt;Row Locks&lt;/th&gt;
  &lt;th&gt;Table Locks&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;SELECT ... FROM table&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;INSERT INTO table ...&lt;/td&gt;
  &lt;td&gt;Exclusive Row Locks&lt;/td&gt;
  &lt;td&gt;Row Exclusive Table Locks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;UPDATE table ...&lt;/td&gt;
  &lt;td&gt;Exclusive Row Locks&lt;/td&gt;
  &lt;td&gt;Row Exclusive Table Locks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;DELETE FROM table ...&lt;/td&gt;
  &lt;td&gt;Exclusive Row Locks&lt;/td&gt;
  &lt;td&gt;Row Exclusive Table Locks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;SELECT ... FROM table ...    FOR UPDATE OF ...&lt;/td&gt;
  &lt;td&gt;Exclusive Row Locks&lt;/td&gt;
  &lt;td&gt;Row Share Table Locks&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;ul&gt;
  &lt;li&gt;Exclusive Row Lock
    &lt;ul&gt;
      &lt;li&gt;A transaction acquires an exclusive row lock for each individual row modified by one of the following statements: INSERT, UPDATE, DELETE, and SELECT with the FOR UPDATE clause.&lt;/li&gt;
      &lt;li&gt;A modified row is always locked exclusively so that other transactions cannot modify the row until the transaction holding the lock is committed or rolled back.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Row Exclusive Table Locks
    &lt;ul&gt;
      &lt;li&gt;A row exclusive table lock generally indicates that the transaction holding the lock &lt;strong&gt;has made&lt;/strong&gt; one or more updates to rows in the table.&lt;/li&gt;
      &lt;li&gt;A row exclusive table lock held by a transaction allows other transactions to query, insert, update, delete, or lock rows concurrently in the same table. Therefore, row exclusive table locks allow multiple transactions to obtain simultaneous row exclusive and row share table locks for the same table.&lt;/li&gt;
      &lt;li&gt;A row exclusive table lock held by a transaction prevents other transactions from manually locking the table for exclusive reading or writing.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Row Share Table Locks
    &lt;ul&gt;
      &lt;li&gt;A row share table lock indicates that the transaction holding the lock on the table has locked rows in the table and &lt;strong&gt;intends to&lt;/strong&gt; update them.&lt;/li&gt;
      &lt;li&gt;A row share table lock held by a transaction allows other transactions to query, insert, update, delete, or lock rows concurrently in the same table.&lt;/li&gt;
      &lt;li&gt;A row share table lock held by a transaction prevents other transactions from exclusive write access to the same table using only &lt;code&gt;LOCK TABLE table IN EXCLUSIVE MODE&lt;/code&gt; statement.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;   
&lt;/ul&gt;

&lt;h5&gt;Locking for &lt;code&gt;SELECT&lt;/code&gt; statement&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;A query acquires no data locks. Therefore, other transactions can query and update a table being queried, including the specific rows being queried. Because queries lacking FOR UPDATE clauses do not acquire any data locks to block other operations, such queries are often referred to in Oracle as &lt;strong&gt;nonblocking queries&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;A query does not have to wait for any data locks to be released; it can always proceed. (Queries may have to wait for data locks in some very specific cases of pending distributed transactions.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Locking for &lt;code&gt;INSERT, UPDATE, DELETE&lt;/code&gt;, and &lt;code&gt;SELECT ... FOR UPDATE&lt;/code&gt; statement&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;The transaction that contains a DML statement acquires exclusive row locks on the rows modified by the statement. Other transactions cannot update or delete the locked rows until the locking transaction either commits or rolls back.&lt;/li&gt;
  &lt;li&gt;The transaction that contains a DML statement &lt;strong&gt;does not need to&lt;/strong&gt; acquire row locks on any rows selected &lt;strong&gt;by a subquery or an implicit query&lt;/strong&gt;, such as a query in a WHERE clause. A subquery or implicit query in a DML statement is guaranteed to be consistent as of the start of the query and does not see the effects of the DML statement it is part of.&lt;/li&gt;
  &lt;li&gt;A query in a transaction can see the changes made by previous DML statements in the same transaction, but cannot see the changes of other transactions begun after its own transaction.&lt;/li&gt;
  &lt;li&gt;In addition to the necessary exclusive row locks, a transaction that contains a DML statement acquires at least a row exclusive table lock on the table that contains the affected rows. If the containing transaction already holds a share, share row exclusive, or exclusive table lock for that table, the row exclusive table lock is not acquired. If the containing transaction already holds a row share table lock, Oracle automatically converts this lock to a row exclusive table lock.&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/8559058673267774097-2025608447627642846?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2025608447627642846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/06/concurrency-and-transaction-in-oracle.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2025608447627642846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2025608447627642846'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/06/concurrency-and-transaction-in-oracle.html' title='Concurrency and Transaction in Oracle'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-5933182393133941855</id><published>2011-05-20T23:19:00.006+09:00</published><updated>2011-05-20T23:52:24.778+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iBATIS'/><title type='text'>Tips on MyBatis</title><content type='html'>&lt;h4&gt;Thread-safety of &lt;code&gt;SqlSession&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;
Two main implementation of &lt;strong&gt;&lt;code&gt;SqlSession&lt;/code&gt;&lt;/strong&gt; interface have opposite semantics in thread-safety.&lt;br/&gt;
&lt;strong&gt;&lt;code&gt;org.apache.ibatis.session.defaults.DefaultSqlSession&lt;/code&gt;&lt;/strong&gt; is not thread-safe and so should not be shared among threads. But, &lt;strong&gt;&lt;code&gt;org.mybatis.spring.SqlSessionTemplate&lt;/code&gt;&lt;/strong&gt; provided to used with &lt;code&gt;Spring&lt;/code&gt; framework is thread-safe.
&lt;/p&gt;
&lt;p&gt;
Two implementations can not replace each other. So, the POJO into which SqlSessionTemplate is expected to be injected by Spring IoC container will not work correctly with other implementation of &lt;code&gt;SqlSession&lt;/code&gt; in non-Spring environment. Can this be called POJO ?
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:java"&gt;&lt;![CDATA[
public class UserDaoImpl implements UserDao {
  private SqlSession sqlSession;
  public void setSqlSession(SqlSession sqlSession) {
    this.sqlSession = sqlSession;
  }

public User getUser(String userId) {
  return (User) sqlSession.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  }
}
]]&gt;&lt;/script&gt;

&lt;p&gt;
I think this is somewhat confusing feature. I'm not sure thead-safety is dealt with interface scope of respective implmentation scope. &lt;code&gt;SqlSession&lt;/code&gt; is in the heart of &lt;code&gt;MyBatis&lt;/code&gt;, and so it seems desirable to have more clear semantics.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-5933182393133941855?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/5933182393133941855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/05/tips-on-mybatis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5933182393133941855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5933182393133941855'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/05/tips-on-mybatis.html' title='Tips on MyBatis'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2204991800984580501</id><published>2011-04-27T00:35:00.007+09:00</published><updated>2011-04-27T01:12:49.982+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>General method to check properties of an object using Spring EL</title><content type='html'>&lt;p&gt;
Spring 3.0 introduced powerful expression language (&lt;a target='_blank' href='http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/expressions.html'&gt;SpEL&lt;/a&gt;). 
We can make a simple utility method to check the properties of an object in any type using &lt;code&gt;SpEL&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
The following is simple sample. 
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:java; highlight:[19,20,21,22,23]"&gt;&lt;![CDATA[
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

public class ObjectInspector {
 
 // SpelExpressionParser is thread-safe which is explicitly documented in API doc.
 private ExpressionParser expressionParser = new SpelExpressionParser();

 /**
  * Evaluate the given boolean expression against the specified object.&lt;br/&gt;
  * This method is thread-safe. 
  *  
  * @param obj object to check
  * @param booleanExpr boolean expression to evaluate which should be valid with SpEL
  * @param clazz the type of the &lt;code&gt;obj&lt;/code&gt;
  */
 public &lt;T&gt; boolean checkBooleanExpression(T obj, String booleanExpr, Class&lt;T&gt; clazz){

  StandardEvaluationContext cntx = new StandardEvaluationContext(obj);
  return this.expressionParser.parseExpression(booleanExpr).getValue(cntx, Boolean.class);  
 }
}
]]&gt;&lt;/script&gt;
&lt;p&gt;
Note that the method consists of only two line. With the following unit test sample, you can imagine the robustness of the above method.
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:java; highlight:[20,21,25,26,27]"&gt;&lt;![CDATA[
public class ObjectInspectorTest {
 
 private static ObjectInspector inspector;

 @BeforeClass
 public static void setUpBeforeClass() throws Exception {
  inspector = new ObjectInspector();
 }
 
 @Test
 public void testCheckBooleanExpression(){
  
  Person p1 = new Person("Peter", Person.Gender.MALE, (new GregorianCalendar(71, 10, 23)).getTime());
  Person p2 = new Person("Jane", Person.Gender.FEMALE, (new GregorianCalendar(74, 5, 9)).getTime());
  
  //first eye-checking
  System.out.println(p1.toString());
  System.out.println(p2.toString());
  
  Assert.assertTrue(inspector.checkBooleanExpression(p1, "'Peter'.equals(#root.name)", Person.class));
  Assert.assertTrue(inspector.checkBooleanExpression(p2, "#root.birthday.month == 5", Person.class));
  
  Rectangle rct1 = new Rectangle(5, 10, 3, 6);
  
  Assert.assertTrue(inspector.checkBooleanExpression(rct1, "#root.width == 5", Rectangle.class));
  Assert.assertFalse(inspector.checkBooleanExpression(rct1, "#root.height == 5", Rectangle.class));
  Assert.assertTrue(inspector.checkBooleanExpression(rct1, "#root.area == 15", Rectangle.class));
 }
}

class Person{
 
 enum Gender{ MALE, FEMALE }
 
 private String name;
 private Gender gender;
 private Date birthday;
 
 public Person(String name, Gender gender, Date date){
  this.name = name;
  this.gender = gender;
  this.birthday = date;
 }

 public String getName() { return name; }
 public Gender getGender() { return gender; }
 public Date getBirthday() { return birthday; }
 
 @Override
 public String toString(){
  return String.format("Name : %1$s, Gender : %2$s, Birthday : %3$tF", this.name, this.gender, this.birthday);
 }
}


class Rectangle{
 
 private int x1;
 private int x2;
 private int y1;
 private int y2;
 
 public Rectangle(int x1, int x2, int y1, int y2){
  if(x1 &gt; x2) throw new IllegalArgumentException("x1 should not greater than x2");
  if(y1 &gt; y2) throw new IllegalArgumentException("y1 should not greater than y2");
  
  this.x1 = x1;
  this.x2 = x2;
  this.y1 = y1;
  this.y2 = y2;
 }

 public int getX1() { return x1; }
 public int getX2() { return x2; }
 public int getY1() { return y1; }
 public int getY2() { return y2; }
 
 public int getWidth(){ return (x2 - x1); }
 public int getHeight(){ return (y2 - y1); }
 public int getArea(){ return (this.getWidth())*(this.getHeight()); }
}
]]&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-2204991800984580501?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2204991800984580501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/04/general-method-to-check-properties-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2204991800984580501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2204991800984580501'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/04/general-method-to-check-properties-of.html' title='General method to check properties of an object using Spring EL'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2741629866816074139</id><published>2011-04-26T10:12:00.016+09:00</published><updated>2011-07-05T00:40:19.076+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Simple Code Patterns in Java</title><content type='html'>&lt;h4&gt;Typical code pattern for Regex API&lt;/h4&gt;

&lt;p&gt;
The simplest code pattern for when a regular expression is used just once is to use &lt;strong&gt;&lt;code&gt;static Pattern.matches&lt;/code&gt;&lt;/strong&gt; method.
&lt;/p&gt;

&lt;pre class="brush:java"&gt;
boolean b = Pattern.matches("a*b", "aaaaab");
&lt;/pre&gt;

&lt;p&gt;
When using a expression several times, it is better to use compiled pattern object considering performance.
&lt;/p&gt;

&lt;pre class="brush: java"&gt;
Pattern p = Pattern.compile("a*b");
boolean b1 = p.matcher("aaaaab").matches();
boolean b2 = p.matcher("bbbbb").matches();
&lt;/pre&gt;

&lt;h4&gt;Lazy initialization of field&lt;/h4&gt;
&lt;h5&gt;Lazy initialization of instance field using &lt;strong&gt;double-checked locking&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;
Prior to JDK 1.5, double-checked locking is &lt;strong&gt;not&lt;/strong&gt; safe with Java because the reordering of object publication and initialization can not be controlled. But as of JDK 1.5, &lt;strong&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;/strong&gt; is specified not to be reordered, so it become possible to use safely &lt;strong&gt;double-checked locking&lt;/strong&gt; with &lt;strong&gt;volatile&lt;/strong&gt; field.
&lt;/p&gt;
&lt;p&gt;
A typical code would be like this :
&lt;/p&gt;
&lt;pre class="brush:java"&gt;
public class Worker{

   private volatile Resource resource = null; //creating resource is expensive
   private final Object lock = new Object();

   public Resource getResource(){
      Resource r = resource;
      if(r == null){ //first check
         synchronized(lock){
            r = resource;
            if(r == null){ //second check
               resource = r = new Resource();
            }
         }
      }
      return r;
   }
   
   ...
}
&lt;/pre&gt;

&lt;p&gt;
In above sample code, note that the &lt;code&gt;lock&lt;/code&gt; object is define to be &lt;strong&gt;&lt;code&gt;final&lt;/code&gt;&lt;/strong&gt;, because reference on non final field can change any time.&lt;sup&gt;[5]&lt;/sup&gt;


&lt;h5&gt;Lazy initialization of static field using &lt;strong&gt;initialization on demand holder class&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;
On behalf of the characteristics of class loading and static initialization, static field can be safely lazy initialized using holder class without locking.
&lt;/p&gt;
&lt;p&gt;
JVM load classes in lazy way and JVM run static initilizers at class initilization time which is after class loading but before the class is used by any thread. So, the static holder class having static field like the below would be lazy initialized in safe way.
&lt;/p&gt;
&lt;pre class="brush:java"&gt;
public class Worker{

   private static class ResourceHolder{
      public static Resource resource = new Resource();
   }

   public static Resource getResource(){
      return ResourceHolder.resource;
   }
   
   ...
}
&lt;/pre&gt;
&lt;p&gt;

&lt;h5&gt;More readings&lt;/h5&gt;

&lt;ol&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://en.wikipedia.org/wiki/Double-checked_locking'&gt;Double-checked locking&lt;/a&gt; in Wikipedia&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html'&gt;The "Double-Checked Locking is Broken" Declaration&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://gee.cs.oswego.edu/dl/cpj/jmm.html'&gt;Synchronization and the Java Memory Model&lt;/a&gt; by Doug Lea&lt;/li&gt;
   &lt;li&gt;"Item 71 : Use lazy initialization judiciously" of Effective Java, 2nd Ed.&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://javarevisited.blogspot.com/2011/04/synchronization-in-java-synchronized.html'&gt;How Synchronization works in Java ?&lt;/a&gt; by Javin Paul&lt;/li&gt;
&lt;/ol&gt;

&lt;h5&gt;More codes&lt;/h5&gt;

&lt;h6&gt;&lt;code&gt;CommonAnnotationBeanPostProcessor.findResourceMetadata&lt;/code&gt; method of Spring framework&lt;/h6&gt;
&lt;p&gt;
The following code from Spring framework uses double-checked locking for non-volatile field.
&lt;/p&gt;
&lt;p&gt;Is it safe ?&lt;/p&gt;
&lt;p&gt;Assuming &lt;code&gt;ConcurrentHashMap.put&lt;/code&gt; method may not be so complicated to expose stale values to threads and the local codes inside second check block (inner &lt;code&gt;if&lt;/code&gt; clause checking &lt;code&gt;metadata  == null&lt;/code&gt;) would not be reordered with &lt;code&gt;ConcurrentHashMap.put&lt;/code&gt; method execution, the below code could be almost safe ?
&lt;/p&gt;

&lt;pre class="brush:java"&gt;
package org.springframework.context.annotation;

public class CommonAnnotationBeanPostProcessor extends ...{

  ...
  private transient final Map&amp;lt;Class&amp;lt;?&gt;, InjectionMetadata&gt; injectionMetadataCache =
  new ConcurrentHashMap&amp;lt;Class&amp;lt;?&gt;, InjectionMetadata&gt;();

  ...

  private InjectionMetadata findResourceMetadata(final Class clazz) {
    // Quick check on the concurrent map first, with minimal locking.
    InjectionMetadata metadata = this.injectionMetadataCache.get(clazz);
    if (metadata == null) {
      synchronized (this.injectionMetadataCache) {
        metadata = this.injectionMetadataCache.get(clazz);
        if (metadata == null) {
          final InjectionMetadata newMetadata = new InjectionMetadata(clazz);
          ReflectionUtils.doWithFields(clazz, new ReflectionUtils.FieldCallback() {
            public void doWith(Field field) {
              if (webServiceRefClass != null 
                  &amp;&amp; field.isAnnotationPresent(webServiceRefClass)) {
                if (Modifier.isStatic(field.getModifiers())) {
                  throw new IllegalStateException("@WebServiceRef annotation is not supported on static fields");
                }
                newMetadata.addInjectedField(new WebServiceRefElement(field, null));
              }
              else if (ejbRefClass != null 
                  &amp;&amp; field.isAnnotationPresent(ejbRefClass)) {
                if (Modifier.isStatic(field.getModifiers())) {
                  throw new IllegalStateException("@EJB annotation is not supported on static fields");
                }
                newMetadata.addInjectedField(new EjbRefElement(field, null));
              }
              else if (field.isAnnotationPresent(Resource.class)) {
                if (Modifier.isStatic(field.getModifiers())) {
                  throw new IllegalStateException("@Resource annotation is not supported on static fields");
                }
                if (!ignoredResourceTypes.contains(field.getType().getName())) {
                  newMetadata.addInjectedField(new ResourceElement(field, null));
                }
              }
            }
          });
          ReflectionUtils.doWithMethods(clazz, new ReflectionUtils.MethodCallback() {
            public void doWith(Method method) {
              if (webServiceRefClass != null 
                  &amp;&amp; method.isAnnotationPresent(webServiceRefClass) 
                  &amp;&amp;
                  method.equals(ClassUtils.getMostSpecificMethod(method, clazz))) {
                if (Modifier.isStatic(method.getModifiers())) {
                  throw new IllegalStateException("@WebServiceRef annotation is not supported on static methods");
                }
                if (method.getParameterTypes().length != 1) {
                  throw new IllegalStateException("@WebServiceRef annotation requires a single-arg method: " + method);
                }
                PropertyDescriptor pd = BeanUtils.findPropertyForMethod(method);
                newMetadata.addInjectedMethod(new WebServiceRefElement(method, pd));
              }
              else if (ejbRefClass != null &amp;&amp; method.isAnnotationPresent(ejbRefClass) &amp;&amp;
                  method.equals(ClassUtils.getMostSpecificMethod(method, clazz))) {
                if (Modifier.isStatic(method.getModifiers())) {
                  throw new IllegalStateException("@EJB annotation is not supported on static methods");
                }
                if (method.getParameterTypes().length != 1) {
                  throw new IllegalStateException("@EJB annotation requires a single-arg method: " + method);
                }
                PropertyDescriptor pd = BeanUtils.findPropertyForMethod(method);
                newMetadata.addInjectedMethod(new EjbRefElement(method, pd));
              }
              else if (method.isAnnotationPresent(Resource.class) &amp;&amp;
                  method.equals(ClassUtils.getMostSpecificMethod(method, clazz))) {
                if (Modifier.isStatic(method.getModifiers())) {
                  throw new IllegalStateException("@Resource annotation is not supported on static methods");
                }
                Class[] paramTypes = method.getParameterTypes();
                if (paramTypes.length != 1) {
                  throw new IllegalStateException("@Resource annotation requires a single-arg method: " + method);
                }
                if (!ignoredResourceTypes.contains(paramTypes[0].getName())) {
                  PropertyDescriptor pd = BeanUtils.findPropertyForMethod(method);
                  newMetadata.addInjectedMethod(new ResourceElement(method, pd));
                }
              }
            }
          });
          metadata = newMetadata;
          this.injectionMetadataCache.put(clazz, metadata);
        }
      }
    }
    return metadata;
  }    

  ...
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-2741629866816074139?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2741629866816074139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/04/tips-on-java-basic.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2741629866816074139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2741629866816074139'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/04/tips-on-java-basic.html' title='Simple Code Patterns in Java'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3921965022690119599</id><published>2011-04-24T19:18:00.028+09:00</published><updated>2011-07-15T18:19:02.351+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Tips on Spring</title><content type='html'>&lt;h4&gt;Readings : References, Tutorials, Articles&lt;/h4&gt;

&lt;ul type="square"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html'&gt;Distributed transactions in Spring, with and without XA&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.javaworld.com/javaworld/jw-04-2007/jw-04-xa.html'&gt;XA transactions using Spring&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://onjava.com/lpt/a/6469'&gt;J2EE Without the Application Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Schemas for XML based configuration&lt;/h4&gt;

&lt;table border='1' cellpadding='1' cellspacing='0'&gt;
&lt;tr&gt;
  &lt;th&gt;Name&lt;/th&gt;
  &lt;th&gt;Location&lt;/th&gt;
  &lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;beans&lt;/td&gt;
  &lt;td nowrap&gt;&lt;a target='_blank' href='http://www.springframework.org/schema/beans/spring-beans-3.0.xsd'&gt;http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;defines the elements to define beans.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;context&lt;/td&gt;
  &lt;td nowrap&gt;&lt;a target='_blank' href='http://www.springframework.org/schema/context/spring-context-3.0.xsd'&gt;http://www.springframework.org/schema/context/spring-context-3.0.xsd&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;defines the configuration elements for the Spring Framework's application.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;tx&lt;/td&gt;
  &lt;td nowrap&gt;&lt;a target='_blank' href='http://www.springframework.org/schema/tx/spring-tx-3.0.xsd'&gt;http://www.springframework.org/schema/tx/spring-tx-3.0.xsd&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;defines the elements used in the Spring Framework's declarative transaction management infrastructure.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;aop&lt;/td&gt;
  &lt;td nowrap&gt;&lt;a target='_blank' href='http://www.springframework.org/schema/aop/spring-aop-3.0.xsd'&gt;http://www.springframework.org/schema/aop/spring-aop-3.0.xsd&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;defines the configuration elements for the Spring Framework's AOP support.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;mvc&lt;/td&gt;
  &lt;td nowrap&gt;&lt;a target='_blank' href='http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd'&gt;http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;defines elements to configure the annotation-driven Spring MVC Controller programming model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;jee&lt;/td&gt;
  &lt;td nowrap&gt;&lt;a target='_blank' href='http://www.springframework.org/schema/jee/spring-jee-3.0.xsd'&gt;http://www.springframework.org/schema/jee/spring-jee-3.0.xsd&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;defines configuration elements for access to traditional Java EE components such as JNDI resources and EJB session beans.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;jms&lt;/td&gt;
  &lt;td nowrap&gt;&lt;a target='_blank' href='http://www.springframework.org/schema/jms/spring-jms-3.0.xsd'&gt;http://www.springframework.org/schema/jms/spring-jms-3.0.xsd&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;defines the configuration elements for the Spring Framework's JMS support.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;jdbc&lt;/td&gt;
  &lt;td nowrap&gt;&lt;a target='_blank' href='http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd'&gt;http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;defines the configuration elements for the Spring Framework's embedded database support.&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;h4&gt;Configuring Dependency in Maven to Use Auto-detecting and Name-based Auto-wiring of Beans with Spring 3.0&lt;/h4&gt;
&lt;p class='date' align='right'&gt;(2011-04-24)&lt;/p&gt;
&lt;p&gt;
To apply both bean auto-detecting using streotype such as &lt;code&gt;@Component, @Controller, @Services&lt;/code&gt;, or &lt;code&gt;@Repository&lt;/code&gt; and name-based (auto) wiring using &lt;code&gt;@Resource&lt;/code&gt; annotation, you should manually add &lt;strong&gt;&lt;code&gt;cglib&lt;/code&gt;&lt;/strong&gt; into the Maven dependency config.
&lt;/p&gt;
&lt;p&gt;
So, the part of the &lt;code&gt;pom.xml&lt;/code&gt; would like this :
&lt;/p&gt;
&lt;pre class="brush: xml"&gt;
    &lt;dependency&gt;
     &lt;groupId&gt;org.springframework&lt;/groupId&gt;
     &lt;artifactId&gt;spring-core&lt;/artifactId&gt;
     &lt;version&gt;3.0.5.RELEASE&lt;/version&gt;
     &lt;type&gt;jar&lt;/type&gt;
     &lt;scope&gt;compile&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
     &lt;groupId&gt;org.springframework&lt;/groupId&gt;
     &lt;artifactId&gt;spring-context&lt;/artifactId&gt;
     &lt;version&gt;3.0.5.RELEASE&lt;/version&gt;
     &lt;type&gt;jar&lt;/type&gt;
     &lt;scope&gt;compile&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
     &lt;groupId&gt;org.springframework&lt;/groupId&gt;
     &lt;artifactId&gt;spring-aop&lt;/artifactId&gt;
     &lt;version&gt;3.0.5.RELEASE&lt;/version&gt;
     &lt;type&gt;jar&lt;/type&gt;
     &lt;scope&gt;compile&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
     &lt;groupId&gt;org.springframework&lt;/groupId&gt;
     &lt;artifactId&gt;spring-web&lt;/artifactId&gt;
     &lt;version&gt;3.0.5.RELEASE&lt;/version&gt;
     &lt;type&gt;jar&lt;/type&gt;
     &lt;scope&gt;compile&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
     &lt;groupId&gt;org.springframework&lt;/groupId&gt;
     &lt;artifactId&gt;spring-webmvc&lt;/artifactId&gt;
     &lt;version&gt;3.0.5.RELEASE&lt;/version&gt;
     &lt;type&gt;jar&lt;/type&gt;
     &lt;scope&gt;compile&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
     &lt;groupId&gt;cglib&lt;/groupId&gt;
     &lt;artifactId&gt;cglib-nodep&lt;/artifactId&gt;
     &lt;version&gt;2.2&lt;/version&gt;
     &lt;type&gt;jar&lt;/type&gt;
     &lt;scope&gt;compile&lt;/scope&gt;
    &lt;/dependency&gt;
&lt;/pre&gt;

&lt;p&gt;
Note that you need not or &lt;strong&gt;should not&lt;/strong&gt; add &lt;strong&gt;&lt;code&gt;asm&lt;/code&gt;&lt;/strong&gt; into your &lt;code&gt;pom.xml&lt;/code&gt;. Adding &lt;code&gt;asm&lt;/code&gt; make the behavior of the build very confusing to me.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;code&gt;Hibernate 3.x&lt;/code&gt;&lt;/strong&gt; has explicit dependency on &lt;code&gt;asm&lt;/code&gt;. So, when using both &lt;code&gt;Spring 3.0&lt;/code&gt; and &lt;code&gt;Hibernate 3.x&lt;/code&gt; together, it may be very difficult to correctly configure the Maven dependencies.&lt;br/&gt;
For details on this, refere the following : &lt;a target="_blank" href="http://blog.newsplore.com/2009/03/07/upgrading-to-spring-30"&gt;http://blog.newsplore.com/2009/03/07/upgrading-to-spring-30&lt;/a&gt;
&lt;/p&gt;


&lt;h4&gt;Configuring SqlMapClientFactoryBean&lt;/h4&gt;
&lt;p class='date' align='right'&gt;(2009-08-13)&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;SqlMapClientBean&lt;/code&gt; of springframework creates &lt;code&gt;SqlMapClient&lt;/code&gt; with &lt;code&gt;EXTERNAL&lt;/code&gt; transaction management by default and internally wrap the given data source to &lt;code&gt;TransactionAwareDataSourceProxy&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;
So, the typical setup for iBATIS SqlMapClient bean in spring configuration would be like the following.&lt;/p&gt;

&lt;pre class='brush: xml'&gt;
&amp;lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;
 &amp;lt;property name="driverClassName" value="oracle.jdbc.OracleDriver" /&gt;
 &amp;lt;property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" /&gt;
 &amp;lt;property name="username" value="_user_" /&gt;
 &amp;lt;property name="password" value="_passwd_" /&gt;
 &amp;lt;property name="defaultAutoCommit" value="true" /&gt;
 &amp;lt;property name="maxActive" value="10" /&gt;
 &amp;lt;property name="maxIdle" value="10" /&gt;
 &amp;lt;property name="minIdle" value="0" /&gt;
 &amp;lt;property name="initialSize" value="10" /&gt;
&amp;lt;/bean&gt;

&amp;lt;bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt;
 &amp;lt;property name="dataSource" ref="dataSource" /&gt;
 &amp;lt;property name="defaultTimeout" value="120" /&gt;
&amp;lt;/bean&gt;
 
&amp;lt;tx:annotation-driven 
 transaction-manager="transactionManager"
 mode="proxy"
 proxy-target-class="true"
/&gt;

&amp;lt;bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"&gt;
 &amp;lt;description&gt;default SqlMapClient bean for DAOs&amp;lt;/description&gt;
 &amp;lt;property name="configLocation" value="classpath:_pathto_/sql-map.xml" /&gt;
  
 &amp;lt;property name="dataSource" ref="dataSource" /&gt;
 &amp;lt;!-- Default setting is specified for clarity. --&gt;
 &amp;lt;property name="useTransactionAwareDataSource" value="true"/&gt;
 &amp;lt;!-- Default setting is specified for clarity. --&gt;
 &amp;lt;property name="transactionConfigClass"&gt;
  &amp;lt;value type="java.lang.Class"&gt;com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig&lt;/value&gt;
 &amp;lt;/property&gt;

&amp;lt;/bean&gt;
&lt;/bean&gt;
&lt;/pre&gt;
&lt;p&gt;
At the above sample, the default setup for &lt;code&gt;useTransactionAwareDataSource&lt;/code&gt; and &lt;code&gt;transactionConfigClass&lt;/code&gt; properties is specified for clarity.&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;ExternalTransactionConfig&lt;/code&gt; would set the "&lt;code&gt;SetAutoCommitAllowed&lt;/code&gt;" property of &lt;code&gt;SqlMapClient&lt;/code&gt; to false, in contrast to the iBATIS default, to always keep the original autoCommit value as provided by the connection pool.&lt;/p&gt;
&lt;p&gt;
For more information, refer API documentation of &lt;a href='http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/orm/ibatis/SqlMapClientFactoryBean.html' target='_blank'&gt;&lt;code&gt;SqlMapClientFactoryBean&lt;/code&gt;&lt;/a&gt;, specially &lt;code&gt;setDataSource&lt;/code&gt;, &lt;code&gt;setUseTransactionAwareDataSource&lt;/code&gt;, and &lt;code&gt;setTransactionConfigClass&lt;/code&gt; methods.
&lt;/p&gt;


&lt;h4&gt;Annotation Based JMX in Spring Framework 2.5&lt;/h4&gt;
&lt;p class='date' align='right'&gt;(2008-08-04)&lt;/p&gt;
&lt;p&gt;
In spring framework 2.5, to use annotation based JMX

&lt;ol&gt;
&lt;li&gt;The position of the JMX bean definition in bean config&lt;/li&gt;
&lt;li&gt;The type of proxy&lt;/li&gt;
&lt;/ol&gt;
is important.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-3921965022690119599?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3921965022690119599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/04/tips-on-spring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3921965022690119599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3921965022690119599'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/04/tips-on-spring.html' title='Tips on Spring'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-5493264866908726963</id><published>2011-04-20T13:27:00.121+09:00</published><updated>2012-02-03T14:10:34.808+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Readings on Information Technoloby</title><content type='html'>&lt;h4&gt;Computer Science/Programming&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://en.wikipedia.org/wiki/Type_system'&gt;Type System in Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Java SE&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/7/docs/'&gt;Java Platform Standard Edition 7 Documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/6/docs/'&gt;Java SE 6 Documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/1.5.0/docs/'&gt;JDK 5.0 Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.javacodegeeks.com/2010/12/top-10-javacodegeeks-posts-2010.html'&gt;Top 10 JavaCodeGeeks posts for 2010&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://java.sun.com/developer/technicalArticles/Interviews/bloch_effective_08_qa.html'&gt;More Effective Java With Google's Joshua Bloch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://chp.smartlog.dk/dynamicly-change-classpath-at-runtim-post27495'&gt;Dynamically change classpath at runtime&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://mail.openjdk.java.net/pipermail/core-libs-dev/2010-March/003995.html'&gt;Argue against Pair class&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://javarevisited.blogspot.com/2011/04/synchronization-in-java-synchronized.html'&gt;How Synchronization works in Java ? Example of synchronized block&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://jeremymanson.blogspot.com/2007/08/atomicity-visibility-and-ordering.html'&gt;Atomicity, Visibility and Ordering&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Manifest%20Specification'&gt;JAR Manifest Specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://java-source.net/open-source/code-analyzers'&gt;Open Source Code Analyzers in Java&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://java.sun.com/j2se/javadoc/writingapispecs/index.html'&gt;Requirements for Writing Java API Specifications&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://sujitpal.blogspot.com/2006/05/java-data-structure-generic-tree.html'&gt;Java Data Structure: A Generic Tree&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://stackoverflow.com/questions/1356401/generic-tree-implementation-in-java'&gt;Generic tree implementation in Java&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.java-tips.org/java-se-tips/java.lang/binary-search-tree-implementation-in-java.html'&gt;Binary Search Tree Implementation in Java &lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;


&lt;h4&gt;Java EE&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.oracle.com/technetwork/java/javaee/tech/index.html'&gt;Java EE 6 Technologies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.oracle.com/technetwork/java/javaee/tech/javaee5-jsp-135162.html'&gt;Java EE 5 Technologies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://java.sun.com/j2ee/1.4/docs/index.html#specs'&gt;J2EE 1.4 Technologies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul type="square"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.jbesolutions.com/blog/?p=17'&gt;Be careful with Singleton Session Bean&lt;/a&gt; (01/31/2010)&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://onjava.com/pub/a/onjava/2001/04/26/j2ee.html'&gt;J2EE Transaction Frameworks: Building the Framework&lt;/a&gt; (04/26/2001)&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://onjava.com/pub/a/onjava/2001/04/26/j2ee.html'&gt;J2EE Transaction Frameworks: Building the Framework&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://docs.codehaus.org/display/JETTY/Jetty+Documentation'&gt;Jetty 6 Documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://wiki.eclipse.org/Jetty'&gt;Jetty 7 Documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://docs.codehaus.org/display/JETTY/Debugging+with+the+Maven+Jetty+Plugin+inside+Eclipse'&gt;Debugging with the Maven Jetty Plugin inside Eclipse&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://javaadventure.blogspot.com/2010/03/openejb-jetty-and-maven-transaction.html'&gt;OpenEjb, Jetty and Maven - Transaction Management&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://openejb.apache.org/3.0/embedded-configuration.html'&gt;OpenEjb - Embedded Configuration&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;



&lt;h4&gt;Spring&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html'&gt;Distributed transactions in Spring, with and without XA&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.javaworld.com/javaworld/jw-04-2007/jw-04-xa.html'&gt;XA transactions using Spring&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://onjava.com/lpt/a/6469'&gt;J2EE Without the Application Server&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://robertmarkbramprogrammer.blogspot.com/2008/02/nested-property-placeholders-in-spring.html'&gt;Nested Property Placeholders in Spring Configuration &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;AOP&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.eclipse.org/aspectj/doc/released/devguide/ltw.html'&gt;AspectJ Load-Time Weaving&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://docs.jboss.org/aop/1.3/aspect-framework/'&gt;JBossAOP 1.3 Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Testing Frameworks&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html'&gt;Layout Pattern of Log4j&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.mkyong.com/unittest/junit-4-vs-testng-comparison/'&gt;JUnit 4 Vs TestNG – Comparison&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Logging Frameworks&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://wiki.apache.org/commons/Logging/FrequentlyAskedQuestions'&gt;Commons Logging FAQ&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://wiki.apache.org/commons/Logging/StaticLog'&gt;When Static References to Log objects can be used&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://logging.apache.org/log4j/1.2/manual.html'&gt;Short introduction to log4j&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;


&lt;h4&gt;Templating Frameworks&lt;/h4&gt;

&lt;h5&gt;FreeMarker&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://freemarker.sourceforge.net/docs/'&gt;FreeMarker Manual&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://freemarker.sourceforge.net/docs/dgui_template_exp.html'&gt;FreeMarker Expressions&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;  


&lt;h4&gt;HTML&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/standards/techs/html#'&gt;W3C HTML Current Status&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/html401/'&gt;HTML 4.01 Specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/xhtml1/'&gt;XHTML 1.0 Specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/html5/'&gt;HTML5 Specification &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3schools.com/html/'&gt;HTML Tutorial at W3Schools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3schools.com/html5/'&gt;HTML5 Tutorial at W3Schools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.httpwatch.com/httpgallery/introduction/'&gt;HTTP Gallery&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://stackoverflow.com/questions/3379091/is-it-possible-to-change-width-of-tab-symbol-in-textarea'&gt;Is it possible to change width of tab symbol in textarea?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://jszen.blogspot.com/2011/02/why-must-we-still-close-script-elements.html'&gt;Why must we still close SCRIPT elements?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Named Entity&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.htmlhelp.com/reference/html40/entities/'&gt;HTML 4 Entities&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3schools.com/tags/ref_entities.asp'&gt;HTML ISO-8859-1 Reference&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3schools.com/tags/ref_symbols.asp'&gt;HTML Symbol Entities Reference&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references'&gt;List of XML and HTML character entity references&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/REC-html40/sgml/entities.html'&gt;Character entity references in HTML 4 (in HTML 4.01 Specification)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/html5/named-character-references.html'&gt;Named character references (in HTML5 Working Draft)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;CSS&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/standards/techs/css#'&gt;W3C CSS Current Status&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3schools.com/css/'&gt;CSS Tutorial at W3Schools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3schools.com/css3/'&gt;CSS3 Tutorial at W3Schools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/CSS2/selector.html'&gt;CSS2 Selectors (at CSS2 specification)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://reference.sitepoint.com/css/vendorspecific'&gt;Vendor-specific CSS Properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://jonraasch.com/blog/css-rounded-corners-in-all-browsers'&gt;CSS Rounded Corners In All Browsers (With No Images)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://stackoverflow.com/questions/3851635/css-combinator-precedence'&gt;CSS combinator precedence?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='https://developer.mozilla.org/en/Writing_Efficient_CSS'&gt;Writing efficient CSS for use in the Mozilla UI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;JavaScript&lt;/h4&gt;

&lt;ul type='circle'&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml'&gt;Google JavaScript Style Guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3schools.com/js/'&gt;JavaScript Tutorial at W3Schools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://stackoverflow.com/questions/2074982/how-to-insert-script-with-prototype'&gt;How to insert &amp;lt;script&amp;gt; with Prototype?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Multiline_string_literals#Multiline_string_literals'&gt;Multiline string literals in JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;jQuery&lt;/h5&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://api.jquery.com/'&gt;jQuery API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3schools.com/jquery/'&gt;jQuery Tutorial at W3Schools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h6&gt;jQuery Plugins&lt;/h6&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.jstree.com/'&gt;jsTree&lt;/a&gt;&lt;br/&gt;
  a javascript based, cross browser tree component. It is packaged as a jQuery plugin.
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://bassistance.de/jquery-plugins/jquery-plugin-treeview/'&gt;jQuery plugin: Treeview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://bassistance.de/jquery-plugins/jquery-plugin-validation/'&gt;jQuery plugin: Validation&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;XML&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/standards/techs/xml#'&gt;W3C XML Current Status&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/xml/'&gt;XML 1.0 Specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/xml11/'&gt;XML 1.1 Specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/xml-names/'&gt;Namespaces in XML 1.0 Specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/xml-names11/'&gt;Namespaces in XML 1.1 Specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/xpath/'&gt;XPath 1.0 Specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/xpath20/'&gt;XPath 2.0 Specification&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.xfront.com/BestPracticesHomepage.html'&gt;XML Schemas: Best Practices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.xfront.com/Versioning.pdf'&gt;What's the best way to version schemas?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.stylusstudio.com/xmldev/200109/post10080.html'&gt;XML Schemas: Best Practices ? Versioning&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.xfront.com/HideVersusExpose.pdf'&gt;Hide (Localize) Versus Expose Namespaces&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;RELAX NG&lt;/h5&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.relaxng.org/compact-20021121.html'&gt;RELAX NG Compact Syntax&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.relaxng.org/compact-tutorial-20030326.html'&gt;RELAX NG Compact Syntax Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Database&lt;/h4&gt;

&lt;h5&gt;Sybase&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.help.ase.15.5/title.htm'&gt;Documentations for Sybase ASE(Adaptive Server Enterprise) 15.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.sypron.nl/get_ase_soft.html'&gt;Where to get a free copy of Sybase ASE&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32300.1550/html/sqlug/sqlug179.htm'&gt;Subquery restrictions of Sybase ASE 15.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Informix&lt;/h5&gt;

&lt;ul type='circle'&gt;
  &lt;li&gt;&lt;a target='_blank' href=''&gt;Informix Developer Edition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h4&gt;SQL&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href=""&gt;Limiting result rows of &lt;code&gt;SELECT&lt;/code&gt; (from Wikipedia)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Version Control&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://svnbook.red-bean.com/nightly/en/'&gt;Version Control with Subversion 1.8 (draft)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://svnbook.red-bean.com/en/1.6/'&gt;Version Control with Subversion 1.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://svnbook.red-bean.com/en/1.5/'&gt;Version Control with Subversion 1.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://svnbook.red-bean.com/en/1.4/'&gt;Version Control with Subversion 1.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://ximbiot.com/cvs/manual/cvs-1.11.23/cvs.html'&gt;CVS v1.11.23 Official Manual&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='ftp://mf.cai.com/caproducts/cccharvest/r121/Beta/Bookshelf/Bookshelf.html'&gt;CA SCM (Harvest) 12.1 Documentation&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://apollo.ucalgary.ca/tlcprojectswiki/index.php/Public/Project_Versioning_-_Best_Practices'&gt;Public/Project Versioning - Best Practices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2FgettingStarted%2Fqs-64c_catch_sync_view.htm'&gt;Working with conflicting changes&lt;/a&gt;&lt;br/&gt;
'Override and Update' and 'Mark as Merged' in Eclipse's Team CVS plug-in are clearly explained with simple case.
&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.thoughtspark.org/node/38'&gt;Using negative patterns for Subversion's svn:ignore property&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='ftp://mf.cai.com/caproducts/cccharvest/r121/Beta/Bookshelf/Bookshelf_Files/HTML/CA_SCM_Workbench_ENU/index.htm?toc.htm?ignore_files.html'&gt;&lt;strong&gt;&lt;code&gt;.scmignore&lt;/code&gt;&lt;/strong&gt; file of Harvest&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://svnbook.red-bean.com/en/1.4/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate'&gt;Migrating Subversion Repository Data Elsewhere&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h5&gt;Version control policies sample&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://wiki.eclipse.org/M2E_updatesite_and_gittags'&gt;M2E updatesite and gittags&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Wiki&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.mediawiki.org/wiki/MediaWiki'&gt;MediaWiki&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://daringfireball.net/projects/markdown/'&gt;Markdown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.mylyn.wikitext.help.ui/help/Markup-Conversion.html'&gt;Lightweight markup conversion using Eclipse WikiText.&lt;/a&gt;&lt;br/&gt;
  WikiText provides &lt;code&gt;Ant&lt;/code&gt; tasks to convert markups to &lt;code&gt;HTML&lt;/code&gt;, &lt;code&gt;DocBook&lt;/code&gt;, &lt;code&gt;Eclipse help&lt;/code&gt; or &lt;code&gt;XSL-FO&lt;/code&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://texdex.blogspot.com/2011/03/restarting-redmine-without-restarting.html'&gt;Restarting Redmine without restarting Apache&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Textile&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://thresholdstate.com/articles/4312/the-textile-reference-manual'&gt;Official reference manual for Textile 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://textile.thresholdstate.com/'&gt;Online form for trying out Textile 2 syntax&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.textism.com/tools/textile/'&gt;Original Textile&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://redcloth.org/hobix.com/textile/'&gt;Textile Reference&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://redcloth.org/textile'&gt;Textile Reference Manual for RedCloth 4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;UNIX, Linux&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://pubs.opengroup.org/onlinepubs/9699919799/'&gt;POSIX.1-2008&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.samba.org/~cyeoh/pub/fhs-2.3.html'&gt;Filesystem Hierarchy Standard 2.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://cygwin.com/cygwin-ug-net/cygwin-ug-net.html'&gt;Cygwin User's Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Shell&lt;/h5&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://steve-parker.org/sh/thompson.shtml'&gt;Ken Thompson's original documentation for the Unix shell&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://steve-parker.org/sh/bourne.shtml'&gt;This is an HTMLized version of Steve Bourne's original shell tutorial&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://en.wikipedia.org/wiki/Comparison_of_command_shells'&gt;Comparison of command shells&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html'&gt;Bash Guide for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://stefaanlippens.net/bashrc_and_others'&gt;Bash: about .bashrc, .bash_profile, .profile, /etc/profile, etc/bash.bashrc and others&lt;/a&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/8559058673267774097-5493264866908726963?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/5493264866908726963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/04/readings.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5493264866908726963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5493264866908726963'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/04/readings.html' title='Readings on Information Technoloby'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2766365734778434056</id><published>2011-04-15T02:25:00.012+09:00</published><updated>2011-06-29T01:11:02.034+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Diagrams for Spring Framework</title><content type='html'>&lt;h4&gt;Resources&lt;/h4&gt;

&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-m0NuKgubSZA/TacuN_gJttI/AAAAAAAAAUg/MtNK23LU6cE/s1600/spring-resources.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="https://lh4.googleusercontent.com/_AwqT7QXnv8Q/TacuN_gJttI/AAAAAAAAAUg/vaft7YVlaHc/spring-resources.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5595491879950595794" /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;h4&gt;Task Executors&lt;/h4&gt;

&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-6tiQImx0DGc/Tgn7X0_ENkI/AAAAAAAAAWw/ZcDVeqB8vqg/s1600/spring-task-executor-structure.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="https://lh5.googleusercontent.com/-6tiQImx0DGc/Tgn7X0_ENkI/AAAAAAAAAWw/ZcDVeqB8vqg/s1152/spring-task-executor-structure.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5623301996527498818" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-2766365734778434056?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2766365734778434056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/04/diagrams-for-spring-framework.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2766365734778434056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2766365734778434056'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/04/diagrams-for-spring-framework.html' title='Diagrams for Spring Framework'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/_AwqT7QXnv8Q/TacuN_gJttI/AAAAAAAAAUg/vaft7YVlaHc/s72-c/spring-resources.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-1502631591598525095</id><published>2011-03-29T12:38:00.007+09:00</published><updated>2011-04-07T23:15:49.955+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>Tips on MySQL</title><content type='html'>&lt;h4&gt;Readings and References&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://dev.mysql.com/doc/refman/5.0/en/mysqld-option-tables.html'&gt;MySQL 5.0 : server option and variable reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Notable Options&lt;/h4&gt;

&lt;h5&gt;MySQL 5.0&lt;/h5&gt;
&lt;p&gt;
Maybe the most common options to customize are storage engine, character set, location of data and log files with your MySQL instance.
&lt;/p&gt;
&lt;p&gt;
You can change location of your data files using &lt;code&gt;datadir&lt;/code&gt; option. But you should copy the entire contents of the &lt;code&gt;data&lt;/code&gt; directory under the installation of your MySQL to the new location.&lt;br/&gt;
Default storage engine and character set for your schemas and tables can be specified using &lt;code&gt;default-storage-engine&lt;/code&gt; and &lt;code&gt;character-set-server&lt;/code&gt; options.&lt;br/&gt;
In case of InnoDB, you can specifiy the location of log files and their archives using &lt;code&gt;innodb_log_group_home_dir&lt;/code&gt; and &lt;code&gt;innodb_log_arch_dir&lt;/code&gt; options.
&lt;/p&gt;

&lt;pre class='brush: plain'&gt;
datadir = D:\home\mysql\5.0\data/
default-storage-engine = innodb
lower_case_table_names = 2

character-set-server = utf8
character-set-filesystem = utf8
collation-server = utf8_general_ci

innodb_data_file_path = ibdata1:30M:autoextend
innodb_log_group_home_dir = D:\home\mysql\5.0\log/
innodb_log_arch_dir = D:\home\mysql\5.0\log/
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-1502631591598525095?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/1502631591598525095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/03/tips-on-mysql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1502631591598525095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1502631591598525095'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/03/tips-on-mysql.html' title='Tips on MySQL'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-1471645820470742507</id><published>2011-03-18T09:32:00.016+09:00</published><updated>2011-11-01T10:17:00.770+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Naming Schema Namespace and Location</title><content type='html'>&lt;h4&gt;Samples on Well-known Schemas&lt;/h4&gt;

&lt;table border='1' cellpadding='1' cellspacing='0'&gt;
&lt;tr&gt;
  &lt;th&gt;Schema for&lt;/th&gt;
  &lt;th&gt;Schema file&lt;/th&gt;
  &lt;th&gt;Applied to&lt;/th&gt;
  &lt;th&gt;Namespace&lt;/th&gt;
  &lt;th&gt;Location&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;J2EE web application 2.4 deployment descriptor&lt;/td&gt;
  &lt;td&gt;web-app_2_4.xsd&lt;/td&gt;
  &lt;td&gt;web.xml&lt;/td&gt;
  &lt;td&gt;http://java.sun.com/xml/ns/j2ee&lt;/td&gt;
  &lt;td&gt;&lt;a target="_blank" href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;J2EE web application 2.5 deployment descriptor&lt;/td&gt;
  &lt;td&gt;web-app_2_4.xsd&lt;/td&gt;
  &lt;td&gt;web.xml&lt;/td&gt;
  &lt;td&gt;http://java.sun.com/xml/ns/javaee&lt;/td&gt;
  &lt;td&gt;&lt;a target="_blank" href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&gt;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;EJB 2.1 deployment descriptor&lt;/td&gt;
  &lt;td&gt;ejb-jar_2_1.xsd&lt;/td&gt;
  &lt;td&gt;ejb-jar.xml&lt;/td&gt;
  &lt;td&gt;http://java.sun.com/xml/ns/j2ee&lt;/td&gt;
  &lt;td&gt;&lt;a target="_blank" href="http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"&gt;http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;EJB 3.0 deployment descriptor&lt;/td&gt;
  &lt;td&gt;ejb-jar_3_0.xsd&lt;/td&gt;
  &lt;td&gt;ejb-jar.xml&lt;/td&gt;
  &lt;td&gt;java.sun.com/xml/ns/javaee&lt;/td&gt;
  &lt;td&gt;&lt;a target="_blank" href="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"&gt;http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Spring 2.5 IoC configuration&lt;/td&gt;
  &lt;td&gt;spring-beans-2.5.xsd&lt;/td&gt;
  &lt;td&gt;...&lt;/td&gt;
  &lt;td&gt;http://www.springframework.org/schema/beans&lt;/td&gt;
  &lt;td&gt;&lt;a target="_blank" href="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"&gt;http://www.springframework.org/schema/beans/spring-beans-2.5.xsd&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Spring 3.0 IoC configuration&lt;/td&gt;
  &lt;td&gt;spring-beans-3.0.xsd&lt;/td&gt;
  &lt;td&gt;...&lt;/td&gt;
  &lt;td&gt;http://www.springframework.org/schema/beans&lt;/td&gt;
  &lt;td&gt;&lt;a target="_blank" href="http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&gt;http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Spring 2.5 AOP configuration&lt;/td&gt;
  &lt;td&gt;spring-aop-2.5.xsd&lt;/td&gt;
  &lt;td&gt;...&lt;/td&gt;
  &lt;td&gt;http://www.springframework.org/schema/aop&lt;/td&gt;
  &lt;td&gt;&lt;a target="_blank" href="http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"&gt;http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Spring 3.0 AOP configuration&lt;/td&gt;
  &lt;td&gt;spring-aop-3.0.xsd&lt;/td&gt;
  &lt;td&gt;...&lt;/td&gt;
  &lt;td&gt;http://www.springframework.org/schema/aop&lt;/td&gt;
  &lt;td&gt;&lt;a target="_blank" href="http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"&gt;http://www.springframework.org/schema/aop/spring-aop-3.0.xsd&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h4&gt;Related Element and Attribute&lt;/h4&gt;

&lt;h5&gt;Example : Spring 3.0 IoC configuration&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;Schema : &lt;code&gt;&lt;strong&gt;spring-beans-2.5.xsd&lt;/strong&gt;&lt;/code&gt;
    &lt;pre class='brush: xml'&gt;
&amp;lt;xsd:schema targetNamespace="http://www.springframework.org/schema/beans"&gt;
  &amp;lt;xsd:import namespace="http://www.w3.org/XML/1998/namespace"/&gt;
...
&amp;lt;/xsd:schema&gt;
    &lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;XML
    &lt;pre class="brush: xml"&gt;
&amp;lt;beans xmlns="http://www.springframework.org/schema/beans" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:aop="http://www.springframework.org/schema/aop" 
 xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
 default-lazy-init="false"&gt;
...
&amp;lt;/beans&gt;
    &lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Example : EJB 3.0 deployment descriptor&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;Schema : &lt;code&gt;&lt;strong&gt;ejb-jar_3_0.xsd&lt;/strong&gt;&lt;/code&gt;
    &lt;pre class='brush: xml'&gt;
&amp;lt;xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://java.sun.com/xml/ns/javaee"
    xmlns:javaee="http://java.sun.com/xml/ns/javaee"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    version="3.0"&gt;
...
&amp;lt;/xsd:schema&gt;
    &lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;XML
    &lt;pre class='brush: xml'&gt;
&amp;lt;ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
    version="3.0"&gt;
...
&amp;lt;/ejb-jar&gt;
    &lt;/pre&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/8559058673267774097-1471645820470742507?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/1471645820470742507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/03/naming-schema-namespace-and-location.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1471645820470742507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1471645820470742507'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/03/naming-schema-namespace-and-location.html' title='Naming Schema Namespace and Location'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-7208623578042996665</id><published>2011-03-15T00:11:00.014+09:00</published><updated>2012-01-19T14:25:52.591+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Readings on Eclipse Programming</title><content type='html'>&lt;h4&gt;Overall&lt;/h4&gt;

&lt;h5&gt;Help Center&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://help.eclipse.org/helios/'&gt;Eclipse Helios (3.6) HTML Help Center&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://help.eclipse.org/galileo/'&gt;Eclipse Galileo (3.5) HTML Help Center&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://help.eclipse.org/ganymede/'&gt;Eclipse Ganymede (3.4) HTML Help Center&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://help.eclipse.org/help33/'&gt;Eclipse Europa (3.3) HTML Help Center&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;  

&lt;h5&gt;Development Conventions and Guidelines&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://wiki.eclipse.org/Naming_Conventions'&gt;Naming Conventions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://wiki.eclipse.org/Coding_Conventions'&gt;Coding Conventions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://wiki.eclipse.org/User_Interface_Guidelines'&gt;User Interface Guidelines&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://wiki.eclipse.org/Eclipse_Doc_Style_Guide'&gt;Doc Style Guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://wiki.eclipse.org/Version_Numbering'&gt;Version Numbering Guidelines&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Tutorials &amp;amp; Articles&lt;/h5&gt;

&lt;ul type='circle'&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.eclipse.org/resources/'&gt;Eclipse resources at eclipse.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://stackoverflow.com/questions/952290/how-do-i-save-eclipse-launch-profiles-across-workspaces'&gt;How do I save Eclipse launch profiles across workspaces?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://eclipsesnippets.blogspot.com/2007/07/tip-creating-and-sharing-launch.html'&gt;Creating and Sharing Launch Configurations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Platform &amp;amp; RCP&lt;/h4&gt;

&lt;h5&gt;API&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://help.eclipse.org/helios/nftopic/org.eclipse.platform.doc.isv/reference/api/index.html'&gt;Eclipse Platform 3.6 API Specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://help.eclipse.org/helios/nftopic/org.eclipse.platform.doc.isv/reference/extension-points/index.html'&gt;Eclipse Platform
 3.6 Extension Points Reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;  

&lt;h5&gt;Tutorials &amp;amp; Articles&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.vogella.de/articles/EclipseDataBinding/'&gt;JFace Data Binding - Tutorial&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.vogella.de/articles/EclipseRCP/article.html'&gt;Eclipse RCP Tutorial by Lars Vogel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;  


&lt;h4&gt;EMF&lt;/h4&gt;

&lt;h5&gt;API&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.eclipse.org/modeling/emf/emf/javadoc/2.6.0/'&gt;EMF 2.6 API Specification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Tutorials &amp;amp; Articles&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.vogella.de/articles/EclipseEMF/'&gt;Eclipse Modeling Framework(EMF) Tutorial by Lars Vogel&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.openarchitectureware.org/pub/documentation/4.3.1/html/contents/'&gt;openArchitectureWare User Guide&lt;/a&gt;&lt;br/&gt;
  contains EMF tutorial, Xtext tutorial, samples and so on.
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://robot.dataslab.com/index.php5/EMF_Tutorial'&gt;EMF Tutorial on Robowiki&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;GEF&lt;/h4&gt;

&lt;h5&gt;Tutorials &amp;amp; Articles&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.vogella.de/articles/EclipseZest/article.html'&gt;Eclipse Zest Tutorial by Lars Vogel&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Mylyn&lt;/h4&gt;

&lt;h5&gt;Tutorials &amp;amp; Articles&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://help.tasktop.com/help/topic/org.eclipse.mylyn.help.ui/Mylyn/User_Guide/Task-Repository-Connectors.html#Generic_Web_Templates_Connector'&gt;Generic Web Templates Connector&lt;/a&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/8559058673267774097-7208623578042996665?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/7208623578042996665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/03/readings-on-eclipse-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7208623578042996665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7208623578042996665'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/03/readings-on-eclipse-programming.html' title='Readings on Eclipse Programming'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3247059963776814645</id><published>2011-03-09T14:09:00.006+09:00</published><updated>2011-03-10T10:45:50.672+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Tips on Security with Java</title><content type='html'>&lt;h4&gt;Symmetric encryption based Encryptor/Decryptor&lt;/h4&gt;

&lt;p&gt;
Most of cases with moderate requirement on security, I think, private key based encryption is well-suited. Non-secure encoding such as Base64 or Quoted-Printable encoding seems dangerous but, public key based encryption seems too costly.&lt;br/&gt;
I couldn't find well-shaped and trusty library on private key based encryption until recently. Today I have found such a one within &lt;b&gt;&lt;code&gt;Spring Security&lt;/code&gt;&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;Spring Security&lt;/code&gt; provides 
&lt;ul&gt;
   &lt;li&gt;private key based bytes encryptor, text encryptor&lt;/li&gt;
   &lt;li&gt;factory class for encryptors&lt;/li&gt;
   &lt;li&gt;key generators to provide keys to encryptor&lt;/li&gt;
   &lt;li&gt;password encoders which use one way encoding algorithm such as hashing.&lt;/li&gt;
&lt;/ul&gt;

The API is not so complicated as &lt;code&gt;javax.crpyto&lt;/code&gt; but enough for general purpose.
&lt;/p&gt;

&lt;p&gt;
For more details, you can refer the followings.
&lt;/p&gt;

&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://static.springsource.org/spring-security/site/docs/3.1.x/reference/crypto.html'&gt;Spring Security Crypto Module&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://static.springsource.org/spring-security/site/docs/3.1.x/apidocs/org/springframework/security/crypto/encrypt/package-summary.html'&gt;&lt;code&gt;org.springframework.security.crypto.encrypt&lt;/code&gt; API&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://static.springsource.org/spring-security/site/docs/3.1.x/apidocs/org/springframework/security/crypto/keygen/package-summary.html'&gt;&lt;code&gt;org.springframework.security.crypto.keygen&lt;/code&gt; API&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://static.springsource.org/spring-security/site/docs/3.1.x/apidocs/org/springframework/security/crypto/password/package-summary.html'&gt;&lt;code&gt;org.springframework.security.crypto.password&lt;/code&gt; API&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://static.springsource.org/spring-security/site/docs/3.1.x/apidocs/org/springframework/security/crypto/util/package-summary.html'&gt;&lt;code&gt;org.springframework.security.crypto.util&lt;/code&gt; API&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://static.springsource.org/spring-security/'&gt;Spring Security&lt;/a&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/8559058673267774097-3247059963776814645?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3247059963776814645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2011/03/tips-on-security-with-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3247059963776814645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3247059963776814645'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2011/03/tips-on-security-with-java.html' title='Tips on Security with Java'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3390672350914243704</id><published>2010-12-28T17:26:00.004+09:00</published><updated>2011-05-12T00:47:20.025+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Constructing BigDecimal</title><content type='html'>&lt;p&gt;
The code is : 
&lt;/p&gt;

&lt;pre class='brush: java'&gt;
public void testDoubleToBigDecimalViaString(){
  
  double d = 0.1;
  double e = 0.11;
  double f = e - d;
//  MathContext mc1 = MathContext.DECIMAL32;
//  MathContext mc2 = MathContext.UNLIMITED;
  MathContext mc1 = new MathContext(7);
  MathContext mc2 = new MathContext(34);
  
  BigDecimal bd1 = new BigDecimal(d);
  BigDecimal bd2 = new BigDecimal(String.valueOf(d));
  
  System.out.println("bd1 = " + bd1.toString());
  System.out.println("bd2 = " + bd2.toString());

  BigDecimal bd9 = new BigDecimal(d, mc1);
  BigDecimal bd10 = new BigDecimal(String.valueOf(d), mc1);
  
  System.out.println("bd9 = " + bd9.toString());
  System.out.println("bd10 = " + bd10.toString());

  BigDecimal bd11 = new BigDecimal(d, mc2);
  BigDecimal bd12 = new BigDecimal(String.valueOf(d), mc2);
  
  System.out.println("bd11 = " + bd11.toString());
  System.out.println("bd12 = " + bd12.toString());
  
  
  
  BigDecimal bd3 = new BigDecimal(f);
  BigDecimal bd4 = new BigDecimal(String.valueOf(f));
  
  System.out.println("bd3 = " + bd3.toString());
  System.out.println("bd4 = " + bd4.toString());

  BigDecimal bd5 = new BigDecimal(f, mc1);
  BigDecimal bd6 = new BigDecimal(String.valueOf(f), mc1);
  
  System.out.println("bd5 = " + bd5.toString());
  System.out.println("bd6 = " + bd6.toString());

  BigDecimal bd7 = new BigDecimal(f, mc2);
  BigDecimal bd8 = new BigDecimal(String.valueOf(f), mc2);
  
  System.out.println("bd7 = " + bd7.toString());
  System.out.println("bd8 = " + bd8.toString());
}
&lt;/pre&gt;

&lt;p&gt;
The result with Sun JDK 1.6 is :
&lt;/p&gt;

&lt;pre class='code'&gt;&lt;code&gt;
bd1 = 0.1000000000000000055511151231257827021181583404541015625
bd2 = 0.1
bd9 = 0.1000000
bd10 = 0.1
bd11 = 0.1000000000000000055511151231257827
bd12 = 0.1
bd3 = 0.00999999999999999500399638918679556809365749359130859375
bd4 = 0.009999999999999995
bd5 = 0.01000000
bd6 = 0.01000000
bd7 = 0.009999999999999995003996389186795568
bd8 = 0.009999999999999995
&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/8559058673267774097-3390672350914243704?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3390672350914243704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/12/constructing-bigdecimal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3390672350914243704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3390672350914243704'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/12/constructing-bigdecimal.html' title='Constructing BigDecimal'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2734316381985057447</id><published>2010-12-14T01:28:00.007+09:00</published><updated>2011-03-23T20:48:45.624+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tuning'/><title type='text'>Thread Dump</title><content type='html'>&lt;h4&gt;Generating Thread Dump&lt;/h4&gt;

&lt;h5&gt;Sun JDK&lt;/h5&gt;
&lt;p&gt;
The following is quoted from &lt;a target='_blank' href='http://download.oracle.com/javase/6/docs/technotes/guides/management/MonitoringGuide.pdf'&gt;J2SE 5.0 Troubleshooting and Diagnostic Guide&lt;/a&gt;.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;span style='font-size:larger;font-weight:bold'&gt;1.16 Ctrl-Break Handler&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
On Solaris or Linux the HotSpot VM will print a thread dump to the application's standard output if the Ctrl and \ keys are pressed. The thread dump consists of the thread stack for all Java threads in the VM. On Windows the equivalent key sequence is the Ctrl and Break keys. The thread dump doesn't terminate the application – it continues after the thread information is printed.&lt;br/&gt;
On Solaris and Linux a thread dump is also printed if the J2SE process receives a QUIT signal. So kill &lt;i&gt;-QUIT&lt;/i&gt; &amp;lt;pid&amp;gt; causes the process with id &amp;lt;pid&amp;gt; to print a thread dump to its standard output.&lt;br/&gt;
In addition to the thread stacks, the ctrl-break handler also executes a deadlock detection algorithm. If any deadlocks are detected then it prints out additional information on each deadlocked thread.&lt;br/&gt;
&lt;/blockquote&gt;



&lt;h5&gt;IBM Java SDK&lt;/h5&gt;
&lt;p&gt;
The following is quoted from &lt;a target='_blank' href='http://download.boulder.ibm.com/ibmdl/pub/software/dw/jdk/diagnosis/diag60.pdf'&gt;IBM Java SDK Diagnostics Guide 6&lt;/a&gt;.
&lt;/p&gt;
&lt;blockquote&gt;
&lt;span style='font-size:larger;font-weight:bold'&gt;Chapter 25. Using Javadump&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
...
&lt;br/&gt;&lt;br/&gt;
The signal for Linux, AIX and z/OS is SIGQUIT. Use the command kill -QUIT n to send the signal to a process with process id (PID) n. Alternatively, press &lt;strong&gt;&lt;code&gt;CTRL+\&lt;/code&gt;&lt;/strong&gt; in the shell window that started Java.(&lt;strong&gt;&lt;code&gt;CTRL+V&lt;/code&gt;&lt;/strong&gt; on z/OS.)
&lt;br/&gt;
The signal for AIX is SIGQUIT. Use the command kill -QUIT n to send the signal to a process with process id (PID) n. Alternatively, press &lt;strong&gt;&lt;code&gt;CTRL+\&lt;/code&gt;&lt;/strong&gt; in the shell window that started Java.
&lt;br/&gt;
In Windows, the dump is initiated by using &lt;strong&gt;&lt;code&gt;CTRL+Break&lt;/code&gt;&lt;/strong&gt; in the command window that started Java.
&lt;br/&gt;
The signal for i5/OS is SIGQUIT. Use the command kill -QUIT n to send the signal to a process with process id (PID) n. The PID for a particular JVM can be found in the joblog for the job (JVAB56D: Java Virtual Machine is IBM Technology for Java. PID(x)), or using the "ps" command from qsh or an i5/OS PASE shell.
&lt;br/&gt;
The JVM will continue operation after the signal has been handled.
&lt;/blockquote&gt;


&lt;h4&gt;Obtaining Clue on OOM(OutOfMemory) Error&lt;/h4&gt;

&lt;p&gt;
OutOfMemoryError is one of the most terrible problems. To prevent it from occurring again, it is very important to identify the cause. The heap dump at the time of error maybe provide the most exact cause to the error.
With JDK 1.5 or higher, you can use the following options with JVM to obtain the heap dump at the time when OutOfMemoryError ocurrs.
&lt;/p&gt;
&lt;pre class='code'&gt;&lt;code class='script'&gt;
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=&lt;i&gt;path-of-dump-to-generate&lt;/i&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
One thing that needs to be considered more is that the above options derive how much overhead or side effects. I don't have any idea about it, and so I have no confidence where the above options can be safely used in production environment. To confirm using in production environment, more thorough research is necessary.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-2734316381985057447?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2734316381985057447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/12/thread-dump.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2734316381985057447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2734316381985057447'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/12/thread-dump.html' title='Thread Dump'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-6731533842691916972</id><published>2010-12-09T10:44:00.010+09:00</published><updated>2010-12-10T20:36:20.166+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tuning'/><title type='text'>HotSpot VM Tuning</title><content type='html'>&lt;h4&gt;Articles&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.express.doc/info/exp/ae/tprf_hotspot_jvm.html'&gt;Tuning HotSpot Java virtual machines (Solaris &amp; HP-UX)&lt;/a&gt; (from documentation of WebSphere 7.0)
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.express.doc/info/exp/ae/rprf_hotspot_parms.html'&gt;Sun HotSpot JVM tuning parameters (Solaris and HP-UX)&lt;/a&gt; (from documentation of WebSphere 7.0)
  &lt;/li&gt;

  &lt;li&gt;&lt;a target='_blank' href='http://www.javaworld.com/community/node/2352'&gt;My Favorite Hotspot JVM Flags&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;



&lt;h4&gt;Identifying Current/Min/Max Size of Young and Old Generation&lt;/h4&gt;

&lt;p&gt;
You can identify details of memory usage such as min./max. size of old generation, current size of eden space and current size young generation on a running VM instance using &lt;code&gt;jstat&lt;/code&gt; command.
&lt;/p&gt;
&lt;p&gt;
For example, the VM launched with the following option.
&lt;/p&gt;
&lt;pre class='code'&gt;&lt;code class='syntax'&gt;
-Xms128m -Xmx256m -XX:MaxPermSize=256M -server -XX:+UseParallelGC -XX:NewRatio=2 -XX:SurvivorRatio=8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
Shows the following information with &lt;strong&gt;&lt;code&gt;jstat -gccapacity -h5 3680 5s&lt;/code&gt;&lt;/strong&gt;.
&lt;/p&gt;
&lt;pre class='code'&gt;&lt;code class='syntax'&gt;
C:\lang\jdk1.6\bin&gt;jstat -gccapacity -h5 3680 5s
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC
    PC     YGC    FGC
 43648.0  87360.0  43648.0 4480.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     48     3
 43648.0  87360.0  43648.0 4480.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     48     3
 43648.0  87360.0  43648.0 4480.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     48     3
 43648.0  87360.0  43648.0 4480.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     48     3
 43648.0  87360.0  43648.0 4480.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     48     3
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC
    PC     YGC    FGC
 43648.0  87360.0  43648.0 4352.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     49     3
 43648.0  87360.0  43648.0 4352.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     49     3
 43648.0  87360.0  43648.0 4352.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     49     3
 43648.0  87360.0  43648.0 4352.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     49     3
 43648.0  87360.0  43648.0 4352.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     49     3
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC
    PC     YGC    FGC
 43648.0  87360.0  43648.0 4352.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     49     3
 43648.0  87360.0  43648.0 4352.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     49     3
 43648.0  87360.0  43648.0 4352.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     49     3
 43648.0  87360.0  43648.0 4352.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     49     3
 43648.0  87360.0  43648.0 4352.0 4416.0  34752.0    87424.0   174784.0   116608.0   116608.0  16384.0 262144.0 103936.0
 103936.0     49     3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
You can identify the above statistics in visual form using &lt;code&gt;visualgc&lt;/code&gt;. &lt;code&gt;visualgc&lt;/code&gt; is provided as a plugin of &lt;code&gt;VisualVM&lt;/code&gt;.
&lt;/p&gt;

&lt;h5&gt;References&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://java.sun.com/performance/jvmstat/'&gt;&lt;code&gt;jvmstat home&lt;/code&gt;&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/6/docs/technotes/tools/share/jstat.html'&gt;&lt;code&gt;jstat&lt;/code&gt; reference&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://java.sun.com/performance/jvmstat/visualgc.html'&gt;&lt;code&gt;visualgc&lt;/code&gt; reference&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='https://visualvm.dev.java.net/plugins.html'&gt;Plugins of VisualVM&lt;/a&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/8559058673267774097-6731533842691916972?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/6731533842691916972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/12/hotspot-vm-tuning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6731533842691916972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6731533842691916972'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/12/hotspot-vm-tuning.html' title='HotSpot VM Tuning'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-7194737114562983193</id><published>2010-12-08T10:19:00.023+09:00</published><updated>2011-11-22T20:07:33.152+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java EE'/><title type='text'>Notable Principles of J2EE Specs</title><content type='html'>&lt;h4&gt;Session Bean's Business Interface of EJB 3.x&lt;/h4&gt;
&lt;p align='right'&gt;&lt;i&gt;from Enterprise JavaBeans Version 3.1 EJB Core Contracts and Requirements&lt;/i&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The interface msut not extend the &lt;code&gt;javax.ejb.EJBObject&lt;/code&gt; or &lt;code&gt;javax.ejb.EJBLocalObject&lt;/code&gt; interface.
  &lt;/li&gt;
  &lt;li&gt;If the business interface is a remote business interface, the argument and return value must be a valid type for RMI/IIOP. The remote business interface is not required or expected to be a &lt;code&gt;java.rmi.Remote&lt;/code&gt; interface. The &lt;code&gt;throw&lt;/code&gt; clause should not include the &lt;code&gt;java.rmi.RemoteException&lt;/code&gt;. The method of the business interface may only throw the &lt;code&gt;java.rmi.RemoteException&lt;/code&gt; if the interface extends &lt;code&gt;java.rmi.Remote&lt;/code&gt;.
  &lt;/li&gt;
  &lt;li&gt;The interface is allowed to have superinterfaces.&lt;/li&gt;
  &lt;li&gt;If the interface is a remote business interface, its method must not expose local interface types, timers or timer handles, or the managed collection classes that are used for EJB 2.1 entity beans with container-managed persistence as arguments or results.
  &lt;/li&gt;
  &lt;li&gt;
The bean class must implement the interface or the interfaces must be designated  as a local or remote business interface of the bean by means of the &lt;code&gt;Local&lt;/code&gt; and &lt;code&gt;Remote&lt;/code&gt; annotation or in the deployment descriptor. The following rules apply:
  &lt;ul&gt;
    &lt;li&gt;If the bean does not expose any other client view (Local, Remote, Non-interface, 2.x Remote Home, 2.x Local Home, Web Service) and the bean class implements a single interface, that interface is assumed to be the business interface of the bean. This business interface will be a local interface unless the interface is designated as a remote business interface by use of &lt;code&gt;Remote&lt;/code&gt; annotation on the bean class or interface or by means of the deployment descriptor.
    &lt;/li&gt;
    &lt;li&gt;A bean class is permitted to have more than one interface. If a bean class has more than one interface-excluding the interface listed below-any business interface of the bean class must be explicitly designated as a business interface of the bean by means of the &lt;code&gt;Local&lt;/code&gt; or &lt;code&gt;Remote&lt;/code&gt; annotation on the bean class or interface or in the deployment descriptor.
    &lt;/li&gt;
    &lt;li&gt;The following interfaces are excluded when determining whether the bean class has more than one interface: &lt;code&gt;java.io.Serializable&lt;/code&gt;; &lt;code&gt;java.io.Externalizable&lt;/code&gt;; any of the interfaces defined by &lt;code&gt;javax.ejb&lt;/code&gt; package.
    &lt;/li&gt;
    &lt;li&gt;The same business interface cannot be both a local and a remote business interface of the bean. It is also an error if the &lt;code&gt;Local&lt;/code&gt; and/or &lt;code&gt;Remote&lt;/code&gt; annotations are specified both on the bean class and on the referenced interface and the values differ.
    &lt;/li&gt;
    &lt;li&gt;While it is expected that the bean class will typically implement its business interface(s), if the bean class uses annotations or the deployment descriptor to designate its business interface(s), it is not required that the bean class also be specified as implementing the interface(s).
    &lt;/li&gt;
  &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Application Exception of EJB 3.x&lt;/h4&gt;
&lt;p align='right'&gt;&lt;i&gt;from Enterprise JavaBeans Version 3.1 EJB Core Contracts and Requirements&lt;/i&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Application exceptions that are checked exceptions may be defined as such by being listed in the &lt;code&gt;throws&lt;/code&gt; clauses of the method of the bean's business interface, no-interface view, home interface, component interface, and web service endpoint. An application exception that is an unchecked exception is defined as an application exception by annotating it with the &lt;code&gt;ApplicationException&lt;/code&gt; metadata annotation, or denoting it in the deployment descriptor with the &lt;code&gt;application-exception&lt;/code&gt; element.
  &lt;/li&gt;An application exception does not automatically result in marking the transaction for rollback unless the &lt;code&gt;ApplicationException&lt;/code&gt; annotation is applied to the exception class and is specified with the &lt;code&gt;rollback&lt;/code&gt; element value &lt;code&gt;true&lt;/code&gt; or the &lt;code&gt;application-exception&lt;/code&gt; deployment descriptor element for the exception specifies the &lt;code&gt;rollback&lt;/code&gt; element as &lt;code&gt;true&lt;/code&gt;. The &lt;code&gt;rollback&lt;/code&gt; subelement of the the &lt;code&gt;application-exception&lt;/code&gt; deployment descriptor element may be explicitly specified to override the &lt;code&gt;rollback&lt;/code&gt; value specified or defaulted by the &lt;code&gt;ApplicationException&lt;/code&gt; annotation.
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Specification for Exception Handling with EJB&lt;/h4&gt;

&lt;h5&gt;System Exception with EJB 2.x&lt;/h5&gt;
&lt;p align='right'&gt;&lt;i&gt;from Chapter 18. Exception Handling of Enterprise JavaBeans Specification Version 2.1 &lt;/i&gt;&lt;/p&gt;

&lt;h6&gt;When bean method runs in the context of the caller's transaction&lt;/h6&gt;
&lt;p&gt;This case may happen with &lt;strong&gt;&lt;code&gt;Required&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Mandatory&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;Supports&lt;/code&gt;&lt;/strong&gt; attributes.&lt;/p&gt;
&lt;dl&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Container's action&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
    &lt;ol&gt;
      &lt;li&gt;Log the exception or error.&lt;/li&gt;
      &lt;li&gt;Mark the transaction for rollback.&lt;/li&gt;
      &lt;li&gt;Discard instance.&lt;/li&gt;
      &lt;li&gt;Throw &lt;strong&gt;&lt;code&gt;javax.transaction.TransactionRolledbackException&lt;/code&gt;&lt;/strong&gt; to remote client or throw &lt;strong&gt;&lt;code&gt;javax.ejb.TransactionRolledbackLocalException&lt;/code&gt;&lt;/strong&gt; to local client.
      &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p&gt;Note that while &lt;a target='_blank' href='http://download.oracle.com/javaee/1.4/api/javax/ejb/TransactionRolledbackLocalException.html'&gt;&lt;code&gt;TransactionRolledbackLocalException&lt;/code&gt;&lt;/a&gt; can nest cause exception, &lt;a target='_blank' href='http://download.oracle.com/javaee/1.4/api/javax/transaction/TransactionRolledbackException.html'&gt;&lt;code&gt;TransactionRolledbackException&lt;/code&gt;&lt;/a&gt; can't.
    &lt;/p&gt;
  &lt;/dd&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Client's view&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
Receives &lt;strong&gt;&lt;code&gt;javax.transaction.TransactionRolledbackException&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;javax.ejb.TransactionRolledbackLocalException&lt;/code&gt;&lt;/strong&gt;.&lt;br/&gt;
Continuing transaction is fruitless.
  &lt;/dd&gt;
&lt;/dl&gt;


&lt;h6&gt;When bean method runs in the context of a transaction that the container started immediately before dispatching the business method.&lt;/h6&gt;
&lt;p&gt;This case may happen with &lt;strong&gt;&lt;code&gt;Required&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;RequiresNew&lt;/code&gt;&lt;/strong&gt; attributes.&lt;/p&gt;
&lt;dl&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Container's action&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
    &lt;ol&gt;
      &lt;li&gt;Log the exception or error.&lt;/li&gt;
      &lt;li&gt;Rollback the container started transaction.&lt;/li&gt;
      &lt;li&gt;Discard instance.&lt;/li&gt;
      &lt;li&gt;Throw &lt;strong&gt;&lt;code&gt;RemoteException&lt;/code&gt;&lt;/strong&gt; to remote or web service client or throw
&lt;strong&gt;&lt;code&gt;EJBException&lt;/code&gt;&lt;/strong&gt; to local client.
      &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p&gt;
Note that both &lt;code&gt;RemoteException&lt;/code&gt; and &lt;code&gt;EJBException&lt;/code&gt; can nest cause exception.
    &lt;/p&gt;
  &lt;/dd&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Client’s view&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
Receives &lt;code&gt;RemoteException&lt;/code&gt; or &lt;code&gt;EJBException&lt;/code&gt;. If the client executes in a transaction, the client’s transaction may or may not be marked for rollback.
  &lt;/dd&gt;
&lt;/dl&gt;

&lt;h6&gt;When bean method runs with an unspecified transaction context.&lt;/h6&gt;
&lt;p&gt;This case may happen with the &lt;strong&gt;&lt;code&gt;NotSupported&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Never&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;Supports&lt;/code&gt;&lt;/strong&gt; attributes.&lt;/p&gt;
&lt;dl&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Container's action&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
    &lt;ol&gt;
      &lt;li&gt;Log the exception or error.&lt;/li&gt;
      &lt;li&gt;Discard instance.&lt;/li&gt;
      &lt;li&gt;Throw &lt;code&gt;RemoteException&lt;/code&gt; to remote or web service client or throw
&lt;code&gt;EJBException&lt;/code&gt; to local client.
      &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/dd&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Client’s view&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
Receives &lt;strong&gt;&lt;code&gt;RemoteException&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;EJBException&lt;/code&gt;&lt;/strong&gt;.&lt;br/&gt;
If the client executes in a transaction, the client’s transaction may or may not be marked for rollback.
  &lt;/dd&gt;
&lt;/dl&gt;
  


&lt;h5&gt;System Exception with EJB 3.0&lt;/h5&gt;
&lt;p align='right'&gt;&lt;i&gt;from Chapter 14. Exception Handling of Enterprise JavaBeans Specification Version 3.0 &lt;/i&gt;&lt;/p&gt;

&lt;h6&gt;When bean method runs in the context of the caller's transaction&lt;/h6&gt;
&lt;p&gt;This case may happen with &lt;strong&gt;&lt;code&gt;Required&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Mandatory&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;Supports&lt;/code&gt;&lt;/strong&gt; attributes.&lt;/p&gt;
&lt;dl&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Container's action&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
    &lt;ol&gt;
      &lt;li&gt;Log the exception or error.&lt;/li&gt;
      &lt;li&gt;Mark the transaction for rollback.&lt;/li&gt;
      &lt;li&gt;Discard instance.&lt;/li&gt;
      &lt;li&gt;Throw &lt;strong&gt;&lt;code&gt;javax.transaction.TransactionRolledbackException&lt;/code&gt;&lt;/strong&gt; to remote client or throw &lt;strong&gt;&lt;code&gt;javax.ejb.EJBTransactionRolledbackException&lt;/code&gt;&lt;/strong&gt; to local client.
      &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p&gt;Note that &lt;a target='_blank' href='http://download.oracle.com/javaee/5/api/index.html?javax/ejb/EJBTransactionRolledbackException.html'&gt;&lt;code&gt;EJBTransactionRolledbackException&lt;/code&gt;&lt;/a&gt; can nest cause exception.
    &lt;/p&gt;
  &lt;/dd&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Client's view&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
Receives &lt;strong&gt;&lt;code&gt;javax.ejb.EJBTransactionRolledbackException&lt;/code&gt;&lt;/strong&gt;.&lt;br/&gt;
Continuing transaction is fruitless.
  &lt;/dd&gt;
&lt;/dl&gt;


&lt;h6&gt;When bean method runs in the context of a transaction that the container started immediately before dispatching the business method.&lt;/h6&gt;
&lt;p&gt;This case may happen with &lt;strong&gt;&lt;code&gt;Required&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;RequiresNew&lt;/code&gt;&lt;/strong&gt; attributes.&lt;/p&gt;
&lt;dl&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Container's action&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
    &lt;ol&gt;
      &lt;li&gt;Log the exception or error.&lt;/li&gt;
      &lt;li&gt;Rollback the container started transaction.&lt;/li&gt;
      &lt;li&gt;Discard instance.&lt;/li&gt;
      &lt;li&gt;Throw &lt;strong&gt;&lt;code&gt;EJBException&lt;/code&gt;&lt;/strong&gt; client.
      &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p&gt;
Note that &lt;code&gt;EJBException&lt;/code&gt; can nest cause exception.
    &lt;/p&gt;
  &lt;/dd&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Client’s view&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
Receives &lt;code&gt;EJBException&lt;/code&gt;. If the client executes in a transaction, the client’s transaction may or may not be marked for rollback.
  &lt;/dd&gt;
&lt;/dl&gt;

&lt;h6&gt;When bean method runs with an unspecified transaction context.&lt;/h6&gt;
&lt;p&gt;This case may happen with the &lt;strong&gt;&lt;code&gt;NotSupported&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Never&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;Supports&lt;/code&gt;&lt;/strong&gt; attributes.&lt;/p&gt;
&lt;dl&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Container's action&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
    &lt;ol&gt;
      &lt;li&gt;Log the exception or error.&lt;/li&gt;
      &lt;li&gt;Discard instance.&lt;/li&gt;
      &lt;li&gt;Throw &lt;code&gt;EJBException&lt;/code&gt; to local client.
      &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/dd&gt;
  &lt;dt&gt;&lt;strong&gt;&lt;u&gt;Client’s view&lt;/u&gt;&lt;/strong&gt;&lt;/dt&gt;
  &lt;dd&gt;
Receives &lt;strong&gt;&lt;code&gt;EJBException&lt;/code&gt;&lt;/strong&gt;.&lt;br/&gt;
If the client executes in a transaction, the client’s transaction may or may not be marked for rollback.
  &lt;/dd&gt;
&lt;/dl&gt;



&lt;h4&gt;Mapping Requests to Servlets&lt;/h4&gt;
&lt;p align='right'&gt;&lt;i&gt;from SRV.11 of Java Servlet Specification Version 2.4&lt;/i&gt;&lt;/p&gt;

&lt;h5&gt;URL path mapping urles&lt;/h5&gt;
&lt;ol&gt;
  &lt;li&gt;The container will try to find an exact match of the path of the request to the
path of the servlet. A successful match selects the servlet.&lt;/li&gt;
  &lt;li&gt;The container will recursively try to match the longest path-prefix. This is done by stepping down the path tree a directory at a time, using the ’/’ character as a path separator. The longest match determines the servlet selected.&lt;/li&gt;
  &lt;li&gt;If the last segment in the URL path contains an extension (e.g. .jsp), the servlet container will try to match a servlet that handles requests for the extension. An extension is defined as the part of the last segment after the last ’.’ character.&lt;/li&gt;
  &lt;li&gt;If neither of the previous three rules result in a servlet match, the container will attempt to serve content appropriate for the resource requested. If a "default" servlet is defined for the application, it will be used.&lt;/li&gt;
&lt;/ol&gt;

&lt;h5&gt;Syntax for mapping definition&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used for path mapping.&lt;/li&gt;
  &lt;li&gt;A string beginning with a ‘*.’ prefix is used as an extension mapping.&lt;/li&gt;
  &lt;li&gt;A string containing only the ’/’ character indicates the "default" servlet of
the application. In this case the servlet path is the request URI minus the context
path and the path info is null.&lt;/li&gt;
  &lt;li&gt;All other strings are used for exact matches only.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Example mapping&lt;/h5&gt;

&lt;table border='1' width='600' style="margin-left:20px" cellspacing="0" cellpadding="1"&gt;
&lt;tr&gt;
  &lt;th&gt;Path Pattern (&lt;code&gt;url-pattern&lt;/code&gt;)&lt;/th&gt;
  &lt;th&gt;Servlet (&lt;code&gt;servlet-name&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/foo/bar/*&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/baz/*&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/catalog&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;*.bop&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet4&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;table border='1' width='600' style="margin-left:20px" cellspacing="0" cellpadding="1"&gt;
&lt;tr&gt;
  &lt;th&gt;Incoming Path&lt;/th&gt;
  &lt;th&gt;Servlet Handling Request&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/foo/bar/index.html&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/foo/bar/index.bop&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/baz&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/baz/index.html&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/catalog&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/catalog/index.html&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;"default" servlet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/catalog/racecar.bop&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet4&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;code&gt;/index.bop&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;servlet4&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Note that in the case of /catalog/index.html and /catalog/racecar.bop, the servlet mapped to “/catalog” is not used because the match is not exact.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-7194737114562983193?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/7194737114562983193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/12/notable-principles-of-ejb-3x.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7194737114562983193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7194737114562983193'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/12/notable-principles-of-ejb-3x.html' title='Notable Principles of J2EE Specs'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-4932755146249649324</id><published>2010-12-07T10:01:00.019+09:00</published><updated>2011-04-07T23:19:15.705+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tuning'/><title type='text'>Using VisualVM with IBM JDK</title><content type='html'>&lt;p&gt;
You can use JMX to monitoring IBM JDK with VisualVM.&lt;br/&gt;
Java SE 5.0 introduced platform MBeanServer and IBM Java SDK 5.0 or higher naturally provide it. Platform MBeanServer includes various basic managed beans about memory, thread, garbage collection, class loading and so on&lt;sup&gt;[1]&lt;/sup&gt;. VisualVM can show such information with visual views.
&lt;/p&gt;
&lt;p&gt;
Basically remote access of platform MBeanServer is not activated. You can enable it in several ways.&lt;br/&gt;
If you can control the start-up of the VM, you can enable remote access of platform MBeanServer by setting &lt;code&gt;com.sun.management.jmxremote.por&lt;/code&gt; system property in command line to launch VM. If you are in position where you can control the system properties, you can programmatically load JMX connector server and expose it using RMI registry.
&lt;/p&gt;

&lt;h4&gt;Method 1. Enabling built-in JMX agent using system properties&lt;/h4&gt;
&lt;p&gt;
You can enable built-in JMX agent of Java runtime with the following system properties explicitly in start-up command of JVM.
&lt;/p&gt;
&lt;pre class='brush: plain'&gt;
-Dcom.sun.management.jmxremote.port=3333
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
&lt;/pre&gt;

&lt;p&gt;
With VisualVM, you should add new local or remote application using &lt;code class='menu'&gt;[File &gt; Add JMX Connection]&lt;/code&gt; menu item. The connection string has the form of &lt;code&gt;&lt;i&gt;hostname&lt;/i&gt;:&lt;i&gt;port&lt;/i&gt;&lt;/code&gt; such as &lt;code&gt;localhost:3333&lt;/code&gt; or &lt;code&gt;203.201.71.31:3333&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
For more about built-in JMX agent, refer readings 2 below. If more secure setup for remote access to the platform MBeanServer is necessary, it would be really helpful.
&lt;/p&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;h4&gt;Method 2. Exposing platform MBeanServer using JMXConnectorServer programmatically.&lt;/h4&gt;
&lt;p&gt;
When you can not control the start-up command of the JVM, you can expose platform MBeanServer through JMXConnectorServer instance in your code. The JMXConnectorServer should be exposed using RMI registry.
&lt;/p&gt;
&lt;p&gt;
The following code sample shows core steps, acquiring platform MBeanServer, creating JMXConnectorServer instance, creating RMI registry and starting JMXConnectorServer.
&lt;/p&gt;

&lt;pre class='brush: java'&gt;
   ...

   //acquiring platform MBeanServer
   MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 

   //creating JMXConnectorServer instance
   JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" 
         + InetAddress.getLocalHost().getHostAddress() + ":9999/server");
   JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);
  
   //creating RMI registry
   Registry reg = LocateRegistry.createRegistry(9999);
  
   //starting JMXConnectorServer
   cs.start();

   ...
&lt;/pre&gt;

&lt;p&gt;
With VisualVM, you should add new local or remote application using &lt;code class='menu'&gt;[File &gt; Add JMX Connection]&lt;/code&gt; menu item. The connection string has the form of &lt;code&gt;service:jmx:rmi:///jndi/rmi://&lt;i&gt;host-address&lt;/i&gt;:&lt;i&gt;port&lt;/i&gt;/service&lt;/code&gt; such as &lt;code&gt;service:jmx:rmi:///jndi/rmi://203.201.71.31:9999/server&lt;/code&gt;.&lt;br/&gt;
Now you can identify JVM argument or system properties, monitor memory or garbage collection, class loading statistics, thread in timeline, and so on with VisualVM.
&lt;/p&gt;

&lt;p&gt;
If you want stop the remote access to the platform MBeanServer programmatically, just stop the JMXConnectorSever.
&lt;/p&gt;

&lt;pre class='brush: java'&gt;
   ...

   //stoping JMXConnectorServer
   cs.stop();

   //unload RMI registry
   java.rmi.server.UnicastRemoteObject.unexportObject(reg,true);

   ...
&lt;/pre&gt;

&lt;p&gt;
As for me, the above code worked with IBM Java SDK 6.0 on Windows and IBM Java SDK 6.0 64bit on AIX 6.2.
&lt;/p&gt;


&lt;h4&gt;Readings&lt;/h4&gt;
&lt;ol&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/6/docs/api/java/lang/management/package-summary.html'&gt;&lt;code&gt;java.lang.management&lt;/code&gt; package API&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/1.5.0/docs/guide/management/agent.html'&gt;Monitoring and Management Using JMX&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='https://visualvm.dev.java.net/jmx_connections.html'&gt;Connecting to JMX Agents Explicitly&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=/com.ibm.java.doc.user.aix64.60/user/attachapi.html'&gt;Support for the Java Attach API of IBM Java v6 on AIX&lt;/a&gt;&lt;/li&gt;

&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-4932755146249649324?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/4932755146249649324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/12/using-visualvm-with-ibm-jdk.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4932755146249649324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4932755146249649324'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/12/using-visualvm-with-ibm-jdk.html' title='Using VisualVM with IBM JDK'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-8074912683921499673</id><published>2010-12-01T14:13:00.002+09:00</published><updated>2010-12-01T15:44:21.812+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DB2'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Data Dictionary</title><content type='html'>&lt;p&gt;
Data dictionary is data(meta-data) for a database. The structure, relationship and usage of schema objects are maintained at data dictionary.&lt;br/&gt;
The implementation and feature of data dictionary is different by database products.
&lt;/p&gt;

&lt;h4&gt;Oracle&lt;/h4&gt;

&lt;p&gt;
Oracle maintains tables and views for data dictionary under &lt;code&gt;SYS&lt;/code&gt; user(schema). Plain users can access views according to their roles and privileges.
&lt;br/&gt;
User accessible views are named with prefix of 'USER_', 'ALL_', or 'DBA_'.
&lt;/p&gt;

&lt;p&gt;
Oracle also maintain data or statistics of database's activity and performance in so-called dynamic performance views. Actually they are views named with prefix of 'V_$' and also owned by &lt;code&gt;SYS&lt;/code&gt; schema.&lt;br/&gt;
Oracle provides public synonyms named with prefix of 'V$' for users properly privileged.
&lt;/p&gt;


&lt;h5&gt;References&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/E11882_01/server.112/e16508/datadict.htm#i2112'&gt;Data Dictionary and Dynamic Performance Views&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/statviews_1001.htm#i1572007'&gt;Static Data Dictionary Views&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;



&lt;h4&gt;DB2&lt;/h4&gt;

&lt;p&gt;
DB2 UDB provides data dictionary under &lt;code&gt;SYSCAT&lt;/code&gt; schema. &lt;code&gt;SYSCAT.TABLES&lt;/code&gt;, &lt;code&gt;SYSCAT.VIEWS&lt;/code&gt;, &lt;code&gt;SYSCAT.COLUMNS&lt;/code&gt;, &lt;code&gt;SYSCAT.INDEXES&lt;/code&gt;, &lt;code&gt;SYSCAT.TRIGGERS&lt;/code&gt; are views describing the structure of database instance.
&lt;/p&gt;

&lt;p&gt;
For dynamic behavior of database, DB2 UDB provides views under &lt;code&gt;SYSSTAT&lt;/code&gt; schema.
&lt;/p&gt;


&lt;h5&gt;References&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href=http://www.devx.com/dbzone/Article/29585/'&gt;DB2 System Catalog Views: Everything You Need to Know About Your DB Objects&lt;/a&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/8559058673267774097-8074912683921499673?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/8074912683921499673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/12/data-dictionary.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8074912683921499673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8074912683921499673'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/12/data-dictionary.html' title='Data Dictionary'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-1347702562717125957</id><published>2010-12-01T13:51:00.002+09:00</published><updated>2010-12-01T14:00:20.890+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Characteristics of Oracle</title><content type='html'>&lt;h4&gt;Quoted identifier is case-sensitive in Oracle&lt;/h4&gt;

&lt;p&gt;
For oracle, identifier such as table name or column name can be quoted with double quotation mark (").
&lt;br/&gt;
Quoted identifier can be oracle reserved word such as comment, check, add, group, lock or set. But unlike non-quoted identifier, quoted identifier is case sensitive. 
&lt;/p&gt;

&lt;h4&gt;Empty string is treated as a &lt;code&gt;null&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;
Oracle treats a character value with a length of zero(empty string) as &lt;code&gt;null&lt;/code&gt;. &lt;br/&gt;
So, the following statement would set &lt;code&gt;null&lt;/code&gt; to descn column of produt of which id is 'PD100'.
&lt;/p&gt;

&lt;pre class='code'&gt;&lt;code class='sql'&gt;
insert into products (id, name, descn) values ('PD100', 'Vega', '');
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
Oracle says that this may not continue to be true in future releases, but it seems very difficult to change this feature.
&lt;/p&gt;

&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements005.htm#i59110'&gt;http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements005.htm#i59110&lt;/a&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/8559058673267774097-1347702562717125957?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/1347702562717125957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/12/characteristics-of-oracle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1347702562717125957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1347702562717125957'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/12/characteristics-of-oracle.html' title='Characteristics of Oracle'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-7210863789285277535</id><published>2010-11-16T15:38:00.003+09:00</published><updated>2010-11-16T15:53:00.053+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tuning'/><title type='text'>JVM Tuning Foundation</title><content type='html'>&lt;h4&gt;Types of Diagnostic Information in IBM JVM&lt;/h4&gt;

&lt;h5&gt;Javadump (Thread dump)&lt;/h5&gt;
&lt;p&gt;
The Javadump is sometimes referred to as a Javacore or thread dump in some JVMs. This dump is in a human-readable format produced by default when the JVM terminates unexpectedly because of an operating system signal, an OutOfMemoryError exception, or when the user enters a reserved key combination (for example, Ctrl-Break on Windows®). It can also be generated by calling com.ibm.jvm.Dump.JavaDump() from inside the application. A Javadump summarizes the state of the JVM at the instant the signal occurred. Much of the content of the Javadump is specific to the IBM JVM. 
&lt;/p&gt;

&lt;h5&gt;Heapdump&lt;/h5&gt;
&lt;p&gt;
The JVM can generate a Heapdump at the request of the user (for example by calling com.ibm.jvm.Dump.HeapDump() from inside the application) or (by default) when the JVM terminates because of an OutOfMemoryError exception. You can specify finer control of the timing of a Heapdump with the -Xdump:heap option. For example, you could request a Heapdump after a certain number of full garbage collections have occurred. The default Heapdump format (phd files) is not human-readable and you process it using available tools such as Heaproots.
&lt;/p&gt;

&lt;h5&gt;System dump (Core dump)&lt;/h5&gt;
&lt;p&gt;
System dumps (also known as core dumps on Linux® platforms) are platform-specific files that contain information about the active processes, threads, and system memory. System dumps are usually large. By default, system dumps are produced by the JVM only when the JVM fails unexpectedly because of a GPF (general protection fault) or a major JVM or system error. You can also request a system dump by calling com.ibm.jvm.Dump.SystemDump() from your application. You can use the -Xdump:system option to produce system dumps when other events occur
&lt;/p&gt;

&lt;h5&gt;Garbage collection data&lt;/h5&gt;
&lt;p&gt;
A JVM started with the -verbose:gc option produces output in XML format that can be used to analyze problems in the Garbage Collector itself or problems in the design of user applications. Numerous other options affect the nature and amount of Garbage Collector diagnostic information produced. See Garbage Collector diagnostics for more information.
&lt;/p&gt;

&lt;h5&gt;Trace data&lt;/h5&gt;
&lt;p&gt;
The IBM JVM tracing allows execution points in the Java code and the internal JVM code to be logged. The -Xtrace option allows the number and areas of trace points to be controlled, as well as the size and nature of the trace buffers maintained. The internal trace buffers at a time of failure are also available in a system dump and tools are available to extract them from a system dump. Generally, trace data is written to a file in an encoded format and then a trace formatter converts the data into a readable format. However, if small amounts of trace are to be produced and performance is not an issue, trace can be routed to STDERR and will be pre-formatted.
&lt;/p&gt;

The above are cited from the diagnostic guide of IBM Java SDK which you can find from &lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/topic/com.ibm.java.doc.diagnostics.60/diag/tools/diagnostics_summary.html'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-7210863789285277535?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/7210863789285277535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/11/jvm-tuning-foundation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7210863789285277535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7210863789285277535'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/11/jvm-tuning-foundation.html' title='JVM Tuning Foundation'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3772884909330574348</id><published>2010-11-09T20:27:00.003+09:00</published><updated>2010-11-09T20:38:50.649+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Useful DOS Commands</title><content type='html'>&lt;h4&gt;pathping&lt;/h4&gt;

On a windows, you can use &lt;code&gt;pathping&lt;/code&gt; command to view the route to the specified IP address.
&lt;pre class='code'&gt;&lt;code class='shell'&gt;
c:\&gt;patfhping www.google.com
&lt;/code&gt;&lt;/pre&gt; 

For more about &lt;code&gt;pathping&lt;/code&gt;, refer the followings.
&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.computerhope.com/pathping.htm'&gt;http://www.computerhope.com/pathping.htm&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://en.wikipedia.org/wiki/PathPing'&gt;http://en.wikipedia.org/wiki/PathPing&lt;/a&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/8559058673267774097-3772884909330574348?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3772884909330574348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/11/useful-dos-commands.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3772884909330574348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3772884909330574348'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/11/useful-dos-commands.html' title='Useful DOS Commands'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3096646653409753887</id><published>2010-10-19T14:20:00.014+09:00</published><updated>2011-09-21T22:01:20.265+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java SE'/><title type='text'>Tips on JDBC</title><content type='html'>&lt;h4&gt;JDBC Drivers by DBMS Product&lt;/h4&gt;

The followings are starting pages for JDBC drivers for each DBMS product.

&lt;ul&gt;
&lt;li&gt;Oracle Database : &lt;a target='_blank' href='http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html'&gt;http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;IBM DB2  : &lt;a target='_blank' href='http://www-01.ibm.com/support/docview.wss?rs=71&amp;uid=swg21363866'&gt;http://www-01.ibm.com/support/docview.wss?rs=71&amp;uid=swg21363866&lt;/a&gt;
&lt;li&gt;Microsoft SQL Server  : &lt;a target='_blank' href='http://msdn.microsoft.com/en-us/sqlserver/aa937724'&gt;http://msdn.microsoft.com/en-us/sqlserver/aa937724&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Connection Properties of JDBC Driver&lt;/h4&gt;

&lt;h5&gt;Oracle Database&lt;/h5&gt;
&lt;p&gt;
Available connection properties of Oracle database's JDBC driver is described in API documentation of JDBC driver.&lt;br/&gt;
In case of Oracle database 11g, you can found them in the following page.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a target='_blank' href='http://download.oracle.com/docs/cd/E11882_01/appdev.112/e13995/oracle/jdbc/pool/OracleDataSource.html#setConnectionProperties_java_util_Properties_'&gt;OracleDataSource.setConnectionProperties(java.util.Properties value)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;IBM DB2&lt;/h5&gt;
&lt;p&gt;Available properties on JDBC driver for DB2 version 9.7 are described in the following page.
&lt;ul&gt;
&lt;li&gt;
&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.apdv.java.doc/doc/rjvdsprp.html'&gt;Properties for the IBM Data Server Driver for JDBC and SQLJ&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Microsoft SQL Server&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a target='_blank' href='http://msdn.microsoft.com/en-us/library/ms378988.aspx'&gt;Setting the Connection Properties - SQL Server 2008 R2&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;h4&gt;Diagnosability in JDBC&lt;/h4&gt;

&lt;h5&gt;Oracle Database&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a target='_blank' href='http://www.comp.dit.ie/btierney/oracle11gdoc/java.111/b31224/diagnose.htm'&gt;http://www.comp.dit.ie/btierney/oracle11gdoc/java.111/b31224/diagnose.htm&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Oracle JDBC Driver&lt;/h4&gt;
&lt;h5&gt;Compatibility of JDBC Driver&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#02_02'&gt;Which JDBC drivers support which versions of Oracle Database?&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#02_03'&gt;Which JDBC drivers support which versions of Javasoft's JDK? &lt;/a&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/8559058673267774097-3096646653409753887?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3096646653409753887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/10/tips-on-jdbc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3096646653409753887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3096646653409753887'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/10/tips-on-jdbc.html' title='Tips on JDBC'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2572815023719971985</id><published>2010-09-15T14:08:00.012+09:00</published><updated>2011-06-07T11:22:31.628+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DB2'/><title type='text'>Tips on DB2</title><content type='html'>&lt;h4&gt;Official Documents&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='https://www-304.ibm.com/support/docview.wss?rs=71&amp;uid=swg27009474'&gt;DB2 database product documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='https://www-304.ibm.com/support/docview.wss?rs=71&amp;uid=swg27015148'&gt;DB2 Version 9.7 for Linux, UNIX, and Windows English Manuals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Setup Related&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.regvars.doc/doc/c0007340.html'&gt;Registry and Environment Variables for DB2 9.7 for Linux, UNIX and Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.apdv.java.doc/doc/rjvdsprp.html'&gt;Setting Properties for the IBM Data Server Driver for JDBC and SQLJ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.apdv.java.doc/doc/r0052607.html'&gt;Common IBM Data Server Driver for JDBC and SQLJ properties for DB2 servers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Connectivity Related&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://www-01.ibm.com/support/docview.wss?rs=71&amp;uid=swg21363866'&gt;DB2 JDBC/JCC Driver Versions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.apdv.java.doc/doc/cjvintro.html'&gt;Supported Drivers of JDBC and SQLJ for DB2 9.7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Programming Related&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0053561.html'&gt;Determining data types of untyped expressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.regvars.doc/doc/r0005664.html#r0005664__Q_DB2_DEFERRED_PREPARE_SEMANTICS'&gt;DB2_DEFERRED_PREPARE_SEMANTICS&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/index.html'&gt;Run Oracle applications on DB2 9.7 for Linux, Unix, and Windows&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' hef='http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.esqlc.doc/esqlc416.htm'&gt;Limits for DB2 Object Sizes&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;


&lt;h4&gt;Session and Context Related&lt;/h4&gt;




&lt;h4&gt;Tuning Related&lt;/h4&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-2572815023719971985?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2572815023719971985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/09/tips-on-db2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2572815023719971985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2572815023719971985'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/09/tips-on-db2.html' title='Tips on DB2'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-8827191347868922041</id><published>2010-07-19T00:58:00.034+09:00</published><updated>2011-12-02T10:23:41.395+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Tips on XML</title><content type='html'>&lt;h4&gt;Common XLM Schemas&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://en.wikipedia.org/wiki/List_of_XML_schemas'&gt;List of XML schemas&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://schemas.liquid-technologies.com/'&gt;XML Standards Library&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;


&lt;h4&gt;SAX2 Features and Properties&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description'&gt;SAX2 Standard Feature Flags&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://xerces.apache.org/xerces2-j/features.html'&gt;Features of Xerces2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://xerces.apache.org/xerces2-j/properties.html'&gt;Properties of Xerces2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Making JAXP recognize RELAX-NG schema&lt;/h4&gt;

&lt;p&gt;
Although JDK 1.5 and 1.6 are aware of RELAX-NG considering &lt;code&gt;XMLConstants.RELAXNG_NS_URI&lt;/code&gt;, JDK 1.5 and JDK 1.6 don't include RELAX-NG implementation. So, if you use RELAX-NG as a schema for the validation API of JAXP, you should include RELAX-NG implementation to use in your classpath and set system variable to use it before the validation code.
&lt;/p&gt;
&lt;pre class='code'&gt;&lt;code class='java'&gt;
   ...
   System.setProperty("javax.xml.validation.SchemaFactory:" + XMLConstants.RELAXNG_NS_URI, 
         "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory");

   SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);
   ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
The most well-known RELAX-NG implementation in Java seems to be &lt;a target='_blank' href='http://www.thaiopensource.com/relaxng/jing.html'&gt;&lt;code&gt;jing&lt;/code&gt;&lt;/a&gt;.
&lt;/p&gt;



&lt;h4&gt;Define empty element using XML Schema&lt;/h4&gt;

&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.herongyang.com/XML-Schema/complexType-Empty-Element-Declaration.html'&gt;Declaring Empty Elements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Built-in Datatypes of XML Schema&lt;/h4&gt;

&lt;a target='_blank' href='http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#built-in-datatypes'&gt;&lt;img src='http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/type-hierarchy.gif'&gt;&lt;/a&gt;

&lt;ul&gt;
   &lt;li&gt;A value of '100.0' is invalid with &lt;code&gt;xsd:integer&lt;/code&gt; or it's subtypes because &lt;code&gt;xsd:integer&lt;/code&gt; is defined with it's &lt;code&gt;fractionDigits&lt;/code&gt; is 0.
   &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Meaning of Fundamental Element of XML Schema&lt;/h4&gt;

&lt;code&gt;simpleType&lt;/code&gt;, &lt;code&gt;complexType&lt;/code&gt;, &lt;code&gt;simpleContent&lt;/code&gt;, &lt;code&gt;complexContent&lt;/code&gt;, ... all these are very confusing. So, you need to understand the exact meaning or usage of each element and tell the differences between them.

&lt;h5&gt;&lt;code&gt;simple types&lt;/code&gt;&lt;/h5&gt;

&lt;ul&gt;
   &lt;li&gt;Elements that contain numbers (and strings, and dates, etc.) but do not contain any subelements are said to have simple types.
   &lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;&lt;code&gt;complex types&lt;/code&gt;&lt;/h5&gt;

&lt;ul&gt;
   &lt;li&gt;Elements that contain subelements or carry attributes are said to have complex types.
   &lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;&lt;code&gt;simpleContent&lt;/code&gt;&lt;/h5&gt;
&lt;ul&gt;
   &lt;li&gt;The &lt;code&gt;simpleContent&lt;/code&gt; element can specify attributes for simple types.
   &lt;/li&gt;
   &lt;li&gt;The &lt;code&gt;simpleContent&lt;/code&gt; element can specify attribute types via &lt;code&gt;extension&lt;/code&gt; or restrict existing attribute types via &lt;code&gt;restriction&lt;/code&gt; to simple types or to complex types with simple content.
   &lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;&lt;code&gt;complexContent&lt;/code&gt;&lt;/h5&gt;
&lt;ul&gt;
   &lt;li&gt;The &lt;code&gt;complextContent&lt;/code&gt; element can specify nested element types. This includes the special case of zero element, also known as 'empty content'. The &lt;code&gt;comlextContent&lt;/code&gt; also provides functionality that permits text interspered with elements, also known as 'mixed content'.
   &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Thread-safeness of Factories in JAXP&lt;/h4&gt;

&lt;p&gt;
Factory classes in JAXP such as &lt;code&gt;SAXParserFactory&lt;/code&gt;, &lt;code&gt;DocumentBuilderFactory&lt;/code&gt;, &lt;code&gt;SchemaFactory&lt;/code&gt; are not thread-safe. 
&lt;/p&gt;

&lt;h5&gt;DocumentBuilder&lt;/h5&gt;
&lt;p&gt;
DOM related core classes in JAXP, in other words &lt;strong&gt;&lt;code&gt;DocumentBuilderFactory&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;DocumentBuilder&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;Document&lt;/code&gt;&lt;/strong&gt; are &lt;strong&gt;not thread-safe&lt;/strong&gt;. Mutator methods such as &lt;code&gt;DocumentBuilderFactory.setSchema()&lt;/code&gt;, &lt;code&gt;DocumentBuilderFactory.setFeature()&lt;/code&gt;, &lt;code&gt;DocumentBuilderFactory.setIgnoringComments()&lt;/code&gt;, &lt;code&gt;DocumentBuilderFactory.setNamespaceAware()&lt;/code&gt;, &lt;code&gt;DocumentBuilderFactory.setValidating()&lt;/code&gt;, &lt;code&gt;DocumentBuilder.setEntityResolver()&lt;/code&gt;, and &lt;code&gt;DocumentBuilder.setErrorHandler()&lt;/code&gt; means those classes are not thread-safe.
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;DocumentBuilderFactory&lt;/code&gt; or &lt;code&gt;DocumentBuilder&lt;/code&gt; object may be relatively resource demanding. So, they should not be instantiated every time you build a document. But they are not thread-safe, so they should be confined properly.
&lt;br/&gt;
In usual case where your application need parsing method for your specific documents, you would better provide public parser method that create document object and reuse document builder factory and document builder internally.
&lt;/p&gt;

&lt;pre class='code'&gt;&lt;code class='java'&gt;
public class ApplicationDocumentParsers{

   protected DocumentBuilder orderDocBuilder;
   protected DocumentBuilder paymentDocBuilder;
   protected DocumentBuilder deliveryDocBuilder;

   public ApplicationDocumentParsers(){

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      dbf.setNamespaceAware(true);
      dbf.setValidating(false);
      dbf.setXIncludeAware(false);

      //initiate document builders
      dbf.setSchema("order.xsd");
      this.orderDocBuilder = dbf.newDocumentBuilder();

      dbf.setSchema("payment.xsd");
      this.paymentDocBuilder = dbf.newDocumentBuilder();

      dbf.setSchema("delivery.xsd");
      this.deliveryDocBuilder = dbf.newDocumentBuilder();

   }

   public Document parseOrderDoc(InputStream is){
      return this.orderDocBuilder.parse(is);
   }

   public Document parsePaymentDoc(InputStream is){
      return this.paymentDocBuilder.parse(is);
   }

   public Document parseDeliveryDoc(InputStream is){
      return this.deliveryDocBuilder.parse(is);
   }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
I think there maybe threa-safe or immutable document builder or document builder factory but, I haven't still found well-known one.
&lt;/p&gt;

&lt;h5&gt;javax.xml.validation&lt;/h5&gt;
&lt;p&gt;
&lt;strong&gt;&lt;code&gt;SchemaFactory&lt;/code&gt;&lt;/strong&gt; class is &lt;strong&gt;not thread-safe&lt;/strong&gt;, but &lt;strong&gt;&lt;code&gt;Schema&lt;/code&gt;&lt;/strong&gt; class is &lt;strong&gt;immutable and thread-safe&lt;/strong&gt;.
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/6/docs/api/javax/xml/validation/SchemaFactory.html'&gt;Javadoc on SchemaFactory class in Java SE 6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/6/docs/api/javax/xml/validation/Schema.html'&gt;Javadoc on Schema class in Java SE 6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Meaning and Pronunciation of Xerces&lt;/h4&gt;

&lt;p&gt;
As for me who is not native with English, the word starting with 'x' is very unfamiliar and can't even imagine how to pronounce such words.  Although I have used Apache Xerces for more than 5 years, I recently become to know the exact pronunciation of 'Xerces'.  This may be silly to those who use English as their mother tongue, most of application developers around me are same with me.
Anyway you can hear the pronunciation and read the meaning of 'Xerces' at the following pages.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.merriam-webster.com/cgi-bin/audio.pl?bixxer01.wav=Xerxes+I'&gt;http://www.merriam-webster.com/cgi-bin/audio.pl?bixxer01.wav=Xerxes+I&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://education.yahoo.com/reference/dictionary/entry/Xerxes%20I'&gt;http://education.yahoo.com/reference/dictionary/entry/Xerxes I&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Resources on JAXB&lt;/h4&gt;
&lt;p&gt;
There aren't so much books, tutorials or articles about JAXB as JAXP.
Specially, it's much difficult to find in-depth materials on JAXB 2.0.&lt;br/&gt;
The followings are the one I have found to be useful.
&lt;/p&gt;

&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://jaxb.java.net/guide/'&gt;Unofficial JAXB Guide&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://jaxb.java.net/tutorial/'&gt;A JAXB Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Embedding Schematron to XML Schema&lt;/h4&gt;

&lt;p&gt;
Schematron can defines complex rules such as relations between values of elements which can't be expressed with XML Schema. But defining the whole schema of an XML document using Schematron is too expensive and improper. So, defining basic structure and rules using XML Schema and more complex rules using Schematron seems to be good strategy.
&lt;/p&gt;
&lt;p&gt;
Then, maintaining a pair of schema files for a XML document is somewhat bothering.
Is it possible to merge two schema files into one ?
&lt;/p&gt;
&lt;p&gt;
The following article explains how to embedding constraints expressed with Schematron syntax into the XML Schema file. The basic idea is using &lt;xs:appinfo&gt; element.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.xfront.com/ExtendingSchemas.html'&gt;Extending XML Schemas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Resources on XML Catalog&lt;/h4&gt;

&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.oasis-open.org/committees/entity/spec-2001-08-06.html'&gt;XML Catalogs Committee Specification 06 Aug 2001&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.ibm.com/developerworks/xml/library/x-mxd3.html'&gt;Managing XML data: XML catalogs, 13 May 2005&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://en.wikipedia.org/wiki/XML_Catalog'&gt;XML Catalog on Wikipedia&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;


&lt;h4&gt;Document type declaration, public identifier, system identifier&lt;/h4&gt;

&lt;h5&gt;Syntax&lt;/h5&gt;
&lt;pre class="brush: plain"&gt;
document-type-declaration = (external-subset, internal-subset)|external-subset|internal-subset

document-type-delaration = '&amp;lt;!DOCTYPE' root-element-name external-subset? ('[' internal-subset ']')? '&gt;'

external-subset = ('PUBLIC' public-identifier system-identifier)|('SYSTEM' system-identifier')
&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;public-identifier : identifier which is meant to be universally unique within its application scope.&lt;/li&gt;
  &lt;li&gt;system-identifier : is typically a fragmentless URI reference which is intended to identify a document type which is used exclusively in one application.&lt;/li&gt;
&lt;/ul&gt;



&lt;h5&gt;Sample&lt;/h5&gt;

&lt;ul&gt;
   &lt;li&gt;XHTML 1.0
   &lt;pre class="brush: xml"&gt;
&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

   &lt;/pre&gt;
   &lt;/li&gt;
   &lt;li&gt;Web application deployment descriptor for Servlet 2.3
   &lt;pre class="brush: xml"&gt;
&amp;lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
                            "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
   &lt;/pre&gt;
   &lt;/li&gt;
   &lt;li&gt;IoC configuration of Spring framework 2.0
   &lt;pre class="brush: xml"&gt;
&amp;lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
            "http://www.springframework.org/dtd/spring-beans-2.0.dtd"&gt;
   &lt;/pre&gt;
   &lt;/li&gt;
   &lt;li&gt;SQL map of iBATIS 2.0
   &lt;pre class="brush: xml"&gt;
&amp;lt;!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
                        "http://ibatis.apache.org/dtd/sql-map-2.dtd"&gt;
   &lt;/pre&gt;
   &lt;/li&gt;
   &lt;li&gt;DocBook 5.0
   &lt;pre class="brush: xml"&gt;
&amp;lt;!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V5.0/EN"
               "http://www.oasis-open.org/docbook/xml/5.0/docbook.dtd" [
&amp;lt;!ENTITY chap1 SYSTEM "chap1.xml"&gt;
&amp;lt;!ENTITY chap2 SYSTEM "chap2.xml"&gt;
]&gt;
   &lt;/pre&gt;
   &lt;/li&gt;  

&lt;/ul&gt;


&lt;h4&gt;XML Schema Documentation Tools&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;a target="_blank" href="http://xframe.sourceforge.net/xsddoc/"&gt;xsddoc&lt;/a&gt;&lt;br/&gt;
    The xsddoc subproject is a XML Schema documentation generator for W3C XML Schemas.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a target="_blank" href="http://wiki.fiforms.org/index.php/Xs3p"&gt;xs3p&lt;/a&gt;&lt;br/&gt;
    The XS3P schema documentation generator is simply an XSLT stylesheet, which generates HTML documentation from an XSD schema file. 
  &lt;/li&gt;
&lt;/ul&gt;



&lt;h4&gt;Small Tips&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Type extension using &lt;strong&gt;&lt;code&gt;&amp;lt;xs:extension&amp;gt;&lt;/code&gt;&lt;/strong&gt; element can't override the type of the element in base type.
    &lt;ul&gt;
      &lt;li&gt;&lt;a target="_blank" href="http://social.msdn.microsoft.com/Forums/en/databasedesign/thread/0eeea1eb-3522-47c2-a18c-0d2a55a6fdb4"&gt;How to override a Xml Schema element ?&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a target="_blank" href="http://www.w3schools.com/schema/el_extension.asp"&gt;XML Schema &lt;code&gt;extension&lt;/code&gt; Element&lt;/a&gt;
      &lt;/li&gt;
    &lt;/ul&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/8559058673267774097-8827191347868922041?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/8827191347868922041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/07/tips-on-java-for-xml.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8827191347868922041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8827191347868922041'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/07/tips-on-java-for-xml.html' title='Tips on XML'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-5327279201561403167</id><published>2010-07-09T00:12:00.008+09:00</published><updated>2010-12-18T10:52:02.587+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Tips on Eclipse</title><content type='html'>&lt;h4&gt;Configuration&lt;/h4&gt;

&lt;h5&gt;Eclipse runtime options&lt;/h5&gt;
&lt;p&gt;
If you want to know what can you do with &lt;code&gt;eclipse.ini&lt;/code&gt; file, refer the followings.&lt;/p&gt;

&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html'&gt;Runtime options for Eclipse 3.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Task Tags for Java Souce and XML File on Eclipse 3.3&lt;/h5&gt;

&lt;p&gt;
For eclipse 3.3 "Task Tags" for java source file are enabled by default with 3 basic tags (TODO, FIXME, XXX) but task tags for XML file are not enabled. To enable task tags for XML file, change the settings on &lt;code class="menu"&gt;[Windows &gt; Preference &gt; Web and XML &gt; Task Tags]&lt;/code&gt; menu.
&lt;/p&gt;


&lt;h4&gt;Optimization&lt;/h4&gt;

&lt;h5&gt;Optimizing &lt;code&gt;eclipse.ini&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;
You can find interesting wrtings on eclipse.ini to increase the performance of Eclipse at the following page.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://stackoverflow.com/questions/142357/what-are-the-best-eclipse-34-jvm-settings#144349'&gt;http://stackoverflow.com/questions/142357/what-are-the-best-eclipse-34-jvm-settings#144349&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Troubleshooting&lt;/h4&gt;

&lt;h5&gt;Eclipse doesn't start-up.&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://stackoverflow.com/questions/207843/how-do-i-prevent-eclipse-from-hanging-on-startup'&gt;"The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes." at &lt;code&gt;.metadata/.log&lt;/code&gt;&lt;/a&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/8559058673267774097-5327279201561403167?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/5327279201561403167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/07/tips-on-eclipse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5327279201561403167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5327279201561403167'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/07/tips-on-eclipse.html' title='Tips on Eclipse'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-546913245320839116</id><published>2010-05-28T10:15:00.017+09:00</published><updated>2012-01-20T16:13:02.643+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Tips on JBoss</title><content type='html'>&lt;h4&gt;Fundamental&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Startup parameter &lt;a target='_blank' href='http://community.jboss.org/wiki/JBossRunParameters'&gt;http://community.jboss.org/wiki/JBossRunParameters&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;Enabling remote access to JBoss 4.2 : &lt;a target='_blank' href='http://jlorenzen.blogspot.com/2007/10/enabling-remote-access-to-jboss-42.html'&gt;http://jlorenzen.blogspot.com/2007/10/enabling-remote-access-to-jboss-42.html&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;Class loading configuration : &lt;a target='_blank' href='http://community.jboss.org/wiki/ClassLoadingConfiguration'&gt;http://community.jboss.org/wiki/ClassLoadingConfiguration&lt;/a&gt;&lt;br/&gt;
  Explains how-to setup class loading isolation of J2EE modules using &amp;lt;loader-repository&amp;gt; element in &lt;code&gt;jboss-app.xml&lt;/code&gt;, &lt;code&gt;jboss.xml&lt;/code&gt; or &lt;code&gt;jboss-web&lt;/code&gt; file.
  &lt;/li&gt;
  &lt;li&gt;Configuring the Deployment Scanner in conf/jboss-service.xml : &lt;a target='_blank' href='https://community.jboss.org/wiki/ConfiguringTheDeploymentScannerInConfjbossSystemxml'&gt;https://community.jboss.org/wiki/ConfiguringTheDeploymentScannerInConfjbossSystemxml&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Data Access&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Config data-source : &lt;a target='_blank' href='http://community.jboss.org/wiki/configdatasources'&gt;http://community.jboss.org/wiki/configdatasources&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Config data-source and monitor connection pools : &lt;a target='_blank' href='http://www.mastertheboss.com/en/jboss-server/96-jboss-datasource-configuration.html'&gt;http://www.mastertheboss.com/en/jboss-server/96-jboss-datasource-configuration.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Performance&lt;/h4&gt;

Readings on tuning JBoss are listed &lt;a target="_blank" href="http://3rdstage.blogspot.com/2009/06/tuning.html#jboss"&gt;here&lt;/a&gt;.



&lt;h4&gt;Security&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Encrypt passwords of data-sources : &lt;a target='_blank' href='http://community.jboss.org/wiki/encryptingdatasourcepasswords'&gt;http://community.jboss.org/wiki/encryptingdatasourcepasswords&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Config JCA login module : &lt;a target='_blank' href='http://community.jboss.org/wiki/ConfigJCALoginModule'&gt;http://community.jboss.org/wiki/ConfigJCALoginModule&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Networking&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Identify and configure TCP/UDP port used : &lt;a target='_blank' href='http://community.jboss.org/wiki/UsingJBossBehindAFirewall'&gt;http://community.jboss.org/wiki/UsingJBossBehindAFirewall&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;EJB Programming&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://docs.jboss.org/ejb3/docs/tutorial/'&gt;EJB3 Tutorial for JBoss AS 4.x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://docs.jboss.org/ejb3/docs/reference/build/reference/en/html/'&gt;EJB3 Reference for JBoss AS 4.x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://www.jboss.org/file-access/default/members/jbossejb3/freezone/docs/tutorial/1.0.7/html/index.html'&gt;EJB3 Tutorial for JBoss AS 5.x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://www.jboss.org/file-access/default/members/jbossejb3/freezone/docs/reference/1.0.7/html/index.html'&gt;EJB3 Reference for JBoss AS 5.x&lt;/a&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/8559058673267774097-546913245320839116?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/546913245320839116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/05/tips-on-jboss.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/546913245320839116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/546913245320839116'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/05/tips-on-jboss.html' title='Tips on JBoss'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-1838791194617350135</id><published>2010-05-25T19:09:00.006+09:00</published><updated>2010-05-25T20:03:58.085+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Naming Rules of Schema Objects by Database</title><content type='html'>&lt;h4&gt;The max. length of identifiers&lt;/h4&gt;
&lt;table width='100%' border='1' cellpadding='1' cellspacing='0'&gt;
&lt;tr&gt;
   &lt;th&gt;&amp;nbsp;&lt;/th&gt;
   &lt;th&gt;Database&lt;/th&gt;
   &lt;th&gt;Table&lt;/th&gt;
   &lt;th&gt;View&lt;/th&gt;
   &lt;th&gt;Sequence&lt;/th&gt;
   &lt;th&gt;Synonym&lt;/th&gt;
   &lt;th&gt;Index&lt;/th&gt;
   &lt;th&gt;Constraint&lt;/th&gt;
   &lt;th&gt;Trigger&lt;/th&gt;
   &lt;th&gt;Procedure/Function&lt;/th&gt;
   &lt;th&gt;Database Link&lt;/th&gt;
   &lt;th&gt;Column&lt;/th&gt;
   &lt;th&gt;Alias&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;&lt;b&gt;Oracle&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;8&lt;/td&gt;
   &lt;td&gt;30&lt;/td&gt;
   &lt;td&gt;30&lt;/td&gt;
   &lt;td&gt;30&lt;/td&gt;
   &lt;td&gt;30&lt;/td&gt;
   &lt;td&gt;30&lt;/td&gt;
   &lt;td&gt;30&lt;/td&gt;
   &lt;td&gt;30&lt;/td&gt;
   &lt;td&gt;30&lt;/td&gt;
   &lt;td&gt;128&lt;/td&gt;
   &lt;td&gt;-&lt;/td&gt;
   &lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;&lt;b&gt;MySQL 5.0&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;64&lt;/td&gt;
   &lt;td&gt;64&lt;/td&gt;
   &lt;td&gt;64&lt;/td&gt;
   &lt;td&gt;-&lt;/td&gt;
   &lt;td&gt;64&lt;/td&gt;
   &lt;td&gt;64&lt;/td&gt;
   &lt;td&gt;-&lt;/td&gt;
   &lt;td&gt;64&lt;/td&gt;
   &lt;td&gt;64&lt;/td&gt;
   &lt;td&gt;-&lt;/td&gt;
   &lt;td&gt;64&lt;/td&gt;
   &lt;td&gt;255&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;&lt;b&gt;PostgreSQL 8.x&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;63&lt;/td&gt;
   &lt;td&gt;63&lt;/td&gt;
   &lt;td&gt;63&lt;/td&gt;
   &lt;td&gt;63&lt;/td&gt;
   &lt;td&gt;-&lt;/td&gt;
   &lt;td&gt;63&lt;/td&gt;
   &lt;td&gt;63&lt;/td&gt;
   &lt;td&gt;63&lt;/td&gt;
   &lt;td&gt;63&lt;/td&gt;
   &lt;td&gt;-&lt;/td&gt;
   &lt;td&gt;63&lt;/td&gt;
   &lt;td&gt;63&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-1838791194617350135?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/1838791194617350135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/05/naming-rules-of-schema-objects-by.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1838791194617350135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1838791194617350135'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/05/naming-rules-of-schema-objects-by.html' title='Naming Rules of Schema Objects by Database'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3549269953299547495</id><published>2010-04-19T01:59:00.022+09:00</published><updated>2011-11-05T03:24:27.070+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Symbols</title><content type='html'>&lt;h4&gt;Punctuation&lt;/h4&gt;

&lt;table width='100%' border='1' cellspacing='0' cellpadding='2'&gt;
&lt;tr&gt;
  &lt;th&gt;Name&lt;/th&gt;
  &lt;th&gt;Symbol&lt;/th&gt;
  &lt;th&gt;HTML 4.0 Entity&lt;/th&gt;
  &lt;th width='40%'&gt;Remarks&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;parentheses&lt;/td&gt;
  &lt;td align='center'&gt;( )&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;round brackets, curved brackets, oval brackets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;square brakets&lt;/td&gt;
  &lt;td align='center'&gt;[ ]&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;brakets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;braces&lt;/td&gt;
  &lt;td align='center'&gt;{ }&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;curly brackets, flower brackets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;guillemets&lt;/td&gt;
  &lt;td align='center'&gt;&amp;laquo; &amp;raquo;&lt;/td&gt;
  &lt;td&gt;&amp;amp;laquo; &amp;amp;raquo;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;single quotation mark&lt;/td&gt;
  &lt;td align='center'&gt;&amp;lsquo; &amp;rsquo&lt;/td&gt;
  &lt;td&gt;&amp;amp;lsquo; &amp;amp;rsquo&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;double quotation mark&lt;/td&gt;
  &lt;td align='center'&gt;&amp;ldquo; &amp;rdquo&lt;/td&gt;
  &lt;td&gt;&amp;amp;ldquo; &amp;amp;rdquo&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;period&lt;/td&gt;
  &lt;td align='center'&gt;.&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;full stop, dot, point&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;ellipses&lt;/td&gt;
  &lt;td align='center'&gt;&amp;hellip;&lt;/td&gt;
  &lt;td&gt;&amp;amp;hellip;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;question mark&lt;/td&gt;
  &lt;td align='center'&gt;?&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;exclamation mark&lt;/td&gt;
  &lt;td align='center'&gt;!&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;comma&lt;/td&gt;
  &lt;td align='center'&gt;,&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;colon&lt;/td&gt;
  &lt;td align='center'&gt;:&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;semicolon&lt;/td&gt;
  &lt;td align='center'&gt;;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;dash&lt;/td&gt;
  &lt;td align='center'&gt;&amp;ndash; &amp;mdash&lt;/td&gt;
  &lt;td&gt;&amp;amp;ndash; &amp;amp;mdash&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;hyphen&lt;/td&gt;
  &lt;td align='center'&gt;‐&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Apostrophe"&gt;apostrophe&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;'&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;slash&lt;/td&gt;
  &lt;td align='center'&gt;/&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;stroke&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h4&gt;Typography&lt;/h4&gt;

&lt;table width='100%' border='1' cellspacing='0' cellpadding='2'&gt;
&lt;tr&gt;
  &lt;th&gt;Name&lt;/th&gt;
  &lt;th&gt;Symbol&lt;/th&gt;
  &lt;th&gt;HTML 4.0 Entity&lt;/th&gt;
  &lt;th width='40%'&gt;Remarks&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;tilde&lt;/td&gt;
  &lt;td align='center'&gt;~&lt;/td&gt;
  &lt;td&gt;&amp;amp;tilde;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;grave accent&lt;/td&gt;
  &lt;td align='center'&gt;`&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;at sign&lt;/td&gt;
  &lt;td align='center'&gt;@&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;number sign&lt;/td&gt;
  &lt;td align='center'&gt;#&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;pound sign, hash mark&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;percent&lt;/td&gt;
  &lt;td align='center'&gt;%&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;caret&lt;/td&gt;
  &lt;td align='center'&gt;^&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;circumflex&lt;/td&gt;
  &lt;td align='center'&gt;&amp;circ;&lt;/td&gt;
  &lt;td&gt;&amp;amp;circ;&lt;/td&gt;
  &lt;td&gt;hat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;ampersand&lt;/td&gt;
  &lt;td align='center'&gt;&amp;amp;&lt;/td&gt;
  &lt;td&gt;&amp;amp;amp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;asterisk&lt;/td&gt;
  &lt;td align='center'&gt;*&lt;/td&gt;
  &lt;td&gt;&amp;amp;lowast;&lt;/td&gt;
  &lt;td&gt;star&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;underscore&lt;/td&gt;
  &lt;td align='center'&gt;_&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;understroke&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;backslash&lt;/td&gt;
  &lt;td align='center'&gt;\&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;vertical bar&lt;/td&gt;
  &lt;td align='center'&gt;|&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;td&gt;pipe, stick, vertical slash, thick colon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;pilcrow&lt;/td&gt;
  &lt;td align='center'&gt;&amp;para;&lt;/td&gt;
  &lt;td&gt;&amp;amp;para;&lt;/td&gt;
  &lt;td&gt;paragraph mark, paragraph sign&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;bullet&lt;/td&gt;
  &lt;td align='center'&gt;&amp;bull;&lt;/td&gt;
  &lt;td&gt;&amp;amp;bull;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;section sign&lt;/td&gt;
  &lt;td align='center'&gt;&amp;sect;&lt;/td&gt;
  &lt;td&gt;&amp;amp;sect;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;prime&lt;/td&gt;
  &lt;td align='center'&gt;&amp;prime;&lt;/td&gt;
  &lt;td&gt;&amp;amp;prime;&lt;/td&gt;
  &lt;td&gt;minutes, feet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;double prime&lt;/td&gt;
  &lt;td align='center'&gt;&amp;Prime;&lt;/td&gt;
  &lt;td&gt;&amp;amp;Prime;&lt;/td&gt;
  &lt;td&gt; seconds, inches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;therefore sign&lt;/td&gt;
  &lt;td align='center'&gt;&amp;there4;&lt;/td&gt;
  &lt;td&gt;&amp;amp;there4;&lt;/td&gt;
  &lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;h4&gt;Readings&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='blank' href='http://en.wikipedia.org/wiki/Punctuation'&gt;Punctuation at Wikipedia&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='blank' href='http://pubs.opengroup.org/onlinepubs/007908799/xbd/charset.html'&gt;Portable Character Set in Single UNIX Specification, Version 2&lt;/a&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/8559058673267774097-3549269953299547495?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3549269953299547495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/04/symbols.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3549269953299547495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3549269953299547495'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/04/symbols.html' title='Symbols'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-7951977196521884633</id><published>2010-04-08T09:55:00.003+09:00</published><updated>2010-04-08T10:19:57.118+09:00</updated><title type='text'>1st on AspectJ</title><content type='html'>&lt;h4&gt;Semantics and Syntax Reference&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://eclipse.org/aspectj/doc/released/progguide/semantics.html'&gt;ToC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://eclipse.org/aspectj/doc/released/progguide/semantics-joinPoints.html'&gt;Join Points&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href=''&gt;Pointcuts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://eclipse.org/aspectj/doc/released/progguide/semantics-advice.html'&gt;Advice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://eclipse.org/aspectj/doc/released/progguide/semantics-declare.html'&gt;Static crosscutting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://eclipse.org/aspectj/doc/released/progguide/semantics-aspects.html'&gt;Aspects&lt;/a&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/8559058673267774097-7951977196521884633?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/7951977196521884633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/04/1st-on-aspectj.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7951977196521884633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7951977196521884633'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/04/1st-on-aspectj.html' title='1st on AspectJ'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-6680040732908524559</id><published>2010-03-11T02:08:00.024+09:00</published><updated>2011-11-11T21:46:34.697+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML/CSS'/><title type='text'>Automatic Number of Headers in HTML</title><content type='html'>&lt;p&gt;
You can generate the number of headers(h1 ... h6) in HTML using &lt;code&gt;couner-reset&lt;/code&gt;, &lt;code&gt;counter-increment&lt;/code&gt;, &lt;code&gt;content&lt;/code&gt; properties and &lt;code&gt;:before&lt;/code&gt; pseudo element of CSS2.
&lt;br/&gt;
But this feature is not supported with Internet Explorer 6 and 7.
&lt;br/&gt;&lt;br/&gt;
To localize the numbering, you can demarcate the area using division which has id provperty.&lt;br/&gt;
The following sample shows how you can do it very intuitively.
&lt;/p&gt;
&lt;pre class='code'&gt;
&amp;lt;style type="text/css"&gt;
#go-out-with-her { counter-reset:step; }
#go-out-with-her h5:before{
   content:counter(step) ". ";
   counter-increment:step;
}
&amp;lt;/style&gt;

&amp;lt;div id="go-out-with-her"&gt;
&amp;lt;h5&gt;Choose a movie&amp;lt;/h5&gt;
&amp;lt;p&gt;The movie maybe one of the most common ...&amp;lt;/p&gt;

&amp;lt;h5&gt;Choose time&amp;lt;/h5&gt;
&amp;lt;p&gt;
... Friday or Saturday would be the most proper day.  
Avoid Sunday or too hot day. A slightly rainy day could be positive...
&amp;lt;/p&gt;

&amp;lt;h5&gt;Choose a theater&amp;lt;/h5&gt;
&amp;lt;p&gt;
... You should think in advance where to go after the movie. 
A nice restaurant or a park ...
&amp;lt;/p&gt;

&amp;lt;h5&gt;Call her&amp;lt;/h5&gt;
&amp;lt;p&gt;
... Avoid Monday.... Three or four days before would be nice...
&amp;lt;/p&gt;

&amp;lt;h5&gt;Prepare a small gift&amp;lt;/h5&gt;
&amp;lt;p&gt;
The present should not too expensive, big or uncommon. 
Well-known book, CD could be nice.
&amp;lt;/p&gt;
&amp;lt;/div&gt;
&lt;/pre&gt;

The above source would be look like the following in the browser.

&lt;style type="text/css"&gt;
#go-out-with-her { counter-reset:step; }
#go-out-with-her h5:before{
   content:counter(step) ". ";
   counter-increment:step;
}
&lt;/style&gt;

&lt;div id="go-out-with-her" style="outline:#222222 dashed thin; padding:2pt 2pt 2pt 4pt; background-color:#FFFFFF"&gt;
&lt;h5&gt;Choose a movie&lt;/h5&gt;
&lt;p&gt;The movie maybe one of the most common ...&lt;/p&gt;

&lt;h5&gt;Choose time&lt;/h5&gt;
&lt;p&gt;
... Friday or Saturday would be the most proper day.  
Avoid Sunday or too hot day. A slightly rainy day could be positive...
&lt;/p&gt;

&lt;h5&gt;Choose a theater&lt;/h5&gt;
&lt;p&gt;
... You should think in advance where to go after the movie. 
A nice restaurant or a park ...
&lt;/p&gt;

&lt;h5&gt;Call her&lt;/h5&gt;
&lt;p&gt;
... Avoid Monday.... Three or four days before would be nice...
&lt;/p&gt;

&lt;h5&gt;Prepare a small gift&lt;/h5&gt;
&lt;p&gt;
The present should not too expensive, big or uncommon. 
Well-known book, CD could be nice.
&lt;/p&gt;
&lt;/div&gt;

&lt;br/&gt;&lt;br/&gt;
&lt;p&gt;
The following CSS rules can be applied more generally.&lt;/p&gt;

&lt;pre class='code'&gt;
div.post-body { 
  counter-reset:step-for-h4
}
div.post-body h4:before{
  content:counter(step-for-h4) ". ";
  counter-increment:step-for-h4;
}
div.post-body h4 { 
  counter-reset:step-for-h5 
}
div.post-body h5:before{
  content:counter(step-for-h4) ". " counter(step-for-h5) ". ";
  counter-increment:step-for-h5;
}
div.post-body h5 { 
  counter-reset:step-for-h6 
}
div.post-body h6:before{
  content:counter(step-for-h4) ". " counter(step-for-h5) ". " counter(step-for-h6) ". ";
  counter-increment:step-for-h6;
}
&lt;/pre&gt;

&lt;br/&gt;&lt;br/&gt;
For more readings.

&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://www.w3schools.com/css/pr_gen_counter-reset.asp'&gt;CSS &lt;code&gt;counter-reset&lt;/code&gt; property&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://www.w3schools.com/css/pr_pseudo_before.asp'&gt;CSS &lt;code&gt;:before&lt;/code&gt; pseudo element&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://www.w3.org/TR/CSS2/generate.html#counters'&gt;Automatic counters and numbering in CSS2.1 spec&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a target='_blank' href='http://www.evotech.net/blog/2007/04/named-html-entities-in-numeric-order/'&gt;Named HTML entities in automatic counters and numbering using CSS2.1&lt;/a&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/8559058673267774097-6680040732908524559?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/6680040732908524559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/03/automatic-number-of-headers-in-html.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6680040732908524559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6680040732908524559'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/03/automatic-number-of-headers-in-html.html' title='Automatic Number of Headers in HTML'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-301799751980930273</id><published>2010-02-25T14:35:00.014+09:00</published><updated>2011-10-24T23:42:30.281+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Redmine'/><title type='text'>Tips on Redmine</title><content type='html'>The number in the parenthesis means the version of Redmine.

&lt;h4&gt;Features and Shortness&lt;/h4&gt;

&lt;h5&gt;Features&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;The pages are based on 'XHTML 1.0 Transitional' (0.9.2)&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Shortness&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
List syntax in wiki, especially with ordered list and nested list, can't provide to use blank lines between list items. (0.9.2)&lt;br/&gt;
For example, the following is not to be made simply with Wiki
&lt;pre class='code'&gt;
1. Spring Framework
  - Dependency injection.
  - Application module or component model.

2. iBATIS
  - Data assess.
  - Separation of source and SQL statement.
  - Effective and easy syntax for dynamic query.
  - No resource leakage due to unclosed ResultSet or Statement object.

&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
Each project can't define its own set of issue status. All the project in the Redmine have to share the same set of issue status. (0.8.4)
&lt;/li&gt;
&lt;li&gt;
Writing directly HTML tags in Wiki or Forum is not allowed. (0.9.2)
&lt;/li&gt;
&lt;li&gt;
&lt;s&gt;Tracker and name of the issue can't be changed. Why? (0.9.2)&lt;/s&gt;&lt;br/&gt;
I was wrong. Changing tracker and name of an issue has been possible since 0.9.x
&lt;/li&gt;
&lt;li&gt;
An issue can't be assigned to more than two members. (0.9.2)
&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Notable Redmine Plugins&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Redmine DMSF : &lt;a target="_blank" href="http://code.google.com/p/redmine-dmsf/"&gt;http://code.google.com/p/redmine-dmsf/&lt;/a&gt;&lt;br/&gt;
  is slowly emerging Document Management System Features plugin for Redmine issue tracking system and is aimed to replace current Redmine's Documents module.
  &lt;/li&gt;
  &lt;li&gt;Wiki Extensions : &lt;a target="_blank" href="http://www.r-labs.org/projects/r-labs/wiki/Wiki_Extensions_en"&gt;http://www.r-labs.org/projects/r-labs/wiki/Wiki_Extensions_en&lt;/a&gt;&lt;br/&gt;
  adds usefull wiki macros into your Redmine.
  &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/8559058673267774097-301799751980930273?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/301799751980930273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/02/about-redmine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/301799751980930273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/301799751980930273'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/02/about-redmine.html' title='Tips on Redmine'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-8444160655685720518</id><published>2010-02-12T14:18:00.021+09:00</published><updated>2011-05-19T19:28:30.015+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Redmine'/><title type='text'>Installing Redmine on Windows</title><content type='html'>&lt;h4&gt;Installation Procedure&lt;/h4&gt;

&lt;p&gt;
&lt;a target="_blank" href="http://www.redmine.org/"&gt;Redmine&lt;/a&gt;, which is one of the most promising collaboration software including wiki, issue tracking, forum and etc., is based on Ruby. When you install it, you need some packages for ruby and use commands in ruby's world. So, for those who have no experience on Ruby, the &lt;a target="_blank" href="http://www.redmine.org/wiki/redmine/RedmineInstall"&gt;installation guide&lt;/a&gt; at Redmine's homepage is not enough.
&lt;/p&gt;
&lt;p&gt;
To install Redmine on windows, you should work the following steps.
I intalled Redmine 0.9.2 with them.
Redmine, as of 0.9.2, supports MySQL 4.1+, PostgreSQL 8 and SQLite 3. MySQL is supposed in the followings. You can easily apply the steps for database for PostgreSQL and SQLite. 
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Ruby using Ruby installer.&lt;/li&gt;
&lt;li&gt;Adjust RubyGems.&lt;/li&gt;
&lt;li&gt;Install Rake.&lt;/li&gt;
&lt;li&gt;Install Rails.&lt;/li&gt;
&lt;li&gt;Install internationalization package.&lt;/li&gt;
&lt;li&gt;Install MySQL API module for Ruby.&lt;/li&gt;
&lt;li&gt;Download and extract Redmine binaries.&lt;/li&gt;
&lt;li&gt;Create user and database for Redmine in MySQL.&lt;/li&gt;
&lt;li&gt;Setup database configuration of Redmine.&lt;/li&gt;
&lt;li&gt;Generate a session store secret.&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;PATH&lt;/code&gt; variable of Windows.&lt;/li&gt;
&lt;li&gt;Build database schema.&lt;/li&gt;
&lt;li&gt;Build default configuration data into the database.&lt;/li&gt;
&lt;li&gt;Test the installation.&lt;/li&gt;
&lt;/ol&gt;

&lt;div id="install-redmine"&gt;
&lt;h5&gt;Install Ruby using Ruby installer.&lt;/h5&gt;
&lt;p&gt;
You can find &lt;code&gt;Ruby Installer&lt;/code&gt; for Windows in the following location. : &lt;a target="_blank" href="http://rubyinstaller.org/"&gt;http://rubyinstaller.org/&lt;/a&gt;&lt;br/&gt;
Ruby Installer is .exe file which make it easy to installing Ruby on windows. It includes &lt;code&gt;RubyGems&lt;/code&gt; which is packaging tool for Ruby based applications.&lt;br/&gt;
From 0.8.x to 1.1.x of Redmine, Ruby 1.8.6 or 1.8.7 is necessary and 1.9.x is not supported.&lt;br/&gt;
After you install &lt;code&gt;Ruby&lt;/code&gt; using &lt;code&gt;Ruby Installer&lt;/code&gt;, you can find &lt;code&gt;ruby.exe&lt;/code&gt; and &lt;code&gt;gem.bat&lt;/code&gt; in the &lt;code&gt;bin&lt;/code&gt; directory under the Ruby's home.&lt;br/&gt;
&lt;code&gt;Ruby Installer&lt;/code&gt; will add the &lt;code&gt;bin&lt;/code&gt; directory (eg. &lt;code&gt;c:\ruby\bin&lt;/code&gt;) to &lt;coe&gt;PATH&lt;/code&gt; variable of your windows.
&lt;/p&gt;
&lt;p&gt;
You need to install several packages before installing &lt;code&gt;redmine&lt;/code&gt;. Those includes &lt;code&gt;rake&lt;/code&gt;, &lt;code&gt;rails&lt;/code&gt;, and &lt;code&gt;rack&lt;/code&gt;. According to the version of the Redmine for you to install, each package has limitation for its version. For this, refer to &lt;a target='_blank' href='http://www.redmine.org/projects/redmine/wiki/RedmineInstall'&gt;the official installation guide of Redmine&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
During installation, you can identify the packages installed in your machine using the following command.
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code class='script'&gt;
c:\ruby\bin&gt;gem list -l
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
It seems to be no problem to install different versions of the same package at the same machine. Applications or packages of ruby seem to be able to find proper version among more than one versions of the necessary package in the machine.
&lt;/p&gt;


&lt;h5&gt;Adjust RubyGems.&lt;/h5&gt;

&lt;p&gt;
You should use &lt;code&gt;RubyGems&lt;/code&gt; 1.4.2 or &lt;strong&gt;less&lt;/strong&gt; to install &lt;code&gt;Redmine&lt;/code&gt; 1.1.2 correctly. Using &lt;code&gt;RubyGems&lt;/code&gt; 1.5.2 with &lt;code&gt;Redmine&lt;/code&gt; 1.1.2 would fail when building database schema.
&lt;/p&gt;
&lt;p&gt;
The &lt;code&gt;RubyGems&lt;/code&gt; would be installed with &lt;code&gt;Ruby&lt;/code&gt;. The version of &lt;code&gt;RubyGems&lt;/code&gt; can be identified like this.
&lt;/p&gt;
&lt;pre class="code"&gt;
c:\ruby\bin&gt;gem -v
&lt;/pre&gt;

&lt;p&gt;
If the installed version of the &lt;code&gt;RubyGems&lt;/code&gt; is higher than the one required by &lt;code&gt;Redmine&lt;/code&gt;, you can downgrade the &lt;code&gt;RubyGems&lt;/code&gt; using commands like following.
&lt;pre class="code"&gt;
c:\ruby\bin&gt;gem -v
1.5.2
c:\ruby\bin&gt;gem install rubygems-update -r -v=1.4.2
...
c:\ruby\bin&gt;update_rubygems
...
c:\ruby\bin&gt;gem -v
1.4.2
&lt;/pre&gt;

&lt;h5&gt;Install Rake.&lt;/h5&gt;
&lt;p&gt;
&lt;code&gt;Rake&lt;/code&gt; is build tool for Ruby. It's like &lt;code&gt;make&lt;/code&gt; for Unix or &lt;code&gt;Ant&lt;/code&gt; for Java.&lt;br/&gt;
You can install &lt;code&gt;Rake&lt;/code&gt; using &lt;code&gt;RubyGems&lt;/code&gt;'s remote installation  without manually downloading binaries to your local computer.&lt;br/&gt;


&lt;/p&gt;
&lt;pre class="code"&gt;
c:\ruby\bin&gt;gem install rake -r
&lt;/pre&gt;
&lt;p&gt;
Actually, you can run &lt;code&gt;gem.bat&lt;/code&gt; in any directory, 'cause &lt;code&gt;Ruby Installer&lt;/code&gt; will add the &lt;code&gt;bin&lt;/code&gt; directory to the &lt;code&gt;PATH&lt;/code&gt; variable.&lt;br/&gt;
In the above sample command, &lt;code&gt;-r&lt;/code&gt; option  means remote installation where the &lt;code&gt;RubyGems&lt;/code&gt; would download the wanted packages from the remote site.
&lt;/p&gt;

&lt;h5&gt;Install Rails.&lt;/h5&gt;
&lt;p&gt;
&lt;code&gt;Rails&lt;/code&gt; is that famous application framework for &lt;code&gt;Ruby&lt;/code&gt;. It is also called &lt;code&gt;Ruby on Rails&lt;/code&gt; or &lt;code&gt;RoR&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
Redmine 1.1.x requires &lt;code&gt;Rails&lt;/code&gt; 2.3.5, so, you have to specify the version of the &lt;code&gt;Rails&lt;/code&gt; to install with &lt;code&gt;-v&lt;/code&gt; option.
&lt;/p&gt;
&lt;pre class="code"&gt;
c:\ruby\bin&gt;gem install rails -r -v=2.3.5
&lt;/pre&gt;

&lt;p&gt;
Note that the &lt;code&gt;RubyGems&lt;/code&gt; also install &lt;code&gt;Rack&lt;/code&gt; 1.0.1 during installing &lt;code&gt;Rails&lt;/code&gt; 2.3.5. &lt;code&gt;Rack&lt;/code&gt; is a web server interface of the ruby for ruby frameworks.
&lt;/p&gt;

&lt;h5&gt;Install internationalization package.&lt;/h5&gt;

&lt;p&gt;
&lt;code&gt;Redmine&lt;/code&gt; 1.1.2 with &lt;code&gt;MySQL&lt;/code&gt; 5.0 needs 0.4.2 not higher version of &lt;code&gt;i18n&lt;/code&gt; package.
&lt;/p&gt;

&lt;pre class="code"&gt;&lt;code class='script'&gt;
c:\ruby\bin&gt;gem install i18n -r -v=0.4.2
&lt;/code&gt;&lt;/pre&gt;

&lt;h5&gt;Install MySQL API module for Ruby.&lt;/h5&gt;

&lt;p&gt;
First make query for available &lt;code&gt;mysql&lt;/code&gt; package. The following command will show the latest version of &lt;code&gt;mysql&lt;/code&gt;.
&lt;p&gt;

&lt;pre class="code"&gt;
c:\ruby\bin&gt;gem list mysql -r
&lt;/pre&gt;

&lt;p&gt;
There may be different &lt;code&gt;mysql&lt;/code&gt; packages not only by version but also by platform. If so, you should specify the platform using &lt;code&gt;--platform&lt;/code&gt; option.
&lt;/p&gt;

&lt;pre class="code"&gt;
c:\ruby\bin&gt;gem install mysql -r -v 2.8.1 --platform x86-mswin32
&lt;/pre&gt;

&lt;h5&gt;Download and extract Redmine binaries.&lt;/h5&gt;
&lt;p&gt;
You can get &lt;code&gt;Redmine&lt;/code&gt; in zip format from &lt;a target="_blank" href="http://rubyforge.org/frs/?group_id=1850"&gt;here&lt;/a&gt;.&lt;br/&gt;
You can just extract it any directory you like such as &lt;code&gt;c:\appls\redmine&lt;/code&gt;.&lt;br/&gt;
&lt;/p&gt;

&lt;h5&gt;Create user and database for Redmine in MySQL.&lt;/h5&gt;
&lt;p&gt;
If you don't have MySQL already, install and setup MySQL 5.0.&lt;br/&gt;
You should create a database for &lt;code&gt;Redmine&lt;/code&gt;, create a user and then grant proper privilege to the user. You can use the following SQL statements after logging-in as an administrator
&lt;/p&gt;
&lt;pre class="code"&gt;
create database redmine character set utf8;
create user 'redmine'@'localhost' identified by 'passwordforredmine';
grant all privileges on redmine.* to 'redmine'@'localhost';
&lt;/pre&gt;

&lt;h5&gt;Setup database configuration of Redmine.&lt;/h5&gt;

&lt;p&gt;
For this, refer &lt;a target='_blank' href='http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Installation'&gt;official installation guide of &lt;code&gt;Redmine&lt;/code&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;h5&gt;Generate a session store secret.&lt;/h5&gt;
&lt;p&gt;
If you don't have &lt;code&gt;session_store.rb&lt;/code&gt; in &lt;code&gt;config\initializers\&lt;code&gt; directory under &lt;code&gt;Redmine&lt;/code&gt; home directory (eg. &lt;code&gt;c:\appls\redmine\&lt;/code&gt;), you should generate it first.&lt;br/&gt;
You should run &lt;code&gt;Rake&lt;/code&gt; at &lt;code&gt;Redmine&lt;/code&gt; home directory.
&lt;/p&gt;
&lt;pre class="code"&gt;
c:\appls\redmine&gt;rake generate_session_store
&lt;/pre&gt;
&lt;p&gt;
And now, you can generate secret.
&lt;/p&gt;
&lt;pre class="code"&gt;
C:\appls\redmine&gt;rake config/initializers/session_store.rb RAILS_ENV=production
&lt;/pre&gt;


&lt;h5&gt;Update &lt;code&gt;PATH&lt;/code&gt; variable of Windows.&lt;/h5&gt;

&lt;p&gt;
Ruby's &lt;code&gt;mysql&lt;/code&gt; pacakge needs &lt;code&gt;libmysql.dll&lt;/code&gt; at runtime. Previously the dll was included in Ruby installer but at some time, it became excluded.&lt;br/&gt;
Originally, &lt;code&gt;libmysql.dll&lt;/code&gt; is located in the &lt;code&gt;bin&lt;/code&gt; directory of &lt;code&gt;MySQL&lt;/code&gt; installation.&lt;br/&gt;
So, you need to update &lt;code&gt;PATH&lt;/code&gt; variable of your Windows to include &lt;code&gt;MySQL&lt;/code&gt;'s &lt;code&gt;bin&lt;/code&gt; directory.
&lt;/p&gt;


&lt;h5&gt;Build database schema.&lt;/h5&gt;
&lt;p&gt;
You should run your &lt;code&gt;MySQL&lt;/code&gt; first. And then, use the following &lt;code&gt;Rake&lt;/code&gt; command at &lt;code&gt;Redmine&lt;/code&gt; home directory.
&lt;/p&gt;
&lt;pre class="code"&gt;
C:\appls\redmine&gt;rake db:migrate RAILS_ENV=production
&lt;/pre&gt;

&lt;h5&gt;Build default configuration data into the database.&lt;/h5&gt;
&lt;p&gt;
While still your &lt;code&gt;MySQL&lt;/code&gt; is running,
&lt;/p&gt;
&lt;pre class="code"&gt;
C:\appls\redmine&gt;rake redmine:load_default_data RAILS_ENV=production
&lt;/pre&gt;

&lt;h5&gt;Test the installation.&lt;/h5&gt;
&lt;p&gt;
While still &lt;code&gt;MySQL&lt;/code&gt; is running, start your &lt;code&gt;Redmine&lt;/code&gt;.
&lt;/p&gt;
&lt;pre class="code"&gt;
C:\appls\redmine&gt;ruby script/server webrick -e production
&lt;/pre&gt;
&lt;p&gt;
Access the login page : &lt;a target="_blank" href="http://localhost:3000/login"&gt;http://localhost:3000/login&lt;/a&gt;&lt;br/&gt;
Try to login built-in default account : &lt;code&gt;admin:admin&lt;/code&gt;
&lt;br/&gt;&lt;br/&gt;

&lt;/p&gt;
&lt;/div&gt;

&lt;h4&gt;References&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Official installation guide for &lt;code&gt;Redmine&lt;/code&gt; : &lt;a target="_blank" href="http://www.redmine.org/wiki/redmine/RedmineInstall"&gt;http://www.redmine.org/wiki/redmine/RedmineInstall&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A concise blog article to install &lt;code&gt;Redmine&lt;/code&gt; on Windows : &lt;a target="_blank" href="http://www.codeweblog.com/at-windows-on-the-installation-of-redmine/"&gt;http://www.codeweblog.com/at-windows-on-the-installation-of-redmine/&lt;/a&gt;
&lt;/li&gt;
  &lt;li&gt;Ruby Installer homepage : &lt;a target="_blank" href="http://rubyinstaller.org/"&gt;http://rubyinstaller.org/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;RubyGems manual : &lt;a target="_blank" href="http://docs.rubygems.org/"&gt;http://docs.rubygems.org/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Rack : &lt;a target='_blank' href='http://rack.rubyforge.org/'&gt;http://rack.rubyforge.org/&lt;/a&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/8559058673267774097-8444160655685720518?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/8444160655685720518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/02/installing-redmine-on-windows.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8444160655685720518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8444160655685720518'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/02/installing-redmine-on-windows.html' title='Installing Redmine on Windows'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-8083804508327113055</id><published>2010-02-08T11:13:00.019+09:00</published><updated>2010-02-11T17:58:45.812+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Prefixes for Place-value Notations</title><content type='html'>&lt;table id='prefixes' border='1' cellpadding='1' cellspacing='0'&gt;
&lt;tr&gt;
  &lt;th width='220'&gt;Case&lt;/th&gt;
  &lt;th width='100'&gt;Base&lt;/th&gt;
  &lt;th width='80'&gt;Prefix&lt;/th&gt;
  &lt;th width='120'&gt;Format&lt;/th&gt;
  &lt;th width='380'&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;HTML/XML Character Entities&lt;/td&gt;
  &lt;td class='base'&gt;decimal&lt;/td&gt;
  &lt;td class='prefix'&gt;&amp;amp;#&lt;/td&gt;
  &lt;td class='format'&gt;&amp;amp;#&lt;i&gt;nnnn&lt;/i&gt;&lt;/td&gt;
  &lt;td class='example'&gt;
  &amp;amp;#169 for copyright symbol.&lt;br&gt;
  &amp;amp;#913 for Greek capital letter alpha. 
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;HTML/XML Character Entities&lt;/td&gt;
  &lt;td class='base'&gt;hexadecimal&lt;/td&gt;
  &lt;td class='prefix'&gt;&amp;amp;#x&lt;/td&gt;
  &lt;td class='format'&gt;&amp;amp;#x&lt;i&gt;hhhh&lt;/i&gt;&lt;/td&gt;
  &lt;td class='example'&gt;
  &amp;amp;#xA9 for copyright symbol.&lt;br&gt;
  &amp;amp;#x391 for Greek capital letter alpha. 
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;CSS Colors&lt;/td&gt;
  &lt;td class='base'&gt;hexadecimal&lt;/td&gt;
  &lt;td class='prefix'&gt;#&lt;/td&gt;
  &lt;td class='format'&gt;#&lt;i&gt;hhhhhh&lt;/i&gt; or #&lt;i&gt;hhh&lt;/i&gt;&lt;/td&gt;
  &lt;td class='example'&gt;
  #000000 for black, #ffffff for white,&lt;br/&gt;
  #800080 for purple, #808000 for olive,&lt;br/&gt;
  #ffa400 for orange
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Unicode Code Points&lt;/td&gt;
  &lt;td class='base'&gt;hexadecimal&lt;/td&gt;
  &lt;td class='prefix'&gt;U+&lt;/td&gt;
  &lt;td class='format'&gt;U+&lt;i&gt;hhhh&lt;/i&gt;, U+&lt;i&gt;hhhhh&lt;/i&gt; or U+&lt;i&gt;hhhhhh&lt;/i&gt;&lt;/td&gt;
  &lt;td class='example'&gt;&amp;nbsp;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Unicode Escape Sequence for Character and String Literals&lt;/td&gt;
  &lt;td class='base'&gt;hexadecimal&lt;/td&gt;
  &lt;td class='prefix'&gt;\u&lt;/td&gt;
  &lt;td class='format'&gt;\u&lt;i&gt;hhhh&lt;/i&gt;&lt;/td&gt;
  &lt;td class='example'&gt;
  \u0008 for backspace BS,&lt;br/&gt;
  \u0022 for double quote "&lt;br/&gt;
  \u005c for backslash \ 
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Octal Escape Sequence for Character and String Literals&lt;/td&gt;
  &lt;td class='base'&gt;octal&lt;/td&gt;
  &lt;td class='prefix'&gt;\&lt;/td&gt;
  &lt;td class='format'&gt;\&lt;i&gt;ooo&lt;/i&gt;&lt;/td&gt;
  &lt;td class='example'&gt;
  \10 for backspace BS,&lt;br/&gt;
  \42 for double quote "&lt;br/&gt;
  \134 for backslash \ 
  &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-8083804508327113055?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/8083804508327113055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2010/02/prefixes-for-place-value-notations.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8083804508327113055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8083804508327113055'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2010/02/prefixes-for-place-value-notations.html' title='Prefixes for Place-value Notations'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-5175358794652278317</id><published>2009-12-23T17:08:00.013+09:00</published><updated>2012-02-03T01:24:43.182+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vi'/><title type='text'>Tips on vi</title><content type='html'>&lt;h4&gt;Readings&lt;/h4&gt;

&lt;ul type='circle'&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.ungerhu.com/jxh/vi.html'&gt;vi Reference&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://vimdoc.sourceforge.net/htmldoc/help.html'&gt;Vim documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://tnerual.eriogerg.free.fr/vimqrc.html'&gt;Vim Quick Reference Card&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://vimdoc.sourceforge.net/htmldoc/quickref.html#option-list'&gt;Vim options list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://kldp.org/node/32987'&gt;Changing character-set of the file currently open in the editor (Korean)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Show options&lt;/h4&gt;
&lt;p&gt;
To show all options and their current values, use the following command.
&lt;pre class='code'&gt;&lt;code class='command'&gt;
:set all
&lt;/code&gt;&lt;/pre&gt;
To confirm the specific optiona, use the following command.
&lt;pre class='code'&gt;&lt;code class='command'&gt;
:set &lt;i&gt;option-name&lt;/i&gt;?
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;


&lt;h4&gt;View files in hex format&lt;/h4&gt;
&lt;p&gt;
Command to change to hex view.
&lt;pre class='code'&gt;
:%!xxd
&lt;/pre&gt;
Command to change to normal(ascii) view.
&lt;pre class='code'&gt;
:%!xxd -r
&lt;/pre&gt;

On some platforms where &lt;code&gt;xxd&lt;/code&gt; is not available, you may try to use &lt;code&gt;od&lt;/code&gt; (octal dumping program) command like this.
&lt;pre class='code'&gt;&lt;code&gt;
:%!od -A d -x
&lt;/code&gt;&lt;/pre&gt;

For more about &lt;code&gt;od&lt;/code&gt;, refer the following
&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.opengroup.org/onlinepubs/9699919799/utilities/od.html'&gt;http://www.opengroup.org/onlinepubs/9699919799/utilities/od.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;h4&gt;Confirm and change current encoding in &lt;code&gt;vi&lt;/code&gt; editor&lt;/h4&gt;
&lt;p&gt;
With &lt;code&gt;vi&lt;/code&gt; open, you can confirm the encoding used to display the current text of file with the following command.
&lt;pre class='code'&gt;&lt;code class='command'&gt;
:set encoding?
&lt;/code&gt;&lt;/pre&gt;

If the current coding is not proper with the file to read, you can change the encoding using &lt;code&gt;set encoding&lt;/code&gt; command like the following.
&lt;pre class='code'&gt;&lt;code class='command'&gt;
:set encoding utf-8
&lt;/code&gt;&lt;/pre&gt;
The above sample is when changing to &lt;code&gt;utf-8&lt;/code&gt;.&lt;/br&gt;
To list available encodings, you can use the following command.
&lt;pre class='code'&gt;&lt;code class='command'&gt;
:help encoding-names
&lt;/code&gt;&lt;/pre&gt;

&lt;/p&gt;

&lt;h4&gt;Show line numbers&lt;/h4&gt;
&lt;p&gt;
To show line numbers with &lt;code&gt;vi&lt;/code&gt; editor, you can use the following command.
&lt;pre class='code'&gt;&lt;code class='command'&gt;
:set number
&lt;/code&gt;&lt;/pre&gt;
To hide line numbers, use the following command.
&lt;pre class='code'&gt;&lt;code class='command'&gt;
:set nonumber
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-5175358794652278317?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/5175358794652278317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/12/tips-on-vi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5175358794652278317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5175358794652278317'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/12/tips-on-vi.html' title='Tips on vi'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-5841878499507114522</id><published>2009-11-18T17:46:00.013+09:00</published><updated>2012-02-15T20:17:03.962+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Tips on Windows</title><content type='html'>&lt;h4&gt;Readings : References, Tutorials, Articles&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_o.mspx"&gt;Windows XP Professional : Command-line reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.tomshardware.com/forum/204894-32-disk-write-protected-remove-write-protection'&gt;The Disk is write-protected. Remove the write-protection&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.mydigitallife.info/how-to-disable-write-access-to-usb-hard-disk-and-flash-key-drives/'&gt;How to Disable Write Access to USB Hard Disk and Flash Key Drives&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://malektips.com/xpwtw0018.html'&gt;Change the Favorites Folder Location&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://blogs.msdn.com/b/ie/archive/2007/03/01/ie7-in-vista-folder-redirection-for-favorites-on-the-same-machine.aspx'&gt;IE7 in Vista: Folder Redirection for Favorites on the Same Machine&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://irmantas.com/2011/11/16/how-to-change-filezilla-settings-save-path/'&gt;How to change FileZilla settings save path&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://kb.mozillazine.org/Editing_configuration'&gt;Editing configuration of Mozilla applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Mozilla applications&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://kb.mozillazine.org/Bookmarks'&gt;Managing bookmarks of Firefox&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://kb.mozillazine.org/Browser.bookmarks.autoExportHTML'&gt;Firefox : Export bookmarks to bookmarks.html each time the browser shuts down&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='https://wiki.mozilla.org/Calendar:FAQ#How_do_I_save_my_calendar_file_on_a_local.2Fnetwork_drive'&gt;Calendar : How do I save my calendar file on a local/network drive&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://thunderbirdtweaks.blogspot.com/2011/11/thunderbird-and-exchange-owa.html'&gt;Thunderbird and Exchange / OWA&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://kb.mozillazine.org/Outlook_Web_Access'&gt;mozillaZine : Outlook Web Access&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;


&lt;h5&gt;Excel&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://office.microsoft.com/ko-kr/excel-help/CH010369014.aspx'&gt;Excel Function Reference (in Korean)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.ozgrid.com/Excel/date-time-calculations.htm'&gt;Excel Date &amp; Time Calculations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://capzzang.tistory.com/14'&gt;Generate Gantt like chart in Excel (Korean)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h4&gt;Creating or modifying windows service&lt;/h4&gt;
&lt;p&gt;
To create, delete, start or stop a window service, you can use &lt;code&gt;&lt;b&gt;sc&lt;/b&gt;&lt;/code&gt; command (&lt;code&gt;sc.exe&lt;/code&gt;).&lt;br/&gt;
The following articles describe the command in detail.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://support.microsoft.com/kb/251192'&gt;http://support.microsoft.com/kb/251192&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sc.mspx?mfr=true'&gt;http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sc.mspx?mfr=true&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
A typical example to register new service is like this.
&lt;/p&gt;
&lt;pre class='code'&gt;
c:\&gt; sc create svn
        binpath= "C:\svn\bin\svnserve.exe --service -r C:\repos"
        displayname= "Subversion Server"
        depend= Tcpip
        start= auto
&lt;/pre&gt;
&lt;p&gt;
Note that the equal sign(=) between option name and option value should follow right after option name without any space and should have at least one space before option value.  So, if you write &lt;code&gt;depend=Tcpip&lt;/code&gt; with the above example, it wouldn't work.
&lt;/p&gt;

&lt;h4&gt;Delete cached password for network drive&lt;/h4&gt;
&lt;p&gt;
At DOS console, run the program like the following.
&lt;pre class='code'&gt;
C:\&gt;control userpasswords2
&lt;/pre&gt;
&lt;/p&gt;

&lt;h4&gt;Find the PID of the process occupying specified TCP/UDP port&lt;/h4&gt;
&lt;p&gt;
At DOS console, run the &lt;code&gt;netstat&lt;/code&gt; and filter the result using &lt;code&gt;findstr&lt;/code&gt; command.&lt;br/&gt;
The example is :
&lt;/p&gt;
&lt;pre class='code'&gt;
C:\&gt;netstat -nao | findstr 1098
&lt;/pre&gt;

&lt;h4&gt;Useful Command-line Tools&lt;/h4&gt;

&lt;h5&gt;&lt;code&gt;pathping&lt;/code&gt;&lt;/h5&gt;

On a windows, you can use &lt;code&gt;pathping&lt;/code&gt; command to view the route to the specified IP address.
&lt;pre class='code'&gt;&lt;code class='shell'&gt;
c:\&gt;patfhping www.google.com
&lt;/code&gt;&lt;/pre&gt; 

For more about &lt;code&gt;pathping&lt;/code&gt;, refer the followings.
&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.computerhope.com/pathping.htm'&gt;http://www.computerhope.com/pathping.htm&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://en.wikipedia.org/wiki/PathPing'&gt;http://en.wikipedia.org/wiki/PathPing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;&lt;code&gt;tasklist&lt;/code&gt;&lt;/h5&gt;

Windows equivalent for &lt;strong&gt;&lt;code&gt;ps&lt;/code&gt;&lt;/strong&gt;.

For example, you can find the program or process using PID of 1544, using &lt;code&gt;tasklist&lt;/code&gt; like the following.

&lt;script type="syntaxhighlighter" class="brush:shell"&gt;
c:\&gt;tasklist /fi "PID eq 1544"
&lt;/script&gt;

For complete description of &lt;code&gt;tasklist&lt;/code&gt;, refer &lt;a target="_blank" href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_o.mspx?mfr=true"&gt;http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_o.mspx?mfr=true&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-5841878499507114522?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/5841878499507114522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/11/tips-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5841878499507114522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5841878499507114522'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/11/tips-on-windows.html' title='Tips on Windows'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-8771533968792468628</id><published>2009-11-17T10:02:00.030+09:00</published><updated>2011-06-16T13:51:34.951+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Tips on Oracle for Non-admin User</title><content type='html'>&lt;h4&gt;Readings : References, Tutorials, and Articles&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.oracle.com/pls/db102/homepage'&gt;Oracle Database 10g Documentation Library&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9013.htm#BABEFFEE'&gt;System Privileges of Oracle Database 10g&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; 



&lt;h4&gt;Finding roles and privileges of a user or current session.&lt;/h4&gt;
&lt;p&gt;
With more emphasis on securities, default privileges for a regular(non-DBA) user is very restrictive.  As of Oracle database 10.2, &lt;code&gt;CONNECT&lt;/code&gt; and &lt;code&gt;RESOURCE&lt;/code&gt; which are typical predefined roles for a regular user don't include &lt;code&gt;create view&lt;/code&gt; and &lt;code&gt;create synonym&lt;/code&gt; privileges.
&lt;/p&gt;
&lt;p&gt;
So often, you should have to check what roles and privileges are given for a user. You can do that using the following statements.
&lt;/p&gt;
&lt;pre class='code'&gt;
-- finding all roles for the current session
SELECT * FROM SESSION_ROLES;

-- finding all privileges for the current session
SELECT * FROM SESSION_PRIVS;
&lt;/pre&gt;


&lt;h4&gt;Required roles to access dynamic performance (V$) views.&lt;/h4&gt;
&lt;p&gt;
To access the dynamic performance views such as &lt;code&gt;V$SESSION&lt;/code&gt;, &lt;code&gt;V$PARAMETER&lt;/code&gt; and &lt;code&gt;V$LOCK&lt;/code&gt; as well as static dictionary views of DBA such as &lt;code&gt;DBA_TABLES&lt;/code&gt;, &lt;code&gt;DBA_SEQUENCES&lt;/code&gt; and &lt;code&gt;DBA_SYNONYMS&lt;/code&gt;, the user need &lt;strong&gt;&lt;code&gt;SELECT_CATALOG_ROLE&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
DBA user can grant the role to the user using the following statement.
&lt;/p&gt;
&lt;pre class='code'&gt;&lt;code class='sql'&gt;
GRANT select_catalog_role TO :username;
&lt;/code&gt;&lt;/pre&gt;


&lt;h4&gt;Finding the values of parameters currently in effect.&lt;/h4&gt;
&lt;p&gt;
Checking the context of current operation is really one of the most basic thing you can do in any circumstances.
With Oracle, that is parameters. You can identify the current value of SGA max size, max sessions, optimizer mode or other settings throughout the parameter.
&lt;/p&gt;
&lt;pre class='code'&gt;
SELECT * FROM V$PARAMETER ORDER BY name;
&lt;/pre&gt;
&lt;p&gt;
&lt;code&gt;V$PARAMETER&lt;/code&gt; is one of public synonyms in default installation.
&lt;/p&gt;

&lt;h4&gt;Identifying the character-set of the Oracle instance&lt;/h4&gt;
&lt;p&gt;
Use the following statement.
&lt;/p&gt;
&lt;pre class='code'&gt;
select * from nls_database_parameters
where parameter = 'NLS_CHARACTERSET';
&lt;/pre&gt;


&lt;h4&gt;Changing the password of the user&lt;/h4&gt;
&lt;p&gt;
Use the following statement.
&lt;/p&gt;
&lt;pre class='code'&gt;&lt;code class='sql'&gt;
ALTER USER :username IDENTIFIED BY :password;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
Be cautious not to mark single quotation mark around values of &lt;code&gt;:username&lt;/code&gt; and &lt;code&gt;:password&lt;/code&gt;. The following is simple example.
&lt;/p&gt;
&lt;pre class='code'&gt;&lt;code class='sql'&gt;
ALTER USER hr IDENTIFIED BY hr88rh;
&lt;/code&gt;&lt;/pre&gt;
&lt;br/&gt;
&lt;p&gt;When you are connected to Oracle using SQL*Plus, you can use &lt;code&gt;&lt;strong&gt;password&lt;/strong&gt;&lt;/code&gt; command to change your password.
&lt;br/&gt;
The following is sample command line when changing password of &lt;code&gt;hr&lt;/code&gt; user
&lt;pre class='code'&gt;&lt;code&gt;
SQL&gt;password
Changing password for hr
Old password :
New password : 
Retype new password :
Password changed
&lt;/pcode&gt;&lt;/pre&gt;



&lt;h4&gt;Viewing information about users&lt;/h4&gt;
&lt;p&gt;
About current user, access the following dictionary views.
&lt;/p&gt;
&lt;table border='1' cellpadding='2' cellspacing='0'&gt;
&lt;tr&gt;
   &lt;th&gt;View&lt;/th&gt;
   &lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;USER_USERS&lt;/td&gt;
   &lt;td&gt;Describes only the current user.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;ALL_USERS&lt;/td&gt;
   &lt;td&gt;Lists users visible to the current user, but does not describe them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;USER_TS_QUOTAS&lt;/td&gt;
   &lt;td&gt;Describes tablespace quotas for current user.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;USER_RESOURCE_LIMITS&lt;/td&gt;
   &lt;td&gt;Displays the resource limits for the current user.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;USER_PASSWORD_LIMITS&lt;/td&gt;
   &lt;td&gt;Describes the password profile parameters that are assigned to the user.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;
More privileged users can use the following views to access the information of all users.
&lt;/p&gt;

&lt;table border='1' cellpadding='2' cellspacing='0'&gt;
&lt;tr&gt;
   &lt;th&gt;View&lt;/th&gt;
   &lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;DBA_USERS&lt;/td&gt;
   &lt;td&gt;Describes all users of the database.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;DBA_TS_QUOTAS&lt;/td&gt;
   &lt;td&gt;Describes tablespace quotas for users.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;DBA_PROFILES&lt;/td&gt;
   &lt;td&gt;Displays all profiles and their limits.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;V$SESSION&lt;/td&gt;
   &lt;td&gt;Lists session information for each current session, includes user name.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h4&gt;Use &lt;code&gt;connect&lt;/code&gt; command of &lt;code&gt;SQL*Plus&lt;/code&gt; without &lt;code&gt;tnsnames.ora&lt;/code&gt;&lt;/h4&gt;


&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:45033135081903'&gt;How to connect SQLPlus without tnsnames.ora&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Identifying execution plan of query&lt;/h4&gt;

&lt;h5&gt;Using &lt;code&gt;DBMS_XPLAN.DISPLAY_CURSOR&lt;/code&gt; function&lt;/h5&gt;
&lt;p&gt;
The execution plan of last executed query in plan table can be printed out using &lt;strong&gt;&lt;code&gt;DBMS_XPLAN.DISPLAY_CURSOR&lt;/code&gt;&lt;/strong&gt; function.
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;DBMS_XPLAN&lt;/code&gt; package was introduced at Oracle 9i, but &lt;code&gt;DISPLAY_CURSOR&lt;/code&gt; function was added with Oracle 10g.&lt;br/&gt;
&lt;code&gt;DBMS_XPLAN.DISPLAY_CURSOR&lt;/code&gt; function accesses &lt;code&gt;V$SESSION&lt;/code&gt;, so the user need to have &lt;strong&gt;&lt;code&gt;SELECT_CATALOG_ROLE&lt;/code&gt;&lt;/strong&gt; role to correctly execute &lt;code&gt;select * from table(DBMS_XPLAN.DISPLAY_CURSOR)&lt;/code&gt;
&lt;/p&gt;
&lt;pre class='brush:sql'&gt;
select employee_id, first_name || ' ' || last_name as name, department_id, job_id, manager_id  
from hr.employees  
where job_id = 'SA_REP'  
and manager_id in (146, 147);  

select * from table(DBMS_XPLAN.DISPLAY_CURSOR);
&lt;/pre&gt;
&lt;p&gt;
If you want to see just execution plan and not to actually execute the query.  You can use &lt;strong&gt;&lt;code&gt;EXPLAIN PLAN&lt;/code&gt;&lt;/strong&gt; statement.
&lt;/p&gt;
&lt;pre class='brush:sql'&gt;
explain plan for
select employee_id, first_name || ' ' || last_name as name, department_id, job_id, manager_id  
from hr.employees  
where job_id = 'SA_REP'  
and manager_id in (146, 147);  

select * from table(DBMS_XPLAN.DISPLAY_CURSOR);
&lt;/pre&gt;


&lt;h5&gt;Using autotrace with SQL*Plus&lt;/h5&gt;
&lt;p&gt;
When using SQL*Plus, you can turn on autotrace feature for the current session using &lt;code&gt;SET AUTOTRACE ON&lt;/code&gt; command.
&lt;/p&gt;
&lt;p&gt;
After the autotrace is enabled, execution of query would display normal result data and the execution plan right after it. 
&lt;p&gt;
To use this feature, you must create a &lt;strong&gt;&lt;code&gt;PLAN_TABLE&lt;/code&gt;&lt;/strong&gt; table in your schema and then have the &lt;strong&gt;&lt;code&gt;PLUSTRACE&lt;/code&gt;&lt;/code&gt;&lt;/strong&gt; role granted to you.
&lt;/p&gt;
&lt;pre class='brush:sql'&gt;
SQL&gt;SET AUTOTRACE ON
SQL&gt;SELECT employee_id, first_name || ' ' || last_name as name, department_id, job_id, manager_id
2 FROM hr.employees
3 WHERE job_id = 'SA_REP'  
4 AND manager_id IN (146, 147);  
&lt;/pre&gt;
&lt;p&gt;
If you want to see just execution plan and not to actually execute the query, you can use &lt;strong&gt;&lt;code&gt;SET AUTOTRACE TRACEONLY&lt;/code&gt;&lt;/strong&gt; command.
&lt;/p&gt;
&lt;pre class='brush:sql'&gt;
SQL&gt;SET AUTOTRACE TRACEONLY
SQL&gt;SELECT employee_id, first_name || ' ' || last_name as name, department_id, job_id, manager_id
2 FROM hr.employees
3 WHERE job_id = 'SA_REP'  
4 AND manager_id IN (146, 147);  
&lt;/pre&gt;


&lt;h5&gt;Readings&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_xplan.htm'&gt;&lt;strong&gt;&lt;code&gt;DBMS_XPLAN&lt;/code&gt;&lt;/strong&gt; of Oracle Database 10.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch8.htm#i1037226'&gt;Tracing Statements of Oracle Database 10.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9010.htm#i2061796'&gt;&lt;strong&gt;&lt;code&gt;EXPLAIN PLAN&lt;/code&gt;&lt;/strong&gt; statement of Oracle Database 10.2&lt;/a&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/8559058673267774097-8771533968792468628?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/8771533968792468628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/11/tips-on-oracle-for-non-admin-user.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8771533968792468628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8771533968792468628'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/11/tips-on-oracle-for-non-admin-user.html' title='Tips on Oracle for Non-admin User'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-5739323131205425194</id><published>2009-10-20T20:01:00.009+09:00</published><updated>2009-10-22T14:25:30.635+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='P6Spy'/><title type='text'>Loading P6Spy Configuration File at Custom Position</title><content type='html'>&lt;p&gt;
&lt;code&gt;P6Spy&lt;/code&gt; automatically loads configuration file named &lt;code&gt;spy.properties&lt;/code&gt; on one of the top directories in classpath at initialization. For example, if your classpath is '&lt;code&gt;/foo:/foo/bar.jar&lt;/code&gt;', &lt;code&gt;/foo/spy.properties&lt;/code&gt; would be automatically configured.
&lt;/p&gt;
&lt;p&gt;
But if you should use different name or position, for example &lt;code&gt;/foo/spy-test.properties&lt;/code&gt; or &lt;code&gt;/foo/baz/qux/spy.properties&lt;/code&gt;, you can use &lt;code&gt;spy.properties&lt;/code&gt; system property to set the position and name of property file relative to classpath.&lt;br/&gt;
For example, if you want to load &lt;code&gt;/foo/baz/qux/spy-sql.properties&lt;/code&gt; file with classpath of '&lt;code&gt;/foo:/foo/bar.jar&lt;/code&gt;'., you can use command-line like the following. Note that the value should be relative to classpath. It is not &lt;code&gt;/foo/baz/qux/spy-sql.properties&lt;/code&gt; but &lt;code&gt;baz/qux/spy-sql.properties&lt;/code&gt;. 
&lt;/p&gt;
&lt;pre class='code'&gt;
java -Dspy.properties=baz/qux/spy-sql.properties MyApplication.java
&lt;/pre&gt;
&lt;code&gt;

&lt;p&gt;
You can also specify the property file with custom position and name using &lt;code&gt;p6.home&lt;/code&gt; system property. Refer the 'Command Line Options' section of the official document(&lt;a target='_blank' href='http://www.p6spy.com/documentation/other.htm#common'&gt;http://www.p6spy.com/documentation/other.htm#common&lt;/a&gt;). But in this case, you should specify the absolute path of the property file, which is less portable.
&lt;p&gt;
In case of &lt;code&gt;JUnit&lt;/code&gt; 4.x test case, you can set the system property in &lt;code&gt;BeforeClass&lt;/code&gt; method which would be executed before loading &lt;code&gt;P6Spy&lt;/code&gt;.
&lt;/p&gt;
&lt;pre class='code'&gt;
public class MyTest{
   @BeforeClass
   public static void setUpBeforeClass() throws Exception{
      System.setProperty("spy.properties", "baz/qux/spy-sql.properties");
   }

   @Test
   public void testMyMethod(){
      //...
   }

   //...
}
&lt;/pre&gt;
&lt;p&gt;
There are few interesting article about integrating &lt;code&gt;Spring framework&lt;/code&gt; and &lt;code&gt;P6Spy&lt;/code&gt;.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://templth.blogspot.com/2004/11/integrate-p6spy-with-spring.html'&gt;http://templth.blogspot.com/2004/11/integrate-p6spy-with-spring.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://atog.be/2005/07/12/p6spy-and-spring.html'&gt;http://atog.be/2005/07/12/p6spy-and-spring.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The configuration of &lt;code&gt;P6Spy&lt;/code&gt; could be more flexible using above tip. When I have finished the testing, I will write it also.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-5739323131205425194?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/5739323131205425194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/10/loading-p6spy-configuration-file-at.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5739323131205425194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5739323131205425194'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/10/loading-p6spy-configuration-file-at.html' title='Loading P6Spy Configuration File at Custom Position'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-6323465613146497396</id><published>2009-10-20T14:07:00.011+09:00</published><updated>2011-12-01T11:24:31.995+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Ant Task to Process XSLT Including XInclude</title><content type='html'>&lt;p&gt;
&lt;code&gt;Ant&lt;/code&gt;'s built-in task &lt;code&gt;xslt&lt;/code&gt; seems to have problem to transform XML documents which use &lt;code&gt;XInclude&lt;/code&gt;.  With simple documents and &lt;code&gt;xslt&lt;/code&gt; based script, I couldn't correct result with the following warning message saying that it couldn't process &lt;code&gt;XInclude&lt;/code&gt;.
&lt;/p&gt;

&lt;pre class="code"&gt;
[xslt] Element include in namespace 'http://www.w3.org/2001/XInclude' encountered in book, 
but no template matches.
&lt;/pre&gt;

&lt;p&gt;
I had searched Google to find the same cases and solutions for a few hours, but I couldn't found the helpful one.&lt;br/&gt;
&lt;/p&gt;
&lt;p&gt;
But, using &lt;code&gt;java&lt;/code&gt; task of &lt;code&gt;Ant&lt;/code&gt;, I can write working script for documents using &lt;code&gt;XInclude&lt;/code&gt;.&lt;br/&gt;
The following is my script.
&lt;/p&gt;

&lt;pre class='code'&gt;
 &amp;lt;artifact:dependencies pathId="dependency.classpath" filesetId="dependency.fileset"&gt;
  &amp;lt;dependency groupId="xerces" artifactId="xercesImpl" version="2.9.1" /&gt;
  &amp;lt;dependency groupId="xalan" artifactId="xalan" version="2.7.1" /&gt;
  &amp;lt;dependency groupId="saxon" artifactId="saxon" version="6.5.3" /&gt;
  &amp;lt;dependency groupId="net.sf.docbook" artifactId="docbook-xml" 
    version="5.0-all" classifier="resources" type="zip" /&gt;
  &amp;lt;dependency groupId="net.sf.docbook" artifactId="docbook-xsl" 
    version="1.74.3" classifier="resources" type="zip" /&gt;
  &amp;lt;dependency groupId="net.sf.docbook" artifactId="docbook-xsl" 
    version="1.74.3" classifier="ns-resources" type="zip" /&gt;
  &amp;lt;dependency groupId="net.sf.docbook" artifactId="docbook-xsl-xalan" version="1.0.0" /&gt;
  &amp;lt;dependency groupId="net.sf.docbook" artifactId="docbook-xsl-saxon" version="1.0.0" /&gt;
  &amp;lt;dependency groupId="org.apache.xmlgraphics" artifactId="fop" version="0.93"/&gt;
 &amp;lt;/artifact:dependencies&gt;

 &amp;lt;target name="build-spec-xhtml-using-java-saxson-6"&gt;
  &amp;lt;delete file="${target.base}/spec/xhtml/spec.html"/&gt;
  &amp;lt;java classname="com.icl.saxon.StyleSheet" fork="yes" 
        dir="." failonerror="true"&gt;
   &amp;lt;classpath refid="dependency.classpath" /&gt;
   &amp;lt;sysproperty key="javax.xml.parsers.DocumentBuilderFactory"
    value="org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"/&gt;
   &amp;lt;sysproperty key="javax.xml.parsers.SAXParserFactory"
    value="org.apache.xerces.jaxp.SAXParserFactoryImpl"/&gt;
   &amp;lt;sysproperty key="org.apache.xerces.xni.parser.XMLParserConfiguration"
    value="org.apache.xerces.parsers.XIncludeParserConfiguration"/&gt;
    
   &amp;lt;arg line="-o ${target.base}/spec/xhtml/spec.html"/&gt;
   &amp;lt;arg line="-l"/&gt;
   &amp;lt;arg line="./spec/spec.docbook"/&gt;
   &amp;lt;arg line="${docbook.xsl.dir}/xhtml/docbook.xsl"/&gt;

   &amp;lt;!-- parameters for XSLT --&gt;
   &amp;lt;arg line="toc.max.depth=3"/&gt;
   &amp;lt;arg line='generate.toc="book toc,title,figure,table,example,equation"'/&gt;
   &amp;lt;arg line="use.extensions=1"/&gt;
   &amp;lt;arg line="part.autolabel=1"/&gt;
   &amp;lt;arg line="chapter.autolabel=1"/&gt;
   &amp;lt;arg line="section.autolabel=1"/&gt;
   &amp;lt;arg line="section.label.includes.component.label=1"/&gt;
   &amp;lt;arg line="section.autolabel.max.depth=4"/&gt;
   &amp;lt;arg line="appendix.autolabel=A"/&gt;
   &amp;lt;arg line="chunker.output.indent=yes"/&gt;
   &amp;lt;arg line="chunker.output.encoding=UTF-8"/&gt;
   &amp;lt;arg line="html.stylesheet=docbook-freebsd.css"/&gt;
   &amp;lt;arg line="generate.id.attributes=1"/&gt;
   &amp;lt;arg line="para.propagates.style=1"/&gt;
   &amp;lt;arg line="entry.propagates.style=1"/&gt;
   &amp;lt;arg line="emphasis.propagates.style=1"/&gt;
   &amp;lt;arg line="phrase.propagates.style=1"/&gt;
  &amp;lt;/java&gt;
 &amp;lt;/target&gt;
&lt;/pre&gt;

&lt;p&gt;
For more information, refer the followings.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.sagehill.net/docbookxsl/Xinclude.html#XercesXinclude'&gt;http://www.sagehill.net/docbookxsl/Xinclude.html#XercesXinclude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.sagehill.net/docbookxsl/Parameters.html#ParameterSyntax'&gt;http://www.sagehill.net/docbookxsl/Parameters.html#ParameterSyntax&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.sagehill.net/docbookxsl/Xinclude.html#XercesXinclude'&gt;http://www.sagehill.net/docbookxsl/Xinclude.html#XercesXinclude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://saxon.sourceforge.net/saxon6.5.2/using-xsl.html'&gt;http://saxon.sourceforge.net/saxon6.5.2/using-xsl.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://ant.apache.org/manual/CoreTasks/java.html'&gt;http://ant.apache.org/manual/CoreTasks/java.html&lt;/a&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/8559058673267774097-6323465613146497396?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/6323465613146497396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/10/ant-task-to-process-xslt-using-xinclude.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6323465613146497396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6323465613146497396'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/10/ant-task-to-process-xslt-using-xinclude.html' title='Ant Task to Process XSLT Including XInclude'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-1295268404051640630</id><published>2009-10-19T21:09:00.013+09:00</published><updated>2011-12-01T11:24:54.172+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Java System Properties for JAXP (Java API for XML Parsing)</title><content type='html'>&lt;h4&gt;&lt;code&gt;javax.xml.parsers.SAXParserFactory&lt;/code&gt;&lt;/h4&gt;
&lt;table width='100%' border='1' cellpadding='2' cellspacing='0' style='margin-left:10px'&gt;
&lt;tr&gt;
  &lt;th width='200'&gt;Parser&lt;/th&gt;
  &lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Xerces&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;org.apache.xerces.jaxp.SAXParserFactoryImpl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h4&gt;&lt;code&gt;javax.xml.parsers.DocumentBuilderFactory&lt;/code&gt;&lt;/h4&gt;
&lt;table width='100%' border='1' cellpadding='2' cellspacing='0' style='margin-left:10px'&gt;
&lt;tr&gt;
  &lt;th width='200'&gt;Parser&lt;/th&gt;
  &lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Xerces&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;org.apache.xerces.jaxp.DocumentBuilderFactoryImpl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h4&gt;&lt;code&gt;javax.xml.transform.TransformerFactory&lt;/code&gt;&lt;/h4&gt;
&lt;table width='100%' border='1' cellpadding='2' cellspacing='0' style='margin-left:10px'&gt;
&lt;tr&gt;
  &lt;th width='200'&gt;XSLT Processor&lt;/th&gt;
  &lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Xalan&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;org.apache.xalan.processor.TransformerFactoryImpl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Xalan bundled in JDK 1.5&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Xalan XSLTC&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;org.apache.xalan.xsltc.trax.TransformerFactoryImpl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Saxon 6.x&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;com.icl.saxon.TransformerFactoryImpl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Saxon 7.x and 8.x:&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;net.sf.saxon.TransformerFactoryImpl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-1295268404051640630?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/1295268404051640630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/10/java-system-properties-to-process-xml.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1295268404051640630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1295268404051640630'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/10/java-system-properties-to-process-xml.html' title='Java System Properties for JAXP (Java API for XML Parsing)'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-8751997430997834250</id><published>2009-10-09T14:46:00.007+09:00</published><updated>2010-04-13T02:44:45.883+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Guidelines for Technical Writing</title><content type='html'>&lt;p&gt;
Developer guide and education is more important than expected to the learning curve and performance of the application developer.&lt;/p&gt;

&lt;ul&gt;
&lt;li style="list-style-type:circle;font-weight:bold;"&gt;Use formal style in statement.&lt;/li&gt;
&lt;ul&gt;
&lt;li style="list-style-type:none;"&gt;. Try to use intuitive and easy-to-read statement.&lt;/li&gt;
&lt;li style="list-style-type:none;"&gt;. Try to use exact and consistent words and terms.&lt;/li&gt;
&lt;/ul&gt;

&lt;li style="list-style-type:circle;font-weight:bold;"&gt;Write guidelines from the viewpoint of application developer.&lt;/li&gt;
&lt;ul&gt;
&lt;li style="list-style-type:none;"&gt;. Don't describe framework internal which application developers may not know.&lt;/li&gt;
&lt;li style="list-style-type:none;"&gt;. Keep consistent viewpoints.&lt;/li&gt;
&lt;/ul&gt;

&lt;li style="list-style-type:circle;font-weight:bold;"&gt;Design the subjects and overall structure before writing details.&lt;/li&gt;
&lt;ul&gt;
&lt;li style="list-style-type:none;"&gt;. Write down the table of contents first.&lt;/li&gt;
&lt;/ul&gt;

&lt;li style="list-style-type:circle;font-weight:bold;"&gt;Adopt overview and detail pattern.&lt;/li&gt;
&lt;ul&gt;
&lt;li style="list-style-type:none;"&gt;. There are patterns also in documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;li style="list-style-type:circle;font-weight:bold;"&gt;Use lists and tables as possible.&lt;/li&gt;
&lt;ul&gt;
&lt;li style="list-style-type:none;"&gt;. Lists are effective for describing process, arranging important points and cautions.&lt;/li&gt;
&lt;li style="list-style-type:none;"&gt;. Tables are effective for summarizing key-value style or hierarchical contents.&lt;/li&gt;
&lt;/ul&gt;

&lt;li style="list-style-type:circle;font-weight:bold;"&gt;Don't use images as possible.&lt;/li&gt;
&lt;ul&gt;
&lt;li style="list-style-type:none;"&gt;. Images are hard to maintain and update.&lt;/li&gt;
&lt;li style="list-style-type:none;"&gt;. Images are easy to understand at first sight but tend to shade details and exactness.&lt;/li&gt;
&lt;li style="list-style-type:none;"&gt;. Images are prone to waste volume of documents and make it difficult to transform documents.&lt;/li&gt;
&lt;/ul&gt;

&lt;li style="list-style-type:circle;font-weight:bold;"&gt;Use non-trivial and consistent examples.&lt;/li&gt;
&lt;ul&gt;
&lt;li style="list-style-type:none;"&gt;. Trivial examples can't make developers move fast to actual application.&lt;/li&gt;
&lt;li style="list-style-type:none;"&gt;. Examples should be flexible and scalable as the framework grows.&lt;/li&gt;
&lt;li style="list-style-type:none;"&gt;. Think of PetClinic sample appl. in spring framework's reference and PetStore sampl appl. in iBATIS' manual.&lt;/li&gt;
&lt;/ul&gt;

&lt;li style="list-style-type:circle;font-weight:bold;"&gt;Try to derive and find out principles and techniques for excellent documentation.&lt;/li&gt;
&lt;ul&gt;
&lt;li style="list-style-type:none;"&gt;. Be creative.&lt;/li&gt;
&lt;/ul&gt;

&lt;li style="list-style-type:circle;font-weight:bold;"&gt;Establish effective and efficient documentation system.&lt;/li&gt;
&lt;ul&gt;
&lt;li style="list-style-type:none;"&gt;. Think of docbook, wiki or other solutions and best practices.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-8751997430997834250?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/8751997430997834250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/10/guidelines-for-technical-writing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8751997430997834250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/8751997430997834250'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/10/guidelines-for-technical-writing.html' title='Guidelines for Technical Writing'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2378932501966224015</id><published>2009-09-30T23:54:00.012+09:00</published><updated>2009-10-06T13:48:22.007+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iBATIS'/><title type='text'>Performance of iBATIS</title><content type='html'>&lt;h4&gt;Lock occurs at com.ibatis.common.beans.ClassInfo#getInstance in case of cacheEnabled = true&lt;/h4&gt;
&lt;p&gt;
In heavy traffic , lock occurs at &lt;code&gt;com.ibatis.common.beans.ClassInfo#getInstance&lt;/code&gt; in case of &lt;code&gt;cacheEnabled = true&lt;/code&gt;.
It seems to be happend because of "double synchronized"
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='https://issues.apache.org/jira/browse/IBATIS-508?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12683961'&gt;https://issues.apache.org/jira/browse/IBATIS-508?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12683961&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The following is interesting article related to the above issue. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://www.kaigrabfelder.de/en/2009/05/01/concurrency_vs_synchronization.html'&gt;http://www.kaigrabfelder.de/en/2009/05/01/concurrency_vs_synchronization.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The above article says that we'd better use java.util.concurrent.ConcurrentHashMap (in JDK 5) rather than Collections.synchronizedMap, Hashtable or synchronized block.
&lt;/p&gt;
&lt;p&gt;
Here is another article worth reading.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://www.sun.com/bigadmin/features/articles/jvm_tuning_study.jsp#Ibatis'&gt;http://www.sun.com/bigadmin/features/articles/jvm_tuning_study.jsp#Ibatis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;br/&gt;

&lt;h4&gt;Race conditions in Throttle lead to thread blockage popping items from ThrottledPools under stress.&lt;/h4&gt;
&lt;p&gt;
&lt;code&gt;com.ibatis.common.util.Throttle&lt;/code&gt; seems to be a mechanism for iBATIS to control concurrent load, but causes few problems. Throttle is removed entirely in 2.3.1.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='https://issues.apache.org/jira/browse/IBATIS-249?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12491675'&gt;https://issues.apache.org/jira/browse/IBATIS-249?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12491675&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;p&gt;
The test I involved showed 20% enhancement of throughput under high congestion after removing wait and notify from &lt;code&gt;com.ibatis.common.util.Throttle&lt;/code&gt; and applying &lt;code&gt;ConcurrentHashMap&lt;/code&gt; to &lt;code&gt;com.ibatis.common.beans.ClassInfo.getInstance()&lt;/code&gt;. The tested application was stock trading application which had about 12,000 lines in all and consisted of 8 stateless local session beans using iBATIS 2.3 for data access. The application had about 12,000 lines. The application was on a IBM machine which had 10 PowerPC POWER6 CPUs and 16GB RAM. The stress test showed 2,400TPS before and 2,900TPS after the fixing.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-2378932501966224015?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2378932501966224015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/09/performance-of-ibatis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2378932501966224015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2378932501966224015'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/09/performance-of-ibatis.html' title='Performance of iBATIS'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3091124125569165977</id><published>2009-09-30T10:33:00.005+09:00</published><updated>2011-02-15T16:23:32.855+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iBATIS'/><title type='text'>Oracle BLOB/CLOB Handling of iBATIS</title><content type='html'>&lt;p&gt;
The followings are tested and applied with iBATIS 2.3 and Oracle 10g. In case of iBATIS 3, is there anyone who tested the same thing ?
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
Oracle CLOB columns can be mapped string fields like VARCHAR2 columns without additional type handler or explicit Java/JDBC type description. In fact this feature is completely the benefit of enhancement of Oracle JDBC driver. Oracle JDBC driver higher than 10.2 provides functionality to handle CLOB column like varchar cloumn and it will work with Oracle database 9i as well as Oracle database 10g or higher. About this you can refer the following article.
&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/clob10g/handlingclobsinoraclejdbc10g.html'&gt;
http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/clob10g/handlingclobsinoraclejdbc10g.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
Oracle BLOB column can be mapped byte[] field without custom handler using JDBC type and Java type description in result map definition or parameter map definition. This feature needs iBATIS 2.0.9 or higher and recent Oracle JDBC driver.
Unlike the above article, the javaType="[B" should be described explicitly in my case.
&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+use+a+BLOB+or+CLOB'&gt;http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+use+a+BLOB+or+CLOB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-3091124125569165977?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3091124125569165977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/09/oracle-blobclob-handling-of-ibatis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3091124125569165977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3091124125569165977'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/09/oracle-blobclob-handling-of-ibatis.html' title='Oracle BLOB/CLOB Handling of iBATIS'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-38274747570968381</id><published>2009-09-29T18:25:00.004+09:00</published><updated>2009-09-30T10:31:37.760+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Session Limits on Oracle</title><content type='html'>Oracle manages the global(instant level) limit for concurrent session and can be configured to manage per-user session limit through profile


&lt;h4&gt;Global concurrent session limit&lt;/h4&gt;
&lt;p&gt;
The &lt;code&gt;SESSIONS&lt;/code&gt; of initialization parameter specifies the max. number of sessions that can be created in the system at the same time. The &lt;code&gt;OPEN_CURSORS&lt;/code&gt; and &lt;code&gt;SESSIONS&lt;/code&gt; specify the max. number of concurrent open cursors for the system.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href='http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams191.htm#i1133629' target='_blank'&gt;http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams191.htm#i1133629&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href='http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams138.htm#CHDFEAFG' target='_blank'&gt;http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams138.htm#CHDFEAFG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;h4&gt;Per-user concurrent session limit&lt;/h4&gt;
&lt;p&gt;
Using profile, Oracle can be configured to manage resource limits to a specific user. The configurable resources include &lt;code&gt;SESSIONS_PER_USER&lt;/code&gt;, &lt;code&gt;CPU_PER_SESSION&lt;/code&gt;, &lt;code&gt;CPU_PER_CALL&lt;/code&gt;, and so on.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/B19306_01/network.102/b14266/authoriz.htm#i1009631'&gt;http://download.oracle.com/docs/cd/B19306_01/network.102/b14266/authoriz.htm#i1009631&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_6010.htm#i2065930'&gt;http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_6010.htm#i2065930&lt;/a&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/8559058673267774097-38274747570968381?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/38274747570968381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/09/session-limits-on-oracle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/38274747570968381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/38274747570968381'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/09/session-limits-on-oracle.html' title='Session Limits on Oracle'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-6411896711778152616</id><published>2009-09-22T12:27:00.032+09:00</published><updated>2010-11-15T14:42:45.275+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebSphere'/><title type='text'>Tips on WebSphere</title><content type='html'>&lt;h4&gt;Articles on WebSphere&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a target='_blank' href='http://www.ibm.com/developerworks/websphere/techjournal/0609_alcott/0609_alcott.html'&gt;Using Spring and Hibernate with WebSphere Application Server&lt;/a&gt;&lt;br/&gt;
Get the most out of your open source environment using WebSphere Application Server V6 through V7.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Characteristics of WebSphere&lt;/h4&gt;
&lt;h5&gt;Transaction timeout of JTS doesn't throws any exception.&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;JTS throws no exception when transaction timeout occurs and so, the transaction would not roll-backed only with transaction timeout. The method timeout or something else should notify the container to roll-back the transaction.&lt;/li&gt;
&lt;li&gt;This is explicitly documented with WebSphere 5.1, but 7.0 seems to have same feature.&lt;/li&gt;
&lt;li style='list-style:none;padding:14px 0px 14px 0px'&gt;&lt;a href='http://publib.boulder.ibm.com/infocenter/wasinfo/v4r0/topic/com.ibm.support.was40.doc/html/Java_Transaction_Service__JTS_/swg21207635.html' target='_blank'&gt;http://publib.boulder.ibm.com/infocenter/wasinfo/v4r0/topic/com.ibm.support.was40.doc/html/Java_Transaction_Service__JTS_/swg21207635.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;JBoss 4.2 has the same behavior with it's default JTA (&lt;code&gt;com.arjuna.ats.jbossatx.jta.TransactionManagerService&lt;/code&gt;) in the default config. I can't find any plausible parameter to change the behavior. (Is there anyone who knows whether it is the specified behavior for transaction timeout in JTA or JTS specification.)
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;The container throws org.omg.CORBA.TRANSACTION_ROLLBACK exception which can't nest the cause to itself.&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;When the unchecked exception is thrown in enterprise bean, the container intercepts it and throw TRANSACTION_ROLLBACK exception to remote client. The TRANSACTION_ROLLBACK can't nest the cause exception, so, the client can't trace the whole stack of the exception.&lt;/li&gt;
&lt;li&gt;This would be critical to architectures of which the front layer draws all the exceptions and handle them, because the real exception can't be delivered to front layer.&lt;/li&gt;
&lt;li&gt;This is explicitly documented with WebSphere 5.1, but 7.0 seems to have same feature.&lt;/li&gt;
&lt;li style='list-style:none;padding:14px 0px 14px 0px'&gt;&lt;a href='http://publib.boulder.ibm.com/infocenter/wasinfo/v4r0/topic/com.ibm.support.was40.doc/html/WebSphere_Application_Server/swg21110173.html' target='_blank'&gt;http://publib.boulder.ibm.com/infocenter/wasinfo/v4r0/topic/com.ibm.support.was40.doc/html/WebSphere_Application_Server/swg21110173.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The above problem can be solved by explicitly specifying JDBC level statement timeout.&lt;br&gt;
In case of using iBATIS, you can specify the sql-map client scope value using defaultStatementTimeout attribute of setting element in sqlmap-config.xml file, or statement scope value using timeout attribute of select, update, delete or insert element of each sql map file.
If you are not using iBATIS or something like it, I think you may specify global value using JDBC driver specific parameter.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;The container starts loading apache commons-logging configured to JDK logging.&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;This is in fact not a bug but a really normal case. The application that use apache commons-logging has to load its own commons-logging module by configuring the class loader priority and providing its own commons-logging.properties file.
&lt;/li&gt;
&lt;li style='list-style:none;padding:14px 0px 14px 0px'&gt;&lt;a href='http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/ctrb_classload_jcl_conf.html' target='_blank'&gt;http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/ctrb_classload_jcl_conf.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;The container wrapping run-time exception from the local enterprise bean into &lt;code&gt;UnknownLocalException&lt;/code&gt; which is a subclass of &lt;code&gt;EJBException&lt;/code&gt;.&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;The following article from IBM say this is according to EJB 2.0 specification. I haven't checked this with other J2EE server like WebLogic or JBoss.
&lt;li style='list-style:none;padding:14px 0px 14px 0px'&gt;&lt;a href='http://www-01.ibm.com/support/docview.wss?uid=swg21199310' target='_blank'&gt;http://www-01.ibm.com/support/docview.wss?uid=swg21199310&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Naming Service&lt;/h4&gt;
&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.nd.iseries.doc/info/iseriesnd/ae/rnam_example_prop2.html'&gt;Accessing naming context for server cluster.&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.nd.iseries.doc/info/iseriesnd/ae/rnam_example_prop3.html'&gt;Looking up an EJB home or business interface with JNDI.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Startup Beans&lt;/h4&gt;
With startup beans of WebSphere, you can make some specific logic would be executed in the startup time or stop time. You can use startup beans at application level or module level.
&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/topic/com.ibm.iea.was_v6/was/6.0/PME/WASv6_Startup_Beans.pdf'&gt;WebSphere Application Server v6 Startup Beans&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/welc6tech_sub_intro.html'&gt;WebSphere Application Server Version 7.0 - Startup Beans&lt;/a&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/8559058673267774097-6411896711778152616?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/6411896711778152616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/09/tips-on-websphere.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6411896711778152616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6411896711778152616'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/09/tips-on-websphere.html' title='Tips on WebSphere'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3638299628239947016</id><published>2009-09-15T10:12:00.004+09:00</published><updated>2009-09-30T10:32:28.608+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Questions</title><content type='html'>&lt;h4&gt;Questions ???&lt;/h4&gt;


&lt;ul&gt;
&lt;li&gt;How to combine two beans at design time in different container. (2009-09-15)&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/8559058673267774097-3638299628239947016?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3638299628239947016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/09/questions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3638299628239947016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3638299628239947016'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/09/questions.html' title='Questions'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-4423210835104709421</id><published>2009-09-05T13:29:00.077+09:00</published><updated>2012-01-30T17:06:42.177+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Tips on Maven</title><content type='html'>&lt;h4&gt;Overview&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Maven Getting Started Guide : &lt;a target='_blank' href='http://maven.apache.org/guides/getting-started/index.html'&gt;http://maven.apache.org/guides/getting-started/index.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;POM Reference : &lt;a target='_blank' href='http://maven.apache.org/pom.html'&gt;http://maven.apache.org/pom.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;Maven Build Lifecycle : &lt;a target='_blank' href='http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html'&gt;http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Maven Plugin List : &lt;a target='_blank' href='http://maven.apache.org/plugins/'&gt;http://maven.apache.org/plugins/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Maven Shared Components : &lt;a target='_blank' href='http://maven.apache.org/shared/'&gt;http://maven.apache.org/shared/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;mvn Command Line Options : &lt;a target='_blank' href='http://www.sonatype.com/books/mvnref-book/reference/running.html#running-sect-help-option'&gt;http://www.sonatype.com/books/mvnref-book/reference/running.html#running-sect-help-option&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;


&lt;h4&gt;Readings : references, tutorials and articles&lt;/h4&gt;

&lt;ul type='circle'&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://maven.apache.org/ref/2.2.1/maven-model/maven.html'&gt;XML Schema and description for Maven POM file(maven-4.0.0.xsd).&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://maven.apache.org/ref/3.0/maven-model/apidocs/'&gt;Maven Model 3.0 API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://maven.apache.org/ref/3.0/maven-core/apidocs/'&gt;Maven Core 3.0 API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://maven.apache.org/ref/3.0/maven-core/apidocs/index.html?org/apache/maven/project/MavenProject.html'&gt;API of &lt;code&gt;MavenProject&lt;/code&gt; class&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://cvs.peopleware.be/training/maven/maven2/mvnCommand.html'&gt;The &lt;strong&gt;&lt;code&gt;mvn&lt;/code&gt;&lt;/strong&gt; Command&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Sonatype books&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.sonatype.com/books/mvnref-book/reference/public-book.html'&gt;Maven the Complete Reference&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.sonatype.com/books/m2eclipse-book/reference/'&gt;Developing with Eclipse and Maven&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.sonatype.com/books/mvnex-book/reference/public-book.html'&gt;Maven by Example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.sonatype.com/books/mcookbook/reference/'&gt;Maven Cookbook&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.sonatype.com/books/nexus-book/reference/'&gt;Repository Management with Nexus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Maven assemblies&lt;/h5&gt;
&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://maven.apache.org/guides/mini/guide-assemblies.html'&gt;Guide to creating assemblies&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html'&gt;Maven Assembly Descriptor Reference&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.sonatype.com/books/mvnref-book/reference/assemblies.html'&gt;Maven the Complete Reference/Maven Assemblies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Maven snapshot repositories&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://docs.codehaus.org/display/MAVEN/Repository+-+SNAPSHOT+Handling" target="_blank"&gt;Repository - SNAPSHOT Handling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.codehaus.org/display/MAVENUSER/Maven+Concepts+Repositories" target="_blank"&gt;Maven Concepts Repositories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html" target="_blank"&gt;Guide to deploying 3rd party JARs to remote repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=SettingUpMavenRepository" target="_blank"&gt;Setting Up a Maven Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Deployment process and security&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://maven.apache.org/settings.html#Servers"&gt;&amp;lt;servers&amp;gt; element in settings.xml&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://maven.apache.org/guides/mini/guide-encryption.html"&gt;Password encryption&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://maven.apache.org/wagon/"&gt;Maven Wagon&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://stackoverflow.com/questions/1816909/uploading-a-directory-using-sftp-with-maven"&gt;Uploading a directory using sftp with Maven&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Site process&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://maven.apache.org/guides/mini/guide-site.html"&gt;Creating a site&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://maven.apache.org/doxia/doxia-sitetools/doxia-decoration-model/decoration.html"&gt;XML Schema Reference for the site descriptor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://maven.apache.org/plugins/maven-site-plugin/examples/sitedescriptor.html"&gt;Configuring the site descriptor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://maven.apache.org/plugins/maven-project-info-reports-plugin/"&gt;Maven Project Info Reports Plugin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://www.sonatype.com/books/mvnref-book/reference/site-generation-sect-site-appearance.html"&gt;Customizing Site Appearance&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://maven.apache.org/doxia/modules/"&gt;Doxia Modules Guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://code.google.com/p/doxia-module-markdown/"&gt;doxia-module-markdown&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://maven.40175.n5.nabble.com/How-to-use-confluence-format-td326724.html"&gt;How to use confluence format? (in Maven site generation)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Release process&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://www.sonatype.com/people/2011/01/using-the-maven-release-plugin-things-to-know/"&gt;Using the Maven Release plugin: Things to know&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="https://cwiki.apache.org/confluence/display/ARCHIVA/Archiva+Release+Process"&gt;Archiva Release Process (Real-world sample of Maven release plugin)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Property and Interpolation&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://docs.codehaus.org/display/MAVEN/Refactoring+Interpolation"&gt;POM Expression evaluation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h5&gt;misc&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://maven.apache.org/plugins/maven-eclipse-plugin/reactor.html'&gt;Multiple Module Projects with Eclipse&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://maven.apache.org/plugins/maven-eclipse-plugin/examples/attach-library-sources.html" target="_blank"&gt;Attach Library Sources and Javadocs&lt;/a&gt;&lt;br/&gt;
Guides to download sources and javadocs of artifacts&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://jgonian.wordpress.com/2010/12/12/maven-checkstyle-and-eclipse/" target="_blank"&gt;Running Maven Checkstyle plugin safely with multi module project.&lt;/a&gt;&lt;br/&gt;
Using just &lt;code&gt;propertyExpansion&lt;/code&gt; much simpler than &lt;a target="_blank" href="http://maven.apache.org/plugins/maven-checkstyle-plugin/examples/multi-module-config.html"&gt;http://maven.apache.org/plugins/maven-checkstyle-plugin/examples/multi-module-config.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.sonatype.com/books/m2eclipse-book/reference/running-sect-running-maven-builds.html" target="_blank"&gt;Defining custom Maven build command for any project.&lt;/a&gt;&lt;br/&gt;
Specify &lt;strong&gt;&lt;code&gt;${project_loc}&lt;/code&gt;&lt;/strong&gt; at 'Base directory' field and select 'Run' item at 'Display in favorites menu' field in 'Common' tab.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://jira.codehaus.org/browse/MSITE-516" target="_blank"&gt;&lt;strong&gt;&lt;code&gt;reportPlugins&lt;/code&gt;&lt;/strong&gt; doesn't inherit more information from &lt;strong&gt;&lt;code&gt;pluginManagement&lt;/code&gt;&lt;/strong&gt;.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://starobjects.sourceforge.net/m2-site/main/documentation/docbkx/html/developers-guide/developers-guide.html" target="_blank"&gt;Naked Objects' Sister Projects 1.0: Developers Guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://stackoverflow.com/questions/1705736/how-do-i-get-m2eclipse-to-recognize-m2-opts" target="_blank"&gt;How do I get m2eclipse to recognize $M2_OPTS?&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;
&lt;/p&gt;




&lt;h4&gt;Referencing Maven project properties of &lt;code&gt;List&lt;/code&gt; type&lt;/h4&gt;

&lt;p&gt;
//@todo
&lt;br/&gt;&lt;br/&gt;
This syntax works within &lt;code&gt;pom.xml&lt;/code&gt; and Ant build files using Maven Ant plugin. But this doesn't working with resource filtering of Maven. I can't find any explain or reason for this. Is it a bug?
&lt;/p&gt;
&lt;pre class='code'&gt;&lt;code class='xml'&gt;
   ...
   &amp;lt;artifact:pom id="this-pom" file="${basedir}/pom.xml"/&gt;
   &amp;lt;xsddoc out="${this-pom.reporting.outputDirectory}/xsddocs"
      verbose="true"&gt;
      &amp;lt;fileset dir="${this-pom.build.resources[0].directory}" 
         includes="**/*.xsd"/&gt;
   &amp;lt;/xsddoc&gt;
   ...
&lt;/pre&gt;&lt;/code&gt;


&lt;h4&gt;Build Lifecycle, Build Phase, Plugin and Goal&lt;/h4&gt;

&lt;a style="margin-left:20px" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-tpTpBkWjUjE/Tgn9qADvBCI/AAAAAAAAAXM/RdpzXERyJ9w/s1600/maven-buildlifecycle.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="https://lh5.googleusercontent.com/-tpTpBkWjUjE/Tgn9qADvBCI/AAAAAAAAAXM/RdpzXERyJ9w/maven-buildlifecycle.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5623304507760772130" /&gt;&lt;/a&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://maven.apache.org/guides/introduction/introduction-to-plugin-prefix-mapping.html"&gt;Plugin Prefix Resolution&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;



&lt;h4&gt;Simple tips and troubleshooting&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;The value of Maven property &lt;code&gt;"project.build.directory"&lt;/code&gt; in normal case is &lt;strong&gt;&lt;code&gt;${basedir}/target&lt;/code&gt;&lt;/strong&gt;. You can confirm this using the following command line : &lt;code&gt;"mvn help:evaluate -Dexpression=project.build.directory"&lt;/code&gt;.
 
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul type="square"&gt;
  &lt;li&gt;&lt;a href="http://maven.40175.n5.nabble.com/Problem-when-mvn-site-site-Generating-quot-Dependencies-quot-report-td113470.html" target="_blank"&gt;Solving "org.apache.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 60" exception when running site:site goal&lt;/a&gt;&lt;br/&gt;
Simply add a dependency on a newer version(eg. 3.8) of icu4j&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://whatiscomingtomyhead.wordpress.com/2011/04/20/if-your-maven-site-build-is-too-slow/"&gt;Solving "[ERROR] Unable to determine if resource ... exists in .." error.&lt;/a&gt;&lt;br/&gt;
Or just add &lt;strong&gt;&lt;code&gt;&amp;lt;dependency.locations.enabled&amp;gt;false&amp;lt;/dependency.locations.enabled&amp;gt;&lt;/code&gt;&lt;/strong&gt; into the &lt;code&gt;&amp;lt;properties&amp;gt;&lt;/code&gt; element of POM file.
  &lt;/li&gt;  
  &lt;li&gt;&lt;a target="_blank" href="http://jira.codehaus.org/browse/MJAR-97"&gt;Using &lt;code&gt;&amp;lt;addClasspath&amp;gt;&lt;/code&gt; when you have no dependencies fails with &lt;code&gt;FileNotFoundException&lt;/code&gt;&lt;/a&gt;&lt;br/&gt;
Configuring to add classpath to MANIFEST file can cause unreasonable exception when running &lt;code&gt;maven-jar-plugin&lt;/code&gt; without compile or run-time scope dependency. If you run &lt;code&gt;package&lt;/code&gt; with &lt;code&gt;-X&lt;/code&gt; option, you can identify exception whose stack goes like this.

&lt;script type="syntaxhighlighter" class="brush:plain;gutter:false"&gt;
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.3.2:jar (default-jar) on project ...: Error assembling JAR
  at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
  at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
  at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
  ...
Caused by: org.apache.maven.plugin.MojoExecutionException: Error assembling JAR
  at org.apache.maven.plugin.jar.AbstractJarMojo.createArchive(AbstractJarMojo.java:223)
  ...
Caused by: org.codehaus.plexus.archiver.ArchiverException: Problem creating jar: ... (Access is denied)
  at org.codehaus.plexus.archiver.AbstractArchiver.createArchive(AbstractArchiver.java:892)
 ...
Caused by: java.io.FileNotFoundException: ... (Access is denied)
  at java.io.RandomAccessFile.open(Native Method)
  at java.io.RandomAccessFile.&lt;init&gt;(RandomAccessFile.java:216)
  at org.codehaus.plexus.archiver.zip.ZipFile.&lt;init&gt;(ZipFile.java:150)
&lt;/script&gt;


  &lt;/li&gt;
&lt;/ul&gt;



&lt;h4&gt;Dependency on local library not in Maven repository and with no POM file&lt;/h4&gt;

&lt;p&gt;
Sometimes your project may have dependency on a JAR file that is not registered to any of Maven repositories and so have no it's own POM file. In this case, you can use &lt;strong&gt;&lt;code&gt;&amp;lt;systemPath&amp;gt;&lt;/code&gt;&lt;/strong&gt; element to specify your module's dependency on it.
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:xml"&gt;

  &lt;dependencies&gt;
    ...
    &lt;dependency&gt;
      &lt;groupId&gt;unknown&lt;/groupId&gt;
      &lt;artifactId&gt;abcd&lt;/artifactId&gt;
      &lt;version&gt;1.0&lt;/version&gt;
      &lt;type&gt;jar&lt;/type&gt;
      &lt;scope&gt;system&lt;/scope&gt;
      &lt;systemPath&gt;${project.basedir}/lib/abcd.jar&lt;/systemPath&gt;
    &lt;/dependency&gt;
    ...
  &lt;/dependencies&gt;
&lt;/script&gt;

Note that &lt;strong&gt;&lt;code&gt;systemPath&lt;/code&gt;&lt;/strong&gt; could be specified only with &lt;code&gt;system&lt;/code&gt; scope. You should specify &lt;strong&gt;&lt;code&gt;groupId, artifactId&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;version&lt;/code&gt;&lt;/strong&gt; 'cause they are mandatory but you can specify any value and don't need pom file.


&lt;h4&gt;Escaping expression interpolation&lt;/h4&gt;
&lt;p&gt;
It may necessary not to interpolate Maven expression in resources. In other words, you just want to leave ${some-property} as it is. For this, you can specify the escape string with &lt;strong&gt;&lt;code&gt;escapeString&lt;/code&gt;&lt;/strong&gt; parameter of &lt;strong&gt;&lt;code&gt;maven-resource-plugin&lt;/code&gt;&lt;/strong&gt;. You can also define &lt;strong&gt;&lt;code&gt;maven.resources.escapeString&lt;/code&gt;&lt;/strong&gt; property in your POM file.
&lt;/p&gt;
&lt;p&gt;
For more refer this page : &lt;a target="_blank" href="http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#escapeString"&gt;http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#escapeString&lt;/a&gt;
&lt;/p&gt;


&lt;h4&gt;Client configuration&lt;/h4&gt;

&lt;p&gt;
The location of client configuration files for subversion is dependent on operating system.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Windows : %USERPROFILE%\Application Data\Subversion\config&lt;/li&gt;
  &lt;li&gt;Linux : ~/.subversion/config&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Configurable options are described here : &lt;a target='_blank' href='http://svnbook.red-bean.com/en/1.5/svn.advanced.confarea.html#svn.advanced.confarea.opts.config'&gt;http://svnbook.red-bean.com/en/1.5/svn.advanced.confarea.html#svn.advanced.confarea.opts.config&lt;/a&gt;
&lt;/p&gt;


&lt;h4&gt;Working with Subversion working copy in format of ver. 1.7&lt;/h4&gt;

&lt;p&gt;
The default configuration of &lt;a target='_blank' href='http://maven.apache.org/plugins/maven-release-plugin/'&gt;Maven release plugin&lt;/a&gt;(maven-release-plugin) up to ver. 2.2.2 or &lt;a target='_blank' href='http://maven.apache.org/scm/maven-scm-plugin/'&gt;Maven scm plugin&lt;/a&gt;(maven-scm-plugin) up to ver. 1.6 can't work correctly with Subversion working copy in format of ver. 1.7.&lt;br/&gt;
To solve this problem, you should override the configuration of release plugin or scm plugin to use &lt;strong&gt;&lt;code&gt;maven-scm-provider-svnjava&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;svnkit 1.7&lt;/code&gt;&lt;/strong&gt;.
&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush:xml"&gt;
      &lt;plugin&gt;
         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
         &lt;artifactId&gt;maven-release-plugin&lt;/artifactId&gt;
         &lt;version&gt;2.2.2&lt;/version&gt;
         &lt;configuration&gt;
            &lt;providerImplementations&gt;
               &lt;svn&gt;javasvn&lt;/svn&gt;
            &lt;/providerImplementations&gt;
         &lt;/configuration&gt;
         &lt;dependencies&gt;
            &lt;dependency&gt;
               &lt;groupId&gt;com.google.code.maven-scm-provider-svnjava&lt;/groupId&gt;
               &lt;artifactId&gt;maven-scm-provider-svnjava&lt;/artifactId&gt;
               &lt;version&gt;1.15&lt;/version&gt;
            &lt;/dependency&gt;
            &lt;dependency&gt;
               &lt;groupId&gt;org.tmatesoft.svnkit&lt;/groupId&gt;
               &lt;artifactId&gt;svnkit&lt;/artifactId&gt;
               &lt;version&gt;1.7.0-SNAPSHOT&lt;/version&gt;
            &lt;/dependency&gt;                 
         &lt;/dependencies&gt;
      &lt;/plugin&gt;
      &lt;plugin&gt;
         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
         &lt;artifactId&gt;maven-scm-plugin&lt;/artifactId&gt;
         &lt;version&gt;1.6&lt;/version&gt;
         &lt;configuration&gt;
            &lt;providerImplementations&gt;
               &lt;svn&gt;javasvn&lt;/svn&gt;
            &lt;/providerImplementations&gt;
         &lt;/configuration&gt;
         &lt;dependencies&gt;
            &lt;dependency&gt;
               &lt;groupId&gt;com.google.code.maven-scm-provider-svnjava&lt;/groupId&gt;
               &lt;artifactId&gt;maven-scm-provider-svnjava&lt;/artifactId&gt;
               &lt;version&gt;1.15&lt;/version&gt;
            &lt;/dependency&gt;
            &lt;dependency&gt;
               &lt;groupId&gt;org.tmatesoft.svnkit&lt;/groupId&gt;
               &lt;artifactId&gt;svnkit&lt;/artifactId&gt;
               &lt;version&gt;1.7.0-SNAPSHOT&lt;/version&gt;
            &lt;/dependency&gt;                 
         &lt;/dependencies&gt;
      &lt;/plugin&gt;
&lt;/script&gt;

&lt;p&gt;
For now, &lt;strong&gt;&lt;code&gt;svnkit 1.7&lt;/code&gt;&lt;/strong&gt; has no release and is in snapshot version.
&lt;/p&gt;
&lt;p&gt;
If you let the plugins use &lt;code&gt;svnkit 1.3.x&lt;/code&gt; which is default setting as of now, you would meet the exceptions like the following.
&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush:plain;gutter:none"&gt;
Caused by: org.apache.maven.shared.release.scm.ReleaseScmCommandException: Unable to commit files
Provider message:
SVN commit failed.
Command output:
svn: The path ... appears to be part of a Subversion 1.7 or greater working copy.  Please upgrade your Subversion client to use this working copy.
 at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.checkin(AbstractScmCommitPhase.java:168)
 at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.performCheckins(AbstractScmCommitPhase.java:148)
 at org.apache.maven.shared.release.phase.ScmCommitPreparationPhase.runLogic(ScmCommitPreparationPhase.java:75)
 at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.execute(AbstractScmCommitPhase.java:79)
 at org.apache.maven.shared.release.DefaultReleaseManager.rollback(DefaultReleaseManager.java:259)
 at org.apache.maven.shared.release.DefaultReleaseManager.rollback(DefaultReleaseManager.java:238)
 at org.apache.maven.plugins.release.RollbackReleaseMojo.execute(RollbackReleaseMojo.java:56)
 ... 21 more
&lt;/script&gt;

&lt;p&gt;
For more, refer the followings,
&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://mvnrepository.com/artifact/com.google.code.maven-scm-provider-svnjava/maven-scm-provider-svnjava'&gt;Maven SCM Subversion Provider - Java Impl.&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://svnkit.com/download.php'&gt;svnkit download&lt;/a&gt;
  &lt;/li&gt; 
&lt;/ul&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-4423210835104709421?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/4423210835104709421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/09/maven-tips.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4423210835104709421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4423210835104709421'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/09/maven-tips.html' title='Tips on Maven'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-tpTpBkWjUjE/Tgn9qADvBCI/AAAAAAAAAXM/RdpzXERyJ9w/s72-c/maven-buildlifecycle.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2637275742819393033</id><published>2009-08-15T01:49:00.010+09:00</published><updated>2009-10-20T20:23:56.803+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Log4j'/><title type='text'>Loading Log4j Configuration File at Custom Position</title><content type='html'>&lt;p&gt;
Log4j automatically loads configuration file named &lt;code&gt;log4j.properties&lt;/code&gt; or &lt;code&gt;log4j.xml&lt;/code&gt; on one of top directories in classpath at initialization. For example, if your classpath is &lt;code&gt;/foo:/foo/bar.jar&lt;/code&gt;, &lt;code&gt;/foo/log4j.properties&lt;/code&gt; would be automatically configured.&lt;/p&gt;
&lt;p&gt;
But if you should use different name or position, for example &lt;code&gt;/foo/log4j-test.properties&lt;/code&gt; or &lt;code&gt;/foo/baz/qux/log4j.properties&lt;/code&gt;, there are two methods.&lt;/p&gt;

&lt;h4&gt;Using &lt;code&gt;log4j.configuration&lt;/code&gt; system property&lt;/h4&gt;
&lt;p&gt;
Load the application specifying explicitly the Log4j configuration file to use using &lt;code&gt;log4j.configuration&lt;/code&gt; system property.&lt;/p&gt;
&lt;pre class='code'&gt;
java -Dlog4j.configuration=baz/qux/log4j.properties MyApplication.java
&lt;/pre&gt;
&lt;p&gt;
Note that the value should be relative to classpath. It is not &lt;code&gt;/foo/baz/qux/log4j.properties&lt;/code&gt; but &lt;code&gt;baz/qux/log4j.properties&lt;/code&gt;.
&lt;/p&gt;

&lt;h4&gt;Using &lt;code&gt;Configurator.configure&lt;/code&gt; method&lt;/h4&gt;
&lt;p&gt;
Before configruing proper &lt;code&gt;Configurator&lt;/code&gt;, call static &lt;code&gt;LogManager.resetConfiguration&lt;/code&gt; method.&lt;/p&gt;
&lt;pre class='code'&gt;
import org.springframework.core.io.ClassPathResource;
...
Properties props = new Properties();
props.load((new ClassPathResource("baz/qux/log4j.properties"))
           .getInputStream());
org.apache.log4j.LogManager.resetConfiguration();
org.apache.log4j.PropertyConfigurator.configure(props);  
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-2637275742819393033?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2637275742819393033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/08/loading-log4j-configuration-file-at.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2637275742819393033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2637275742819393033'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/08/loading-log4j-configuration-file-at.html' title='Loading Log4j Configuration File at Custom Position'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3830240367780511997</id><published>2009-08-13T11:09:00.008+09:00</published><updated>2011-05-16T15:06:36.467+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='iBATIS'/><title type='text'>about SqlMapClientFactoryBean of Spring Framework</title><content type='html'>&lt;p&gt;
&lt;code&gt;SqlMapClientBean&lt;/code&gt; of springframework creates &lt;code&gt;SqlMapClient&lt;/code&gt; with &lt;code&gt;EXTERNAL&lt;/code&gt; transaction management by default and internally wrap the given data source to &lt;code&gt;TransactionAwareDataSourceProxy&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;
So, the typical setup for iBATIS SqlMapClient bean in spring configuration would be like the following.&lt;/p&gt;


&lt;pre class='brush:xml'&gt;
&amp;lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;
 &amp;lt;property name="driverClassName" value="oracle.jdbc.OracleDriver" /&gt;
 &amp;lt;property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" /&gt;
 &amp;lt;property name="username" value="_user_" /&gt;
 &amp;lt;property name="password" value="_passwd_" /&gt;
 &amp;lt;property name="defaultAutoCommit" value="true" /&gt;
 &amp;lt;property name="maxActive" value="10" /&gt;
 &amp;lt;property name="maxIdle" value="10" /&gt;
 &amp;lt;property name="minIdle" value="0" /&gt;
 &amp;lt;property name="initialSize" value="10" /&gt;
&amp;lt;/bean&gt;

&amp;lt;bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt;
 &amp;lt;property name="dataSource" ref="dataSource" /&gt;
 &amp;lt;property name="defaultTimeout" value="120" /&gt;
&amp;lt;/bean&gt;
 
&amp;lt;tx:annotation-driven 
 transaction-manager="transactionManager"
 mode="proxy"
 proxy-target-class="true"
/&gt;

&amp;lt;bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"&gt;
 &amp;lt;description&gt;default SqlMapClient bean for DAOs&amp;lt;/description&gt;
 &amp;lt;property name="configLocation" value="classpath:_pathto_/sql-map.xml" /&gt;
  
 &amp;lt;property name="dataSource" ref="dataSource" /&gt;
 &amp;lt;!-- Default setting is specified for clarity. --&gt;
 &amp;lt;property name="useTransactionAwareDataSource" value="true"/&gt;
 &amp;lt;!-- Default setting is specified for clarity. --&gt;
 &amp;lt;property name="transactionConfigClass"&gt;
  &amp;lt;value type="java.lang.Class"&gt;com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig&lt;/value&gt;
 &amp;lt;/property&gt;

&amp;lt;/bean&gt;
&lt;/pre&gt;
&lt;p&gt;
At the above sample, the default setup for &lt;code&gt;useTransactionAwareDataSource&lt;/code&gt; and &lt;code&gt;transactionConfigClass&lt;/code&gt; properties is specified for clarity.&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;ExternalTransactionConfig&lt;/code&gt; would set the "&lt;code&gt;SetAutoCommitAllowed&lt;/code&gt;" property of &lt;code&gt;SqlMapClient&lt;/code&gt; to false, in contrast to the iBATIS default, to always keep the original autoCommit value as provided by the connection pool.&lt;/p&gt;
&lt;p&gt;
For more information, refer API documentation of &lt;a href='http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/orm/ibatis/SqlMapClientFactoryBean.html' target='_blank'&gt;&lt;code&gt;SqlMapClientFactoryBean&lt;/code&gt;&lt;/a&gt;, specially &lt;code&gt;setDataSource&lt;/code&gt;, &lt;code&gt;setUseTransactionAwareDataSource&lt;/code&gt;, and &lt;code&gt;setTransactionConfigClass&lt;/code&gt; methods.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-3830240367780511997?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3830240367780511997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/08/about-sqlmapclientfactorybean-of-spring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3830240367780511997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3830240367780511997'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/08/about-sqlmapclientfactorybean-of-spring.html' title='about SqlMapClientFactoryBean of Spring Framework'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-7868279311421925621</id><published>2009-07-30T21:25:00.024+09:00</published><updated>2010-10-19T19:56:00.290+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Hierarchical Queries</title><content type='html'>&lt;p&gt;
There are two types of hierarchical queries handling tree structure data in adjacency list model. (table has recursive relationship using foreign key on parent_id column)&lt;br/&gt;
One is (START WITH) CONNECT BY clause provided by Oracle and the other is recursive WITH clause(recursive common table expressions).&lt;br/&gt;
Although CONNECT BY clause is much more intuitive, robust and simple, WITH clause is ANSI-SQL standard syntax.
&lt;/p&gt;

&lt;h4&gt;CONNECT BY clause&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Supported by : Oracle 9i +, DB2 9.7 (the latest version)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/queries003.htm#i2053935" target="_blank"&gt;Hierarchical Queries of Oracle Database 10g&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class='code'&gt;
SELECT ~ 
FROM ~ 
WHERE ~
&lt;strong&gt;START WITH&lt;/strong&gt; &lt;i&gt;parent_id&lt;/i&gt; IS NULL
&lt;strong&gt;CONNECT BY&lt;/strong&gt; &lt;em&gt;PRIOR&lt;/em&gt; &lt;i&gt;id&lt;/i&gt; = &lt;i&gt;parent_id&lt;/i&gt;
&lt;/pre&gt;

&lt;h4&gt;Recursive WITH clause&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Supported by : DB2, SQL Server 2005+, PostgreSQL 8.4 (the latest version)&lt;/li&gt;
&lt;li&gt;ANSI-SQL syntax&lt;/li&gt;
&lt;li&gt;
&lt;a href='http://www.ibm.com/developerworks/data/library/techarticle/dm-0510rielau/' target='_blank'&gt;http://www.ibm.com/developerworks/data/library/techarticle/dm-0510rielau/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href='http://msdn.microsoft.com/en-us/library/ms175972.aspx' target='_blank'&gt;http://msdn.microsoft.com/en-us/library/ms175972.aspx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href='http://www.postgresql.org/docs/8.4/interactive/queries-with.html' target='_blank'&gt;http://www.postgresql.org/docs/8.4/interactive/queries-with.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt; 

&lt;h4&gt;Examples by Database&lt;/h4&gt;
&lt;p&gt;
The structure of the table for the example statements below is defined by the following DDL.
&lt;/p&gt;
&lt;pre class='code'&gt;
create table category(
 &lt;strong&gt;id&lt;/strong&gt; varchar2(10) not null,
 name varchar2(60) not null,
 &lt;strong&gt;parent_id&lt;/strong&gt; varchar2(10),
 seq number(5, 0),
 descn varchar2(2000),
 constraint pk_category primary key (id),
 constraint fk_cateogry_1 &lt;strong&gt;foreign key (parent_id) references category(id)&lt;/strong&gt;
);
&lt;/pre&gt;

&lt;h5&gt;Oracle 9i or higher&lt;/h5&gt;
&lt;p&gt;
The basic query is : &lt;/p&gt;
&lt;pre class='code'&gt;
select id, name, parent_id, seq, descn, 
from category
&lt;strong&gt;start with&lt;/strong&gt; parent_id is null
&lt;strong&gt;connect by&lt;/strong&gt; &lt;em&gt;prior&lt;/em&gt; id = parent_id
&lt;/pre&gt;

&lt;p&gt;
Oracle 9i provides &lt;code&gt;LEVEL&lt;/code&gt; pseudo-column, &lt;code&gt;SYS_CONNECT_BY&lt;/code&gt; function and &lt;code&gt;ORDER SIBLINGS BY&lt;/code&gt; clause which can be used in hierarchical queries.
&lt;/p&gt;
&lt;pre class='code'&gt;
select id, name, parent_id, seq, &lt;strong&gt;level&lt;/strong&gt;, descn, 
       &lt;strong&gt;sys_connect_by_path&lt;/strong&gt;(id, '//') as id_path,
       &lt;strong&gt;sys_connect_by_path&lt;/strong&gt;(name, '//') as name_path
from category
&lt;em&gt;start with&lt;/em&gt; parent_id is null
&lt;em&gt;connect by prior&lt;/em&gt; id = parent_id
&lt;strong&gt;order siblings by&lt;/strong&gt; seq, name
&lt;/pre&gt;

&lt;p&gt;
Oracle 10g provides additional &lt;code&gt;CONNECT_BY_ISLEAF&lt;/code&gt; pseudo-column, &lt;code&gt;CONNECT_BY_ISCYCLE&lt;/code&gt; pseudo-column and &lt;code&gt;CONNECT BY NOCYCLE&lt;/code&gt;. &lt;/p&gt;
&lt;pre class='code'&gt;
select id, name, parent_id, seq, &lt;strong&gt;level&lt;/strong&gt;, descn, 
       &lt;strong&gt;sys_connect_by_path&lt;/strong&gt;(id, '//') as id_path,
       &lt;strong&gt;sys_connect_by_path&lt;/strong&gt;(name, '//') as name_path,
       &lt;strong&gt;connect_by_isleaf&lt;/strong&gt; as is_leaf
from category
&lt;em&gt;start with&lt;/em&gt; parent_id is null
&lt;strong&gt;connect by nocycle&lt;/strong&gt; &lt;em&gt;prior&lt;/em&gt; id = parent_id and &lt;em&gt;level&lt;/em&gt; &gt;= 5
&lt;strong&gt;order siblings by&lt;/strong&gt; seq, name
&lt;/pre&gt;

&lt;h5&gt;Microsoft SQL Server 2005 or higher&lt;/h5&gt;
&lt;p&gt;
The basic hierarchical query is 
&lt;/p&gt;
&lt;pre class='code'&gt;
&lt;strong&gt;with&lt;/strong&gt; v_category("id", "name", "level", parent_id) as (
   select "id", "name", 1 as "level", parent_id
   from category 
   where id is null
   &lt;strong&gt;union all&lt;/strong&gt;
   select a."id", b."level" + 1, a.parent_id
   from &lt;strong&gt;category as a inner join v_category&lt;/strong&gt; as b on a.parent_id = b."id"
)
select "id", "name", "level", parent_id
from &lt;strong&gt;v_category&lt;/strong&gt;
&lt;/pre&gt;


&lt;h4&gt;Readings&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;
&lt;a href='http://www.sqlsummit.com/AdjacencyList.htm' target='_blank'&gt;Adjacency list model&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href='http://www.oracle-developer.net/display.php?id=212' target='_blank'&gt;Subquery factoring in Oracle 9i&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href='http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/statements_10002.htm#BABCDJDB' target='_blank'&gt;Recursive Subquery Factoring Examples of Oracle 11.2&lt;/a&gt;&lt;br/&gt;
Oracle at last added &lt;b&gt;recursive&lt;/b&gt; feature to existing &lt;b&gt;with&lt;/b&gt; clause.
&lt;/li&gt;
&lt;li&gt;
&lt;a href='http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/' target='_blank'&gt;DB2 9.7: Run Oracle applications on DB2 9.7 for Linux, Unix, and Windows&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;misc&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;MySQL (up to 6.0, latest version) still doesn't support hierarchical query.
&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/8559058673267774097-7868279311421925621?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/7868279311421925621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/07/hierarchical-queries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7868279311421925621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/7868279311421925621'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/07/hierarchical-queries.html' title='Hierarchical Queries'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-1784494774590568074</id><published>2009-06-26T13:27:00.003+09:00</published><updated>2009-06-26T13:50:16.773+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>About Tomcat</title><content type='html'>&lt;h4&gt;Resources&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href='http://tomcat.apache.org/tomcat-5.5-doc/config/context.html' target='_blank'&gt;The Context Container for Tomcat 5.5&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href='http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html' target='_blank'&gt;Class Loader of Tomcat 5.5&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href='http://wiki.apache.org/tomcat/FAQ/Developing#Q1' target='_blank'&gt;How do I configure Tomcat to support remote debugging?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href='http://wiki.eclipse.org/WTP_Tomcat_FAQ#How_do_I_modify_the_Tomcat_server.27s_configuration.3F' target='_blank'&gt;FAQ for Tomcat and Eclipse WTP(Web Tools Platform)&lt;/a&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/8559058673267774097-1784494774590568074?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/1784494774590568074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/06/about-tomcat.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1784494774590568074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1784494774590568074'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/06/about-tomcat.html' title='About Tomcat'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-6041089731509071352</id><published>2009-06-24T00:59:00.004+09:00</published><updated>2009-09-30T10:33:09.050+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Useful Tools for PDF Files</title><content type='html'>&lt;h4&gt;Tweak PDF&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Homepage : &lt;a href='http://www.coolpdf.com/tweakpdf.html' target='_blank'&gt;http://www.coolpdf.com/tweakpdf.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Current Ver. : 1.33&lt;/li&gt;
&lt;li&gt;Feature : (from homepage)&lt;br/&gt;
With the freeware utility Tweak PDF, you are allowed to set the initial view preferences of a PDF document, such as whether to center window of the PDF file when opened, whether to display document title, to fit window, to hide menubar, to hide toolbar, and to hide window UI. When window UI is made hidden, a PDF file is just like a PowerPoint slide zoomed to full screen. You can even set the page mode of a PDF document, such as show PDF files in full screen mode, outlines mode, thumbnail mode, or simply without any special mode. Page Layout also comes as an option for you to tweak. PDF document properties such as title, subject, author, keywords can be modified with Tweak PDF.&lt;br/&gt;
&lt;br/&gt;
You can even tweak PDF version from 1.0 to 1.5 for compatibility concerns, and shrink PDF files by setting the compression level and choosing the compression algorithm.&lt;br/&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Free PDF Writer&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Homepage : &lt;a href='http://www.pdfill.com/freewriter.html' target='_blank'&gt;http://www.pdfill.com/freewriter.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Current Ver. : 6.0&lt;/li&gt;
&lt;li&gt;Feature : (from homepage)&lt;br/&gt;
- PDF Optimization&lt;br/&gt;
- PDF Description&lt;br/&gt;
- PDF Security&lt;br/&gt;
- PDF View Preference&lt;br/&gt;
- PDF Presentation&lt;br/&gt;
- PDF Rotate and Crop&lt;br/&gt;
- Output Options&lt;br/&gt;
- Post Process Options&lt;br/&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Free PDF Tools&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Homepage : &lt;a href='http://www.pdfill.com/pdf_tools_free.html' target='_blank'&gt;http://www.pdfill.com/pdf_tools_free.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Current Ver. : 6.0&lt;/li&gt;
&lt;li&gt;Feature : (from homepage)&lt;br/&gt;
- Merge&lt;br/&gt;
- Split and Reorder&lt;br/&gt;
- Encrypt and Decrypt with Security Options&lt;br/&gt;
- Rotate and Crop&lt;br/&gt;
- Reformat&lt;br/&gt;
- Header and Footer&lt;br/&gt;
- Watermark by Stylized Text&lt;br/&gt;
- Watermark by Image&lt;br/&gt;
- Convert Images to PDF&lt;br/&gt;
- Convert PDF into images&lt;br/&gt;
- PDF Form Fields: Delete, Flatten, List&lt;br/&gt;
- Convert  PostScript(PS) File into PDF&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/8559058673267774097-6041089731509071352?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/6041089731509071352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/06/useful-tools-for-pdf-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6041089731509071352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6041089731509071352'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/06/useful-tools-for-pdf-files.html' title='Useful Tools for PDF Files'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-6834487516484062257</id><published>2009-06-18T02:57:00.011+09:00</published><updated>2012-01-03T16:06:39.534+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tuning'/><title type='text'>Readings on Tuning</title><content type='html'>&lt;h4&gt;Readings on Tuning General with Java&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/javase/6/docs/technotes/guides/jpda/conninv.html#Invocation'&gt;Java command line debug options&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://docs.codehaus.org/display/JETTY/Debugging+with+the+Maven+Jetty+Plugin+inside+Eclipse'&gt;Debugging with the Maven Jetty Plugin in Eclipse&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://netbeans.org/kb/articles/nb-profiler-uncoveringleaks_pt1.html'&gt;Uncovering Memory Leaks Using NetBeans Profiler&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.ibm.com/developerworks/rational/library/05/0816_GuptaPalanki/'&gt;Java memory leaks -- Catch me if you can&lt;/a&gt; (2006)&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/hctool/v1r0/topic/com.ibm.java.diagnostics.healthcenter.doc/homepage/plugin-homepage-hc.html'&gt;IBM Monitoring and Diagnostic Tools for Java - Health Center&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;


&lt;h4&gt;Oracle JDBC Driver Tuning&lt;/h4&gt;
When tuning application which connect database using Oracle JDBC driver, you should refer the following documents.

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/stmtcach.htm' target='_blank'&gt;Oracle 10.2 JDBC Developer's Guide and Reference/Statement Caching&lt;/a&gt;
&lt;li&gt;&lt;a href='http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/concache.htm' target='_blank'&gt;Oracle 10.2 JDBC Developer's Guide and Reference/Implicit Connection Caching&lt;/a&gt;
&lt;li&gt;&lt;a href='http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/oraperf.htm' target='_blank'&gt;Oracle 10.2 JDBC Developer's Guide and Reference/Performance Extensions&lt;/a&gt;
&lt;li&gt;&lt;a href='http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/ociconpl.htm' target='_blank'&gt;Oracle 10.2 JDBC Developer's Guide and Reference/OCI Connection Pooling&lt;/a&gt;
&lt;li&gt;&lt;a href='http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/apxtips.htm' target='_blank'&gt;Oracle 10.2 JDBC Developer's Guide and Reference/Coding Tips&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;JBoss Tuning&lt;a name="jboss"&gt;&lt;/a&gt;&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://community.jboss.org/wiki/JBossASTuningSliming'&gt;Tuning and Slimming JBossAS&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.mastertheboss.com/jboss-application-server/113-jboss-performance-tuning-1.html?showall=1'&gt;JBoss Performance Tuning part 1&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://www.mastertheboss.com/jboss-application-server/130-jboss-performance-tuning-part-2.html'&gt;JBoss Performance Tuning part 2&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;



&lt;h4&gt;WebSphere Tuning&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.base.doc/info/aes/ae/welc6toptuning.html'&gt;WebSphere AS 7.0 Performance Tuning&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.base.doc/info/aes/ae/tprf_tuneopsys.html'&gt;OS Tuning for WebSphere AS 7.0&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;WebLogic Tuning&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://docs.oracle.com/cd/E21764_01/web.1111/e13814/toc.htm'&gt;WebLogic 10.3 Performance and Tuning&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://docs.oracle.com/cd/E13222_01/wls/docs92/perform/index.html'&gt;WebLogic 9.2 Performance and Tuning&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;



&lt;h4&gt;Linux Tuning&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://people.redhat.com/alikins/system_tuning.html'&gt;System Tuning Info for Linux Servers&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Windows Tuning&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://technet.microsoft.com/ko-kr/library/bb742460%28en-us%29.aspx'&gt;Windows 2000 Performance Tuning&lt;/a&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/8559058673267774097-6834487516484062257?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/6834487516484062257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/06/tuning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6834487516484062257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6834487516484062257'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/06/tuning.html' title='Readings on Tuning'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-664390744797507804</id><published>2009-04-21T15:50:00.008+09:00</published><updated>2010-10-19T19:56:54.400+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JForum'/><title type='text'>About JForum</title><content type='html'>&lt;h4&gt;Limitation&lt;/h4&gt;(as of version 2.1.8)
&lt;ul&gt;
&lt;li&gt;Doesn't support inlined images.&lt;/li&gt;
&lt;li&gt;Doesn't support wiki formatting.&lt;/li&gt;
&lt;li&gt;Doesn't support xhtml template perfectly. : Seems to need lots of customization.&lt;/li&gt;
&lt;li&gt;Doesn't support inlined SVG(Scalable Vector Graphics) part(&amp;lt;svg&gt;&amp;lt;/svg&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Tips&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Removing links to moved topics in the original forum : &lt;a href='http://www.jforum.net/posts/preList/4195/17273.page' target='_blank'&gt;http://www.jforum.net/posts/preList/4195/17273.page&lt;/a&gt;
&lt;/li&gt;

&lt;br/&gt;

&lt;li&gt;Removing preceding clip icon for the topics which have attachments in topic listing page : &lt;br/&gt;
Comments out the following line in &lt;code&gt;templates/default/forum_show.htm&lt;/code&gt; file.

&lt;pre class='code'&gt;
&amp;lt;#if topic.hasAttach() &amp;amp;&amp;amp; attachmentsEnabled&gt;
&amp;lt;img src="${contextPath}/templates/${templateName}/images/icon_clip.gif" align="middle" alt="[Clip]" /&gt;&amp;lt;/#if&gt;
&lt;/pre&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/8559058673267774097-664390744797507804?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/664390744797507804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/04/about-jforum.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/664390744797507804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/664390744797507804'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/04/about-jforum.html' title='About JForum'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3047171956472899156</id><published>2009-04-08T22:12:00.005+09:00</published><updated>2009-04-08T22:43:38.300+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Comments Syntax for Oracle, DB2, MySQL and so on</title><content type='html'>&lt;p align='center'&gt;
&lt;table width='600' border='1' cellspacing='0', cellpadding='3' align='center'&gt;
&lt;tr&gt;
&lt;th&gt;DBMS&lt;/th&gt;
&lt;th&gt;Block Comments&lt;/th&gt;
&lt;th&gt;Line Comments&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oracle&lt;/td&gt;
&lt;td&gt;/* &lt;i&gt;comments text&lt;/i&gt; */&lt;/td&gt;
&lt;td&gt;-- &lt;i&gt;comments text&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DB2&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;-- &lt;i&gt;comments text&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL Server (2000+)&lt;/td&gt;
&lt;td&gt;/* &lt;i&gt;comments text&lt;/i&gt; */&lt;/td&gt;
&lt;td&gt;-- &lt;i&gt;comments text&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MySQL (4.0+)&lt;/td&gt;
&lt;td&gt;/* &lt;i&gt;comments text&lt;/i&gt; */&lt;/td&gt;
&lt;td&gt;
  -- &lt;i&gt;comments text&lt;/i&gt;&lt;br/&gt;
  # &lt;i&gt;comments text&lt;/i&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;/* &lt;i&gt;comments text&lt;/i&gt; */&lt;/td&gt;
&lt;td&gt;-- &lt;i&gt;comments text&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
Actually /* */ and -- are SQL standard syntax and have following characteristics.
&lt;h4&gt;Block Comments&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Format : &lt;code&gt;/*&lt;/code&gt; &lt;i&gt;comments text&lt;/i&gt; &lt;code&gt;*/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Can be located any position of statement.&lt;/li&gt;
&lt;li&gt;Can span multiple lines.&lt;/li&gt;
&lt;li&gt;Can be nested.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Line Comments&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Format : &lt;code&gt;--&lt;/code&gt; &lt;i&gt;comments text&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Can start in the middle of line but always extends to the end of line.&lt;/li&gt;
&lt;li&gt;Can't span multiple lines.&lt;/li&gt;
&lt;li&gt;Needs at least single space after '&lt;code&gt;--&lt;/code&gt;'
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-3047171956472899156?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3047171956472899156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/04/sql-comments-syntax-for-oracle-db2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3047171956472899156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3047171956472899156'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/04/sql-comments-syntax-for-oracle-db2.html' title='SQL Comments Syntax for Oracle, DB2, MySQL and so on'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3081324721493403680</id><published>2009-04-07T15:37:00.024+09:00</published><updated>2011-11-01T15:15:36.183+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Remarkable Eclipse Plugins</title><content type='html'>&lt;table border='1' cellspacing='0' cellpadding='1' width='95%'&gt;
&lt;tr&gt;
   &lt;th&gt;Plug-in&lt;/th&gt;
   &lt;th&gt;Site&lt;/th&gt;
   &lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;SpringSource Tool Suite&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://www.springsource.com/developer/sts'&gt;http://www.springsource.com/developer/sts&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;Spring framework development tools&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;Hibernate Tools for Eclipse and Ant&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://www.hibernate.org/subprojects/tools.html'&gt;http://www.hibernate.org/subprojects/tools.html&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;Hibernate development tools&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;AJDT&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://www.eclipse.org/ajdt/'&gt;http://www.eclipse.org/ajdt/&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;AspectJ development tools&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;Google Plugin for Eclipse&lt;/td&gt;
   &lt;td&gt;
      &lt;a target='_blank' href='http://code.google.com/appengine/docs/java/tools/eclipse.html'&gt;http://code.google.com/appengine/docs/java/tools/eclipse.html&lt;/a&gt;
   &lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;development tools for GWT and Google App Engine&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;Vex&lt;/td&gt;
   &lt;td&gt;
      &lt;a target='_blank' href='http://marketplace.eclipse.org/content/vex/click'&gt;http://marketplace.eclipse.org/content/vex/click&lt;/a&gt;
   &lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;visual editor for XML&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;Mylyn WikiText&lt;/td&gt;
   &lt;td&gt;
      &lt;a target='_blank' href='http://wiki.eclipse.org/Mylyn/WikiText'&gt;http://wiki.eclipse.org/Mylyn/WikiText&lt;/a&gt;
   &lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;tools for parsing, editing and presenting lightweight markup&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;m2eclipse&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://eclipse.org/m2e/'&gt;http://eclipse.org/m2e/&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;Maven plug-in&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;Subclipse&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://subclipse.tigris.org/'&gt;http://subclipse.tigris.org/&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;Subversion client&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;DBViewer Plugin&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://www.ne.jp/asahi/zigen/home/plugin/dbviewer/'&gt;http://www.ne.jp/asahi/zigen/home/plugin/dbviewer/&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;General database client&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;jOra&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://jora.luenasoft.de/'&gt;http://jora.luenasoft.de/&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;Oracle database client&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;JadClipse&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://sourceforge.net/projects/jadclipse/'&gt;http://sourceforge.net/projects/jadclipse/&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;Java decompiler&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;LogViewer&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://code.google.com/a/eclipselabs.org/p/logviewer/'&gt;http://code.google.com/a/eclipselabs.org/p/logviewer/&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;File viewer&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;Properties Editor&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://propedit.sourceforge.jp/index_en.html'&gt;http://propedit.sourceforge.jp/index_en.html&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;File editor&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;JDepend4Eclipse&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://andrei.gmxhome.de/jdepend4eclipse/'&gt;http://andrei.gmxhome.de/jdepend4eclipse/&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;Code analysis&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;Regex Util&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://myregexp.com/eclipsePlugin.html'&gt;http://myregexp.com/eclipsePlugin.html&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;testing/editing regular expressions flavor of the Sun Java standard API (java.util.regex)&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;Eclipse Hex Editor Plugin (EHEP)&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://ehep.sourceforge.net/'&gt;http://ehep.sourceforge.net/&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;File editor&lt;/li&gt;
      &lt;li&gt;allows user to view or modify any file in hex mode.&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
   &lt;td&gt;Eclipse launcher for VisualVM&lt;/td&gt;
   &lt;td&gt;&lt;a target='_blank' href='http://visualvm.java.net/eclipse-launcher.html'&gt;http://visualvm.java.net/eclipse-launcher.html&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;
      &lt;ul&gt;
      &lt;li&gt;monitoring and profiling Eclipse projects using VisualVM&lt;/li&gt;
      &lt;/ul&gt;
   &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h4&gt;&lt;a href='http://jora.luenasoft.de/' target='_blank'&gt;jOra&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Oracle Database Client&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
This program provides not only typical components for application programmer such as schema browser, SQL editor and executor but also some components for DBA such as session viewer and parameter viewer.&lt;br/&gt;
This program is for only Oracle database and so provides Oracle friendly components, stored procedure editor and PL/SQL editor.&lt;br/&gt;
&lt;/p&gt;
Components are :
&lt;ul&gt;
&lt;li&gt;Connections View&lt;/li&gt;
&lt;li&gt;Database Explorer&lt;/li&gt;
&lt;li&gt;Schema Browser&lt;/li&gt;
&lt;li&gt;SQL Worksheet&lt;/li&gt;
&lt;li&gt;SQL Script Editor&lt;/li&gt;
&lt;li&gt;SQL History&lt;/li&gt;
&lt;li&gt;SQL Monitor&lt;/li&gt;
&lt;li&gt;DMBS Output-View&lt;/li&gt;
&lt;li&gt;Stored Procedure Editor&lt;/li&gt;
&lt;li&gt;PL/SQL Editor&lt;/li&gt;
&lt;li&gt;Outline View&lt;/li&gt;
&lt;li&gt;Sessions View&lt;/li&gt;
&lt;li&gt;Parameters View&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You can find more detailed features in &lt;a href='http://jora.luenasoft.de/features.html' target='_blank'&gt;this page&lt;/a&gt;. but it is in German.
&lt;/p&gt;


&lt;h5&gt;&lt;a href='http://jora.luenasoft.de/' target='_blank'&gt;M2Eclipse&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;
As of me, the previous plugin &lt;strong&gt;&lt;code&gt;M2Eclipse&lt;/code&gt;&lt;/strong&gt;(&lt;a target="_blank" href="http://m2eclipse.sonatype.org/"&gt;http://m2eclipse.sonatype.org/&lt;/a&gt;) by Sonatype is still better than the current &lt;strong&gt;&lt;code&gt;m2e&lt;/code&gt;&lt;/strong&gt;(&lt;a target="_blank" href="http://eclipse.org/m2e/"&gt;http://eclipse.org/m2e/&lt;/a&gt;) by Eclipse.
&lt;/p&gt;
&lt;p&gt;
To get the last &lt;code&gt;M2Eclipse&lt;/code&gt; by Sonatype, access the following update sites.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Maven Integration for Eclipse Update Site : &lt;a target="_blank" href="http://m2eclipse.sonatype.org/sites/m2e/"&gt;http://m2eclipse.sonatype.org/sites/m2e/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Maven Integration for Eclipse Extras Update Site : &lt;a target="_blank" href="http://m2eclipse.sonatype.org/sites/m2e-extras/"&gt;http://m2eclipse.sonatype.org/sites/m2e-extras/&lt;/a&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/8559058673267774097-3081324721493403680?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3081324721493403680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/04/remarkable-eclipse-plugins.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3081324721493403680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3081324721493403680'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/04/remarkable-eclipse-plugins.html' title='Remarkable Eclipse Plugins'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2051433518415649209</id><published>2009-04-07T13:51:00.003+09:00</published><updated>2011-07-10T03:46:58.117+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Comparisons of Collaborative Software</title><content type='html'>The Definition : &lt;a href='http://en.wikipedia.org/wiki/Collaboration_software' target='_blank'&gt;'Collaborative Software'&lt;/a&gt;


&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.wikimatrix.org/compare/TWiki+Confluence+XWiki' target='_blank'&gt;Comparison of major Wiki softwares : TWiki, Confluence, XWiki&lt;/a&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/8559058673267774097-2051433518415649209?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2051433518415649209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/04/comparisons-of-collaborative-software.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2051433518415649209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2051433518415649209'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/04/comparisons-of-collaborative-software.html' title='Comparisons of Collaborative Software'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-5008225510051495005</id><published>2009-04-07T03:25:00.010+09:00</published><updated>2009-04-07T13:50:45.661+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Object Detection of JavaScript</title><content type='html'>&lt;p&gt;
When you need to check the existence of the specific property or method of an object before you use it, you can use &lt;code&gt;&lt;b&gt;if&lt;/b&gt;&lt;/code&gt; statement like followings.
&lt;/p&gt;

&lt;pre class='code'&gt;
...
&amp;lt;script&gt;
function iniPage(){

   // forms with name of 'upload' is expected to have file type input by convention.
   if(this.document.forms['upload']){
      this.document.forms['upload'].enctype = "multipart/form-data";
   }
   ...
}

function onSubmit(form){
   //if recordSubmit function is defined.
   if(window.recordSubmit &amp;&amp; form.name){
      window.recordSubmit(location.host, hocation.pathname, form.name);
   }
   ...
}
...
&amp;lt;/script&gt;
&lt;/pre&gt;

&lt;p&gt;
At the first function, if a form with name of 'upload' exists, its &lt;code&gt;enctype&lt;/code&gt; would be set to &lt;code&gt;multipart/form-data&lt;/code&gt;. At the second function, if 'recordSubmit' is defined in the script and the delivered parameter has 'name' property, the 'recordSubmit' function will be executed before form's submit.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;&lt;b&gt;If(condition)&lt;/b&gt;&lt;/code&gt; statement returns &lt;code&gt;false&lt;/code&gt; when the 'condition' corresponds one of the followings.
&lt;/p&gt;
&lt;div style='text-align:center'&gt;&lt;code&gt;
Logical false, Null, 0, Empty string, Object doesn't exist, Undefined property
&lt;/code&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;p&gt;
For primitive type or string type properties, &lt;code&gt;&lt;b&gt;if&lt;/b&gt;&lt;/code&gt; statement also returns &lt;code&gt;false&lt;/code&gt; in case of their value is zero or empty. So, it is more clear and safe to use &lt;code&gt;&lt;b&gt;typeof&lt;/b&gt;&lt;/code&gt; operator and &lt;code&gt;if&lt;/code&gt; statement all together.
&lt;/p&gt;
&lt;pre class='code'&gt;
...
&amp;lt;script&gt;
function onMakeOrder(form){

   if(typeof form.elements['requestDate'] != "undefined"){
      if(!isValidRequestDate(form.elements['requestDate'].value)){
         alert("The request date is not valid");
         return false;
      }
   }
   ...
}

&amp;lt;/script&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-5008225510051495005?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/5008225510051495005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/04/object-detection-of-javascript.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5008225510051495005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5008225510051495005'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/04/object-detection-of-javascript.html' title='Object Detection of JavaScript'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-6585421543150688291</id><published>2009-04-05T22:19:00.011+09:00</published><updated>2009-09-15T02:15:24.923+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Useful Shortcuts of Eclipse</title><content type='html'>&lt;table border='1' cellspacing='0' cellpadding='2'&gt;
&lt;tr&gt;
  &lt;th&gt;Binding&lt;/th&gt;
  &lt;th&gt;Command&lt;/th&gt;
  &lt;th&gt;When&lt;/th&gt;
  &lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;F5&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Refresh&lt;/td&gt;
  &lt;td&gt;In Windows&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Refresh the selected items&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Ctrl + Space&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Content Assist&lt;/td&gt;
  &lt;td&gt;In Dialogs and Windows&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Popup to provide contextual proposals&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Ctrl + I&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Indent Line&lt;/td&gt;
  &lt;td&gt;Editing Java Source&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Adjust indentations of lines in selected block&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Ctrl + L&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Go to Line&lt;/td&gt;
  &lt;td&gt;Editing Text&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Go to a specified line of text&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Ctrl + G&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Declaration in Workspace&lt;/td&gt;
  &lt;td&gt;Editing in Structured Text Editors&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Search for declarations of the selected element in the workspace&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Ctrl + /&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Toggle Comment&lt;/td&gt;
  &lt;td&gt;
    Editing SQL, Editing Properties Files, 
    Editing JavaScript Source, Editing Java Source
  &lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Toggle comment the selected lines&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Ctrl + Shift + F&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Format&lt;/td&gt;
  &lt;td&gt;Editing in Structured Text Editors&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Format selection&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Ctrl + Shift + G&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;References in Workspace&lt;/td&gt;
  &lt;td&gt;In Windows&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Search for references to the selected element in the workspace&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Ctrl + Shift + M&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Add Import&lt;/td&gt;
  &lt;td&gt;Editing Java Source&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Create import statement on selection&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Ctrl + Shift + R&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Open Resource&lt;/td&gt;
  &lt;td&gt;In Windows&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Open an editor on a particular resource&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Alt + Shift + J&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Add Javadoc Comment&lt;/td&gt;
  &lt;td&gt;In Windows&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Add a Javadoc comment stub to the member element&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Alt + Left&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Backward History&lt;/td&gt;
  &lt;td&gt;In Windows&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Activate previous resource in editor history.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td nowrap&gt;&lt;code&gt;&lt;b&gt;Alt + Right&lt;/b&gt;&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Forward History&lt;/td&gt;
  &lt;td&gt;In Windows&lt;/td&gt;
  &lt;td&gt;
    &lt;ul&gt;
    &lt;li&gt;Activate next resource in editor history.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h4&gt;More readings&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href='http://rayfd.wordpress.com/2007/05/20/10-eclipse-navigation-shortcuts-every-java-programmer-should-know/' target='_blank'&gt;10 Eclipse Navigation Shortcuts Every Java Programmer Should Know&lt;/a&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/8559058673267774097-6585421543150688291?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/6585421543150688291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/04/useful-shortcuts-of-eclipse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6585421543150688291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6585421543150688291'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/04/useful-shortcuts-of-eclipse.html' title='Useful Shortcuts of Eclipse'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-679197674985395587</id><published>2009-03-25T11:09:00.007+09:00</published><updated>2009-03-26T16:07:54.599+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>About MySQL on Red Hat Enterprise Linux 4</title><content type='html'>&lt;h4&gt;Checking Installation&lt;/h4&gt;
Use &lt;code&gt;rpm&lt;/code&gt; command like following
&lt;pre class='code'&gt;
root# rpm -q -a | grep mysql
mysql-server-4.1.12-3.RHEL4.1
mysql-4.1.12-3.RHEL4.1
php-mysql-4.3.9-3.8
mysql-devel-4.1.12-3.RHEL4.1
&lt;/pre&gt;

&lt;h4&gt;Installed Directory&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Server program : &lt;code&gt;/etc/init.d/mysql&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Client programs (&lt;code&gt;mysql, mysqladmin, mysqlshow, and so on&lt;/code&gt;) : &lt;code&gt;/usr/bin/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Default config file : &lt;code&gt;/etc/my.cnf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Data files : &lt;code&gt;/var/lib/mysql/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Starting Server&lt;/h4&gt;
Use the following command 
&lt;pre class='code'&gt;
root# /sbin/chkconfig mysqld on
root# /etc/init.d/mysqld start
root# ps -ef | grep mysql
&lt;/pre&gt;
The command executed by &lt;code&gt;root&lt;/code&gt; account would delegate the execution of &lt;code&gt;/usr/libexec/mysqld&lt;/code&gt; to &lt;code&gt;mysql&lt;/code&gt; account.

&lt;h4&gt;Stopping Server&lt;/h4&gt;
Use the following command.
&lt;pre class='code'&gt;
root# /etc/init.d/mysqld stop
&lt;/pre&gt;


&lt;h4&gt;Resetting Root Password&lt;/h4&gt;
When you forgot password of root user in MySQL, you can use the following commands after stopping the running process of &lt;code&gt;mysqld&lt;/code&gt; if any.
&lt;pre class='code'&gt;
mysql# /usr/bin/mysqld_safe --skip-grant-tables &amp;
mysql# /usr/bin/mysqladmin -u root flush-privileges password "newpasswd"
&lt;/pre&gt;
After that restart the server in normal mode and you can connect as a root user using &lt;code&gt;newpasswd&lt;/code&gt;.

For more information, refer formal documentation of MySQL : &lt;a href="http://dev.mysql.com/doc/refman/4.1/en/resetting-permissions.html" target="_blank"&gt;How to Reset the Root Password&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-679197674985395587?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/679197674985395587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/03/about-mysql-on-red-hat-enterprise-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/679197674985395587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/679197674985395587'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/03/about-mysql-on-red-hat-enterprise-linux.html' title='About MySQL on Red Hat Enterprise Linux 4'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-6996316067391964153</id><published>2009-03-17T12:38:00.028+09:00</published><updated>2010-02-28T02:57:21.102+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQLite'/><category scheme='http://www.blogger.com/atom/ns#' term='H2'/><category scheme='http://www.blogger.com/atom/ns#' term='HSQLDB'/><title type='text'>Comparison of HSQLDB, H2, SQLite</title><content type='html'>&lt;table border='1' cellpadding='1' cellspacing='0' align='center'&gt;
&lt;tr&gt;
  &lt;th align='center'&gt;Item&lt;/th&gt;
  &lt;th align='center'&gt;&lt;a href="http://hsqldb.org/" target="_blank"&gt;HSQLDB&lt;/a&gt; (1.8)&lt;/th&gt;
  &lt;th align='center'&gt;&lt;a href="http://www.h2database.com/" target="_blank"&gt;H2&lt;/a&gt;(1.1.109)&lt;/th&gt;
  &lt;th align='center'&gt;&lt;a href="http://www.sqlite.org/" target="_blank"&gt;SQLite&lt;/a&gt; (3.6.22)&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Lanaguage&lt;/td&gt;
  &lt;td align='center'&gt;Java&lt;/td&gt;
  &lt;td align='center'&gt;Java&lt;/td&gt;
  &lt;td align='center'&gt;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports Client/Server Mode&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports Embedded Mode&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports In-Memory Databases&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/features.html#in_memory_databases'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/inmemorydb.html'&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Provided Transaction Isolation Mode&lt;/td&gt;
  &lt;td align='center'&gt;Read Uncommitted&lt;/td&gt;
  &lt;td align='center'&gt;Read Committed, Serializable&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a href="http://www.sqlite.org/lockingv3.html" target="_blank"&gt;Unclear&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports Foreign Key Constraint&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a href="http://www.sqlite.org/foreignkeys.html" target="_blank"&gt;Yes&lt;/a&gt;&lt;br/&gt;(&amp;ge; 3.6.19)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports View Object&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://hsqldb.org/doc/2.0/guide/ch04.html#N10A9B'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/grammar.html#create_view'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/lang_createview.html'&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports Sequence Object&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://hsqldb.org/doc/2.0/guide/ch04.html#N10A39'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/grammar.html#create_sequence'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports User-defined Procedure/Function&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://hsqldb.org/doc/2.0/guide/ch04.html#N10B2A'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports Trigger&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://hsqldb.org/doc/2.0/guide/ch04.html#N10B1C'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/grammar.html#create_trigger'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/lang_createtrigger.html'&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports Inner Join&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/grammar.html#table_expression'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/syntaxdiagrams.html#join-op'&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports Left Outer Join&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/grammar.html#table_expression'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/syntaxdiagrams.html#join-op'&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports Right Outer Join&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/grammar.html#table_expression'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/syntaxdiagrams.html#join-op'&gt;No&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports Full Outer Join&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/grammar.html#table_expression'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/syntaxdiagrams.html#join-op'&gt;No&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports ORDER BY Clause&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://hsqldb.org/doc/2.0/guide/ch07.html#N120ED'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/grammar.html#select'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/lang_select.html'&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports GROUP BY/HAVING Clause&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://hsqldb.org/doc/2.0/guide/ch07.html#N120A4'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/grammar.html#select'&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/lang_select.html'&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Supports Paginated Query&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://hsqldb.org/doc/2.0/guide/ch07.html#N120FA'&gt;Yes&lt;/a&gt;&lt;br/&gt;(offet m fetch n lows)&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.h2database.com/html/grammar.html#select'&gt;Yes&lt;/a&gt;&lt;br/&gt;(limit n offset m)&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/syntaxdiagrams.html#join-op'&gt;Yes&lt;/a&gt;&lt;br/&gt;(limit n offset m)&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
  &lt;td&gt;Provides C API&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.sqlite.org/cintro.html'&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Provides JDBC Driver&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a target='_blank' href='http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC'&gt;by 3rd party&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Provides ODBC Driver&lt;/td&gt;
  &lt;td align='center'&gt;under development&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Explicitly Supported by Hibernate 3.3&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a href="http://www.hibernate.org/hib_docs/v3/api/org/hibernate/dialect/HSQLDialect.html" target="_blank"&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a href="http://www.hibernate.org/hib_docs/v3/api/org/hibernate/dialect/H2Dialect.html" target="_blank"&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Explicitly Supported by DbUnit 2.4&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a href="http://www.dbunit.org/apidocs/org/dbunit/ext/hsqldb/HsqldbConnection.html"&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;&lt;a href="http://www.dbunit.org/apidocs/org/dbunit/ext/h2/H2Connection.html" target="_blank"&gt;Yes&lt;/a&gt;&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Explicitly Supported by Power*Architect 0.9.13-RC1&lt;/td&gt;
  &lt;td align='center'&gt;Yes&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
  &lt;td align='center'&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;br/&gt;

&lt;h4&gt;Other comparisons&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href='http://www.ss.javaworld.in/articles/design-concepts/database-comparison-table-h2-hsqldb-derby-postgresql-mysql' target='_blank'&gt;Database Comparison Table : H2, HSQLDB, DERBY, PostgreSQL, MySQL&lt;/a&gt; by Sukhvinder Singh&lt;/li&gt;
&lt;/ul&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;h4&gt;Features of HSQLDB (1.8)&lt;/h4&gt;
from &lt;a href="http://hsqldb.org/web/hsqlFeatures.html" target="_blank"&gt;http://hsqldb.org/web/hsqlFeatures.html&lt;/a&gt;&lt;br/&gt;
JAVA
&lt;ul&gt;
    &lt;li&gt;100% Java&lt;/li&gt;
    &lt;li&gt;Support JDK 1.1.x, 1.2.x, 1.3.x, 1.4.x, 1.5.x, 1.6.x&lt;/li&gt;
    &lt;li&gt;Extensive JDBC interface support with batch statement and scrollable ResultSet functionality&lt;/li&gt;
    &lt;li&gt;Full JDBC DatabaseMetaData and ResultSetMetaData support&lt;/li&gt;
    &lt;li&gt;Java stored procedures and functions&lt;/li&gt;
    &lt;li&gt;Full support for PreparedStatement objects to speed up query processing &lt;/li&gt;
&lt;/ul&gt;
SQL
&lt;ul&gt;
    &lt;li&gt;Relational Database Management System, with the object capabilities of Java&lt;/li&gt;
    &lt;li&gt;Very extensive support for SQL:2003 Standard syntax, including most optional features&lt;/li&gt;
    &lt;li&gt;Supports all base data types of the SQL Standard, including BINARY, BIT, BOOLEAN, date-time, INTERVAL, BLOB, CLOB&lt;/li&gt;
    &lt;li&gt;Supports user-defined DOMAIN types, including type constraints&lt;/li&gt;
    &lt;li&gt;Fast SELECT, INSERT, DELETE, UPDATE and MERGE operations&lt;/li&gt;
    &lt;li&gt;INNER, LEFT OUTER, RIGHT OUTER and FULL joins&lt;/li&gt;
    &lt;li&gt;UNION, EXCEPT, INTERSECT, including use of parentheses, limits and offsets&lt;/li&gt;
    &lt;li&gt;Scalar (single value) SELECTS, row and correlated subqueries including IN, EXISTS, ANY, ALL&lt;/li&gt;
    &lt;li&gt;Views, Temp tables and sequences&lt;/li&gt;
    &lt;li&gt;Primary key, unique and check constraints on single or multiple columns &lt;/li&gt;
    &lt;li&gt;Referential Integrity (foreign keys) on multiple columns with full cascading options (delete, update, set null, set default)&lt;/li&gt;
    &lt;li&gt;ORDER BY, GROUP BY and HAVING&lt;/li&gt;
    &lt;li&gt;COUNT, SUM, MIN, MAX, AVG and statistical aggregate functions&lt;/li&gt;
    &lt;li&gt;Full support for SQL expressions such as CASE .. WHEN .. ELSE .. , NULLIF etc.&lt;/li&gt;
    &lt;li&gt;SQL standard autoincrement column support plus sequences&lt;/li&gt;
    &lt;li&gt;Transaction COMMIT, ROLLBACK and SAVEPOINT support&lt;/li&gt;
    &lt;li&gt;Multiple schemata per database&lt;/li&gt;
    &lt;li&gt;Triggers, implemented as Java classes, or as SQL statements&lt;/li&gt;
    &lt;li&gt;Database security with passwords, user rights and roles with GRANT and REVOKE&lt;/li&gt;
    &lt;li&gt;Extensive set of ALTER TABLE commands, including change of table column type&lt;/li&gt; 
&lt;/ul&gt;
Persistence
&lt;ul&gt;
    &lt;li&gt;In-memory tables for fastest operation&lt;/li&gt;
    &lt;li&gt;Disk based tables for large data sets&lt;/li&gt;
    &lt;li&gt;Text tables with external file data sources such as CSV files&lt;/li&gt;
    &lt;li&gt;Disk tables (CACHED TABLE) up to 8GB and text tables up to 2GB each&lt;/li&gt;
    &lt;li&gt;Size of each string or binary item only limited by memory&lt;/li&gt;
    &lt;li&gt;Database dump as SQL script with or without data &lt;/li&gt;
&lt;/ul&gt;
Deployment
&lt;ul&gt;
    &lt;li&gt;Embedded (into Java applications) and Client-Server operating modes&lt;/li&gt;
    &lt;li&gt;Three client server protocols: HSQL, HTTP and HSQL-BER - can run as an HTTP web server - all with SSL option&lt;/li&gt;
    &lt;li&gt;Can be used in applets, read-only media (CD), inside jars, webstart and embedded applications&lt;/li&gt;
    &lt;li&gt;Multiple databases per JVM &lt;/li&gt;
&lt;/ul&gt;
Utilities
&lt;ul&gt;
    &lt;li&gt;Powerful and compact java command line and GUI tools for database management&lt;/li&gt;
    &lt;li&gt;Tranfer tool for conversion of databases to / from other popular database managment systems&lt;/li&gt;
&lt;/ul&gt;

&lt;br/&gt;&lt;br/&gt;


&lt;h4&gt;Features of H2 (1.1.109)&lt;/h4&gt;
from &lt;a href="http://www.h2database.com/html/features.html" target="_blank"&gt;http://www.h2database.com/html/features.html&lt;/a&gt;&lt;br/&gt;
Main Features
&lt;ul&gt;
    &lt;li&gt;Very fast database engine&lt;/li&gt;
    &lt;li&gt;Free, with source code&lt;/li&gt;
    &lt;li&gt;Written in Java&lt;/li&gt;
    &lt;li&gt;Supports standard SQL, JDBC API&lt;/li&gt;
    &lt;li&gt;Embedded and Server mode, Clustering support&lt;/li&gt;
    &lt;li&gt;Strong security features&lt;/li&gt;
    &lt;li&gt;The PostgreSQL ODBC driver can be used&lt;/li&gt;
    &lt;li&gt;Multi version concurrency&lt;/li&gt;
&lt;/ul&gt;
Additional Features
&lt;ul&gt;
    &lt;li&gt;Disk based or in-memory databases and tables, read-only database support, temporary tables&lt;/li&gt;
    &lt;li&gt;Transaction support (read committed and serializable transaction isolation), 2-phase-commit&lt;/li&gt;
    &lt;li&gt;Multiple connections, table level locking&lt;/li&gt;
    &lt;li&gt;Cost based optimizer, using a genetic algorithm for complex queries, zero-administration&lt;/li&gt;
    &lt;li&gt;Scrollable and updatable result set support, large result set, external result sorting, functions can return a result set&lt;/li&gt;
    &lt;li&gt;Encrypted database (AES or XTEA), SHA-256 password encryption, encryption functions, SSL&lt;/li&gt;
&lt;/ul&gt;
SQL Support
&lt;ul&gt;
    &lt;li&gt;Support for multiple schemas, information schema&lt;/li&gt;
    &lt;li&gt;Referential integrity / foreign key constraints with cascade, check constraints&lt;/li&gt;
    &lt;li&gt;Inner and outer joins, subqueries, read only views and inline views&lt;/li&gt;
    &lt;li&gt;Triggers and Java functions / stored procedures&lt;/li&gt;
    &lt;li&gt;Many built-in functions, including XML and lossless data compression&lt;/li&gt;
    &lt;li&gt;Wide range of data types including large objects (BLOB/CLOB) and arrays&lt;/li&gt;
    &lt;li&gt;Sequence and autoincrement columns, computed columns (can be used for function based indexes)&lt;/li&gt;
    &lt;li&gt;ORDER BY, GROUP BY, HAVING, UNION, LIMIT, TOP&lt;/li&gt;
    &lt;li&gt;Collation support, users, roles&lt;/li&gt;
    &lt;li&gt;Compatibility modes for IBM DB2, Apache Derby, HSQLDB, MS SQL Server, MySQL, Oracle, and PostgreSQL.&lt;/li&gt;
&lt;/ul&gt;
Security Features
&lt;ul&gt;
    &lt;li&gt;Includes a solution for the SQL injection problem&lt;/li&gt;
    &lt;li&gt;User password authenticated uses SHA-256 and salt&lt;/li&gt;
    &lt;li&gt;User passwords are never transmitted in plain text over the network (even when using insecure connections)&lt;/li&gt;
    &lt;li&gt;All database files (including script files that can be used to backup data) can be encrypted using AES-256 and XTEA encryption algorithms&lt;/li&gt;
    &lt;li&gt;The remote JDBC driver supports TCP/IP connections over SSL/TLS&lt;/li&gt;
    &lt;li&gt;The built-in web server supports connections over SSL/TLS&lt;/li&gt;
    &lt;li&gt;Passwords can be sent to the database using char arrays instead of Strings&lt;/li&gt;
&lt;/ul&gt;
Other Features and Tools
&lt;ul&gt;
    &lt;li&gt;Small footprint (smaller than 1 MB), low memory requirements&lt;/li&gt;
    &lt;li&gt;Multiple index types (b-tree, tree, hash)&lt;/li&gt;
    &lt;li&gt;Support for multi-dimensional indexes&lt;/li&gt;
    &lt;li&gt;CSV (comma separated values) file support&lt;/li&gt;
    &lt;li&gt;Support for linked tables, and a built-in virtual 'range' table&lt;/li&gt;
    &lt;li&gt;EXPLAIN PLAN support, sophisticated trace options&lt;/li&gt;
    &lt;li&gt;Database closing can be delayed or disabled to improve the performance&lt;/li&gt;
    &lt;li&gt;Web-based Console application (English, German, partially French and Spanish) with autocomplete&lt;/li&gt;
    &lt;li&gt;The database can generate SQL script files&lt;/li&gt;
    &lt;li&gt;Contains a recovery tool that can dump the contents of the data file&lt;/li&gt;
    &lt;li&gt;Support for variables (for example to calculate running totals)&lt;/li&gt;
    &lt;li&gt;Automatic re-compilation of prepared statements&lt;/li&gt;
    &lt;li&gt;Uses a small number of database files&lt;/li&gt;
    &lt;li&gt;Uses a checksum for each record and log entry for data integrity&lt;/li&gt;
    &lt;li&gt;Well tested (high code coverage, randomized stress tests)&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/8559058673267774097-6996316067391964153?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/6996316067391964153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/03/comparion-of-hsqldb-h2-sqlite.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6996316067391964153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6996316067391964153'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/03/comparion-of-hsqldb-h2-sqlite.html' title='Comparison of HSQLDB, H2, SQLite'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-4787045334669664226</id><published>2009-03-15T21:23:00.046+09:00</published><updated>2012-01-19T13:03:09.797+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Notable Maven Repositories, Plug-ins and Skins</title><content type='html'>&lt;h4&gt;
Maven Repositories&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Sonatype Nexus Open Source Version&lt;/b&gt;&lt;br/&gt;
   &lt;a href="http://repo.expertvill.net/" target="_blank"&gt;http://repo.expertvill.net/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Main Repositories&lt;/b&gt;&lt;br/&gt;
   &lt;a href="http://mvnrepository.com/" target="_blank"&gt;http://mvnrepository.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JBoss Maven Repository&lt;/b&gt;&lt;br /&gt;
    1. &lt;a href="http://www.jboss.org/community/docs/DOC-11381" target="_blank"&gt;JBoss Maven Snapshot Repositories&lt;/a&gt;&lt;br /&gt;
    2. &lt;a href="http://www.jboss.org/community/docs/DOC-11376" target="_blank"&gt;JBoss Maven Release Repositories&lt;/a&gt;&lt;br /&gt;
    JBoss Maven repsoitories include hibernate releases and snapshots.
  &lt;/li&gt;
&lt;li&gt;&lt;b&gt;SUN Jars Repository&lt;/b&gt;&lt;br /&gt;
    &lt;a href="http://maven.apache.org/guides/mini/guide-coping-with-sun-jars.html" target="_blank"&gt;http://maven.apache.org/guides/mini/guide-coping-with-sun-jars.html&lt;/a&gt;
  &lt;/li&gt;
&lt;li&gt;&lt;b&gt;DocBook Repository&lt;/b&gt;&lt;br /&gt;
    &lt;a href="http://docbook.sourceforge.net/maven/repository/" target="blank"&gt;http://docbook.sourceforge.net/maven/repository/&lt;/a&gt;&lt;br /&gt;
    About configuring &lt;code&gt;pom.xml&lt;/code&gt;, refer &lt;a href="http://wiki.docbook.org/topic/Maven" target="_blank"&gt;http://wiki.docbook.org/topic/Maven&lt;/a&gt;.
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Notable Maven plug-ins&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Resource Plugin&lt;/strong&gt; : &lt;a href="http://maven.apache.org/plugins/maven-resources-plugin/" target="_blank"&gt;http://maven.apache.org/plugins/maven-resources-plugin/&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Eclipse Plugin&lt;/strong&gt; : &lt;a href="http://maven.apache.org/plugins/maven-eclipse-plugin/" target="_blank"&gt;http://maven.apache.org/plugins/maven-eclipse-plugin/&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Doxia Plugin&lt;/strong&gt; : &lt;a href="http://maven.apache.org/doxia/doxia/doxia-maven-plugin/" target="_blank"&gt;http://maven.apache.org/doxia/doxia/doxia-maven-plugin/&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;JBoss Plugin&lt;/strong&gt; : &lt;a href="http://mojo.codehaus.org/jboss-maven-plugin/" target="_blank"&gt;http://mojo.codehaus.org/jboss-maven-plugin/&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Jetty Plugin&lt;/strong&gt; : &lt;a href="http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin" target="_blank"&gt;http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;IzPack Plugin&lt;/strong&gt; : &lt;a href="http://izpack.codehaus.org/izpack-maven-plugin/" target="_blank"&gt;http://izpack.codehaus.org/izpack-maven-plugin/&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Properties Plugin&lt;/strong&gt; : &lt;a href="http://mojo.codehaus.org/properties-maven-plugin/" target="_blank"&gt;http://mojo.codehaus.org/properties-maven-plugin/&lt;/a&gt;&lt;br /&gt;
Provides goals to read and write properties from and to files.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Build Number Plugin&lt;/strong&gt; : &lt;a href="http://mojo.codehaus.org/buildnumber-maven-plugin/" target="_blank"&gt;http://mojo.codehaus.org/buildnumber-maven-plugin/&lt;/a&gt;&lt;br /&gt;
Designed to get a unique build number for each time you build your project.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Versions Plugin&lt;/strong&gt; : &lt;a href="http://mojo.codehaus.org/versions-maven-plugin/" target="_blank"&gt;http://mojo.codehaus.org/versions-maven-plugin/&lt;/a&gt;&lt;br /&gt;
Manages the versions of artifacts in a project's POM.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Timestamp Plugin&lt;/strong&gt; : &lt;a href="http://code.google.com/p/maven-timestamp-plugin/" target="_blank"&gt;http://code.google.com/p/maven-timestamp-plugin/&lt;/a&gt;&lt;br /&gt;
Provides formatted timestamps for maven builds.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Spring BeanDoc Plugin&lt;/strong&gt; : &lt;a href="http://mojo.codehaus.org/maven-springbeandoc-plugin/" target="_blank"&gt;http://mojo.codehaus.org/maven-springbeandoc-plugin/&lt;/a&gt;&lt;br /&gt;
Generates pretty reports for Spring configuration files.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Graphviz Plugin&lt;/strong&gt; : &lt;a target="_blank" href="http://graphviz-maven-plugin.bryon.us/"&gt;http://graphviz-maven-plugin.bryon.us/&lt;/a&gt;&lt;br /&gt;
Uses the Graphviz library to render .dot files into images.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Replacer Plugin&lt;/strong&gt; : &lt;a target="_blank" href="http://code.google.com/p/maven-replacer-plugin/"&gt;http://code.google.com/p/maven-replacer-plugin/&lt;/a&gt;&lt;br /&gt;
Replace tokens within a file with a given value and fully supports regular expressions.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;FreeMarker Pre Processor(FMPP) Plugin&lt;/strong&gt; : &lt;a target="_blank" href="http://code.google.com/p/freemarkerpp-maven-plugin/"&gt;http://code.google.com/p/freemarkerpp-maven-plugin/&lt;/a&gt;&lt;br /&gt;
Allows to process FreeMarker templates, inject data into those templates in order to produce code, artifacts, reports or anything desired. 
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Expression Plugin&lt;/strong&gt; : &lt;a target="_blank" href="https://github.com/jdcasey/expression-maven-plugin"&gt;https://github.com/jdcasey/expression-maven-plugin&lt;/a&gt;&lt;br /&gt;
Allow users to resolve expressions interactively.
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Code analysis tools plug-in&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;FindBugs Plugin&lt;/strong&gt; : &lt;a target="_blank" href="http://mojo.codehaus.org/findbugs-maven-plugin/"&gt;http://mojo.codehaus.org/findbugs-maven-plugin/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Checkstyle Plugin&lt;/strong&gt; : &lt;a target="_blank" href="http://maven.apache.org/plugins/maven-checkstyle-plugin/"&gt;http://maven.apache.org/plugins/maven-checkstyle-plugin/&lt;/a&gt;&lt;br /&gt;
Generates a report regarding the code style used by the developers.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dependency Graph Plugin&lt;/strong&gt; : &lt;a href="http://el4j.sourceforge.net/plugins/maven-depgraph-plugin/" target="_blank"&gt;http://el4j.sourceforge.net/plugins/maven-depgraph-plugin/&lt;/a&gt;&lt;br /&gt;
Draws a dependency graph of the project the mojo is executed in.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Sonar Plugin&lt;/strong&gt; : &lt;a href="http://mojo.codehaus.org/sonar-maven-plugin/" target="_blank"&gt;http://mojo.codehaus.org/sonar-maven-plugin/&lt;/a&gt;&lt;br /&gt;
Enables to analyze and report metrics on source code.
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Collaboration tools plug-in&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Confluence Plugin&lt;/strong&gt; : &lt;a target="_blank" href="http://code.google.com/p/maven-confluence-plugin/"&gt;http://code.google.com/p/maven-confluence-plugin/&lt;/a&gt;&lt;br /&gt;
Documents a project (using maven site style) and send result to a live confluence site.
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Redmine Plugin&lt;/strong&gt; : &lt;a target="_blank" href="http://www.nuiton.org/embedded/jredmine/maven-jredmine-plugin/"&gt;http://www.nuiton.org/embedded/jredmine/maven-jredmine-plugin/&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Source configuration management tools plug-in&lt;/h5&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;SVN Revision Number Plugin&lt;/strong&gt; : &lt;a target="_blank" href="http://code.google.com/p/maven-svn-revision-number-plugin/"&gt;http://code.google.com/p/maven-svn-revision-number-plugin/&lt;/a&gt;&lt;br /&gt;
Retrieves the revision number and the status of the Subversion working copy directory and sets project properties that can be used later in the build process.
    &lt;ul&gt;
      &lt;li&gt;To work with working copy of SVN 1.7 or higher, you should setup dependencies for this plugin to use &lt;strong&gt;&lt;code&gt;svnkit 1.7.0-SNAPSHOT&lt;/code&gt;&lt;/strong&gt;. For this refer : &lt;a target="_blank" href="http://code.google.com/p/maven-svn-revision-number-plugin/issues/detail?id=10"&gt;http://code.google.com/p/maven-svn-revision-number-plugin/issues/detail?id=10&lt;/a&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

&lt;/ul&gt;




&lt;h4&gt;Notable Maven skins&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Fluido skin : &lt;a target="_blank" href="http://code.google.com/p/fluido-skin/"&gt;http://code.google.com/p/fluido-skin/&lt;/a&gt;&lt;br /&gt;
rounded corners and code syntax highlight&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/8559058673267774097-4787045334669664226?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/4787045334669664226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/03/3rd-party-maven-repositories.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4787045334669664226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4787045334669664226'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/03/3rd-party-maven-repositories.html' title='Notable Maven Repositories, Plug-ins and Skins'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3191845912854175375</id><published>2009-03-09T01:08:00.047+09:00</published><updated>2012-01-27T16:42:45.512+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><title type='text'>Tips on Ant</title><content type='html'>&lt;h4&gt;Readings : References, Articles and Tutorials&lt;/h4&gt;

&lt;ul type="circle"&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://ant.apache.org/manual/'&gt;Ant Manual&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://ant.apache.org/external.html'&gt;External Tools and Tasks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://wdarby.blogspot.com/2010/06/using-antlib-props-in-ant-18.html'&gt;Using Antlib props in Ant 1.8&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://ant.apache.org/faq.html#propertyvalue-as-name-for-property'&gt;How can I do something like &amp;lt;property name="prop" value="${${anotherprop}}"/&amp;gt; (double expanding the property)?&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Pattern to Specify Files and Directories&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://ant.apache.org/manual/dirtasks.html#patterns"&gt;
Ant User Manual : Directory-based Tasks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Notable Ant Tasks&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://ant.apache.org/antlibs/'&gt;The Apache Ant Libraries Subproject&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a target='_blank' href='http://ant-contrib.sourceforge.net/'&gt;Ant-Contrib Tasks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://maven.apache.org/ant-tasks/'&gt;Maven Ant Tasks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/E13222_01/wls/docs90/programming/ant_tasks.html'&gt;WebLogic Server 9.0 Ant Tasks to configure and use a server domain&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/E14571_01/web.1111/e13706/ant_tasks.htm'&gt;WebLogic Server 11.1 Ant Tasks to configure and use a server domain&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://download.oracle.com/docs/cd/E14571_01/web.1111/e13706/wldeploy.htm'&gt;WebLogic Server 11.1 Ant Tasks to deploy applications and modules : &lt;code&gt;wldeploy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a target='_blank' href='http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.mylyn.wikitext.help.ui%2Fhelp%2FMylyn+WikiText+User+Guide.html'&gt;Ant tasks for markup conversion in Mylyn WikiText&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;ul&gt; 
      &lt;li&gt;&lt;a target='_blank' href='http://www.jarvana.com/jarvana/view/org/fusesource/wikitext/wikitext-core/1.3/wikitext-core-1.3-javadoc.jar!/index.html?org/eclipse/mylyn/wikitext/core/util/anttask/MarkupToHtmlTask.html'&gt;API for &lt;strong&gt;&lt;code&gt;MarkupToHtmlTask&lt;/code&gt;&lt;/strong&gt; class.&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a target='_blank' href='http://www.jarvana.com/jarvana/view/org/fusesource/wikitext/wikitext-core/1.3/wikitext-core-1.3-javadoc.jar!/index.html?org/eclipse/mylyn/wikitext/core/util/anttask/MarkupToDocbookTask.html'&gt;API for &lt;strong&gt;&lt;code&gt;MarkupToDocbookTask&lt;/code&gt;&lt;/strong&gt; class.&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://antelope.tigris.org/'&gt;Antelope&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://ant.apache.org/manual/Tasks/input.html'&gt;&lt;strong&gt;&lt;code&gt;Input&lt;/code&gt;&lt;/strong&gt; task&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://antforms.sourceforge.net/'&gt;AntForm/AntMenu&lt;/a&gt;&lt;br/&gt;
  AntForm provides an Ant task (see usage) for setting property values through a Swing-based form.
  &lt;/li&gt;
  &lt;li&gt;&lt;a target='_blank' href='http://fmpp.sourceforge.net/ant.html'&gt;FMPP Ant task&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Using Saxon in Ant XSLT Task&lt;/h4&gt;
&lt;p&gt;
If you don't read the following article, you would do really lots of trial and error to use Saxon XSLT processor with XSLT task of Ant.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://saxon.wiki.sourceforge.net/Calling+Saxon+from+Ant"&gt;
http://saxon.wiki.sourceforge.net/Calling+Saxon+from+Ant&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Listing members of &lt;code&gt;fileset&lt;/code&gt; or &lt;code&gt;path-like structure&lt;/code&gt; line by line&lt;/h4&gt;
&lt;p&gt;
For eye-checking or reporting purpose, sometimes it is necessary to list members of &lt;strong&gt;&lt;code&gt;fileset&lt;/code&gt;&lt;/strong&gt; each one in it's line.&lt;br/&gt;
You can do this using &lt;strong&gt;&lt;code&gt;pathconvert&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;echo&lt;/code&gt;&lt;/strong&gt; tasks.
&lt;/p&gt;
&lt;p&gt;
The following is snippet used to list non-java files in source directories of &lt;code&gt;Maven&lt;/code&gt; projects (which are multi-module form).
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:xml"&gt;
   &lt;target name="source.detect.nonjava"&gt;
      &lt;fileset id="nonjava" dir=".."&gt;
         &lt;include name="*/src/main/java/**"/&gt;
         &lt;exclude name="**/*.java"/&gt;
      &lt;/fileset&gt;
      
      &lt;pathconvert pathsep="${line.separator}" property="nonjava.list" refid="nonjava"&gt;
         &lt;mapper type="regexp" from=".*\\(.*\\src\\main\\java\\.*)" to="\1"/&gt;
      &lt;/pathconvert&gt;
         
      &lt;echo&gt;${nonjava.list}&lt;/echo&gt;
   &lt;/target&gt;
&lt;/script&gt;
&lt;p&gt;
You can also list path-like structure line by line using &lt;strong&gt;&lt;code&gt;&amp;lt;pathconvert&amp;gt;&lt;/code&gt;&lt;/strong&gt; task.&lt;br/&gt;
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:xml;highlight:[5]"&gt;
   &lt;path id="classpath.main"&gt;
      &lt;pathelement path="${java.class.path}" /&gt;
      &lt;path refid="maven.compile.classpath"/&gt;
   &lt;/path&gt;
   &lt;pathconvert pathsep="${line.separator}" property="classpath.main.list" refid="classpath.main"/&gt;
   &lt;echo&gt;${classpath.main.list}&lt;/echo&gt;
&lt;/script&gt;
&lt;p&gt;
Actually &lt;strong&gt;&lt;code&gt;&amp;lt;pathconvert&amp;gt;&lt;/code&gt;&lt;/strong&gt; can also be applied to &lt;strong&gt;&lt;code&gt;dirset&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;filelist&lt;/code&gt;&lt;/strong&gt;, or &lt;strong&gt;&lt;code&gt;propertyset&lt;/code&gt;&lt;/strong&gt; as well. For details, refer &lt;a target="_blank" href="http://ant.apache.org/manual/Tasks/pathconvert.html"&gt;http://ant.apache.org/manual/Tasks/pathconvert.html&lt;/a&gt;
&lt;/p&gt;

&lt;h4&gt;Including another path-like structure within a path-like structure&lt;/h4&gt;
&lt;p&gt;
If you want include a path-like structure to another, you can use &lt;strong&gt;&lt;code&gt;&amp;lt;path refid="..."&amp;gt;&lt;/code&gt;&lt;/strong&gt; like this.
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:xml:highlight:[10]"&gt;
  &lt;classpath id="classpath.base"&gt;
    &lt;pathelement location="..."/&gt;
    &lt;pathelement location="..."/&gt;
    &lt;fileset dir="..."&gt;
      &lt;include name="..."/&gt;
    &lt;/fileset&gt;
  &lt;/classpath&gt;

  &lt;classpath id="classpath.extended"&gt;
    &lt;path refid="classpath.base"/&gt;
    &lt;pathelement location="..."/&gt;
    &lt;fileset dir="..."&gt;
      &lt;include name="..."/&gt;
    &lt;/fileset&gt;
  &lt;/classpath&gt;
&lt;/script&gt;

&lt;p&gt;
Note that you should not use &lt;strong&gt;&lt;code&gt;&amp;lt;pathelement path="..."&amp;gt;&lt;/code&gt;&lt;/strong&gt;. The value of &lt;strong&gt;&lt;code&gt;path&lt;/code&gt;&lt;/strong&gt; attribute in &lt;strong&gt;&lt;code&gt;pathelement&lt;/code&gt;&lt;/strong&gt; is expected to be string corresponding to path not id of path-like structure.&lt;br/&gt;
The following would cause error.
&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush:xml;highlight:[10]"&gt;
  &lt;classpath id="classpath.base"&gt;
    &lt;pathelement location="..."/&gt;
    &lt;pathelement location="..."/&gt;
    &lt;fileset dir="..."&gt;
      &lt;include name="..."/&gt;
    &lt;/fileset&gt;
  &lt;/classpath&gt;

  &lt;classpath id="classpath.extended"&gt;
    &lt;pathelement path="classpath.base"/&gt;
    &lt;pathelement location="..."/&gt;
    &lt;fileset dir="..."&gt;
      &lt;include name="..."/&gt;
    &lt;/fileset&gt;
  &lt;/classpath&gt;
&lt;/script&gt;

&lt;p&gt;
If you really want to use &lt;strong&gt;&lt;code&gt;pathelement&lt;/code&gt;&lt;/strong&gt; all the way, you can use &lt;strong&gt;&lt;code&gt;toString&lt;/code&gt;&lt;/strong&gt; function.&lt;br/&gt;
The following would work.
&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush:xml;highlight:[10]"&gt;
  &lt;classpath id="classpath.base"&gt;
    &lt;pathelement location="..."/&gt;
    &lt;pathelement location="..."/&gt;
    &lt;fileset dir="..."&gt;
      &lt;include name="..."/&gt;
    &lt;/fileset&gt;
  &lt;/classpath&gt;

  &lt;classpath id="classpath.extended"&gt;
    &lt;pathelement path="${toString:classpath.base}"/&gt;
    &lt;pathelement location="..."/&gt;
    &lt;fileset dir="..."&gt;
      &lt;include name="..."/&gt;
    &lt;/fileset&gt;
  &lt;/classpath&gt;
&lt;/script&gt;

&lt;p&gt;
Note that &lt;strong&gt;&lt;code&gt;${java.class.path}&lt;/code&gt;&lt;/strong&gt; which can be evaluated from &lt;a target="_blank" href="http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#getProperties%28%29"&gt;default system properties of Java&lt;/a&gt; is just string corresponding to classpath and &lt;a target="_blank" href="http://maven.apache.org/plugins/maven-antrun-plugin/examples/classpaths.html"&gt;&lt;strong&gt;&lt;code&gt;maven.plugin.classpath&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; which is defined implicitly with &lt;strong&gt;&lt;code&gt;maven-antrun-plugin&lt;/code&gt;&lt;/strong&gt; is id of path-like structure.&lt;br/&gt;
So, you should use them like the following.
&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush:xml;highlight:[2,3]"&gt;
  &lt;classpath&gt;
    &lt;pathelement path="${java.class.path}"/&gt;
    &lt;path refid="maven.plugin.classpath"/&gt;
    &lt;fileset dir="..."&gt;
      &lt;include name="..."/&gt;
    &lt;/fileset&gt;
  &lt;/classpath&gt;
&lt;/script&gt;


&lt;h4&gt;Printing &lt;strong&gt;&lt;code&gt;environment variables&lt;/code&gt;&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;
To identify all the &lt;strong&gt;&lt;code&gt;environment variables&lt;/code&gt;&lt;/strong&gt; and their values defined within the process the current Ant build is running, you can use
&lt;strong&gt;&lt;code&gt;echo&lt;/code&gt;&lt;/strong&gt; task with &lt;strong&gt;&lt;code&gt;environment&lt;/code&gt;&lt;/strong&gt; attribute.
&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush:xml;"&gt;
  ...
  &lt;property environment='env'/&gt;
  &lt;echoproperties/&gt;
  ...
&lt;/script&gt;

&lt;p&gt;
The above &lt;code&gt;property&lt;/code&gt; task makes properties for all the environment variables in current process with the property names prefixed by 'env'.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-3191845912854175375?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3191845912854175375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/03/using-saxon-in-ant-xslt-task.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3191845912854175375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3191845912854175375'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/03/using-saxon-in-ant-xslt-task.html' title='Tips on Ant'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3903794139127997787</id><published>2009-02-28T14:06:00.009+09:00</published><updated>2011-08-09T21:24:41.527+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>DATE, TIME, and TIMESTAMP of SQL Standard</title><content type='html'>&lt;p&gt;
The followings are definition of &lt;code&gt;&lt;b&gt;DATE&lt;/b&gt;&lt;/code&gt;, &lt;code&gt;&lt;b&gt;TIME&lt;/b&gt;&lt;/code&gt;, and &lt;code&gt;&lt;b&gt;TIMESTAMP&lt;/b&gt;&lt;/code&gt; data type of SQL standard.
&lt;/p&gt;
&lt;p&gt;
These are somewhat confusing to Java developers, because &lt;code&gt;Date&lt;/code&gt; class of JDK represents a specific instant in time, with millisecond precision and there's no basic classes(except &lt;code&gt;java.sql.Date&lt;/code&gt;, &lt;code&gt;java.sql.Time&lt;/code&gt; which are restricted to JDBC) that represent pure date and pure time separately.
&lt;/p&gt;

&lt;pre class="code"&gt;
-  DATE - contains the &amp;lt;datetime field&gt;s YEAR, MONTH, and DAY;

-  TIME - contains the &amp;lt;datetime field&gt;s HOUR, MINUTE, and SECOND;

-  TIMESTAMP - contains the &amp;lt;datetime field&gt;s YEAR, MONTH, DAY, HOUR, MINUTE, 
               and SECOND.
&lt;/pre&gt;
&lt;p&gt;
The above definition is from SQL-92 standard draft which you can get from &lt;a href="http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-3903794139127997787?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3903794139127997787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/02/date-time-and-timestamp-of-sql-standard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3903794139127997787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3903794139127997787'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/02/date-time-and-timestamp-of-sql-standard.html' title='DATE, TIME, and TIMESTAMP of SQL Standard'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-3984416672492142314</id><published>2009-02-20T10:18:00.014+09:00</published><updated>2009-03-24T15:41:15.387+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><title type='text'>Print Classpath in Ant Build File</title><content type='html'>Sometimes, it can be convenient to print out classpath to console to confirm it is correctly setup in Ant build file.

For this, you can use the expression &lt;b&gt;&lt;code&gt;${toString:pathreference}&lt;/code&gt;&lt;/b&gt; like the following example

&lt;pre class="code"&gt;
&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;
&amp;lt;project name="shop1-hibernate-export" default="echo-env" basedir="."
 xmlns:artifact="antlib:org.apache.maven.artifact.ant"&gt;

 ...

 &amp;lt;!-- Get Maven Dependency --&gt;
 &amp;lt;artifact:pom id="project.pom" file="${project.home}/pom.xml"/&gt;
 &amp;lt;artifact:dependencies pomRefId="project.pom" pathId="dependency.classpath"/&gt;
 
 &amp;lt;!-- Ant4Eclipse Tasks Definitions --&gt;
 &amp;lt;taskdef resource="net/sf/ant4eclipse/antlib.xml" /&gt; 
 &amp;lt;getEclipseClasspath pathId="eclipse.classpath" project="../../../../../.."/&gt;

 &amp;lt;path id="project.classpath"&gt;
  &amp;lt;path refid="dependency.classpath"/&gt;
  &amp;lt;path refid="eclipse.classpath"/&gt;
 &amp;lt;/path&gt;

 &amp;lt;target name="echo-env"&gt;
  &amp;lt;echoproperties/&gt;
  &amp;lt;echo&gt;${toString:project.classpath}&amp;lt;/echo&gt;
 &amp;lt;/target&gt;

 &amp;lt;target name="generate-ddl"&gt;

 &amp;lt;/target&gt;

&amp;lt;/project&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-3984416672492142314?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/3984416672492142314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/02/print-classpath-in-ant-build-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3984416672492142314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/3984416672492142314'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/02/print-classpath-in-ant-build-file.html' title='Print Classpath in Ant Build File'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-1077200741309303932</id><published>2009-01-21T10:02:00.011+09:00</published><updated>2011-11-01T17:42:07.797+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Tips for OpenOffice.org 3</title><content type='html'>&lt;h4&gt;Toggle off auto formatting of date string&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Symptom : &lt;br/&gt;
Date string such as 01/23, 2009-01-23, or 1.23 is converted to more natural date format &lt;b&gt;automatically&lt;/b&gt; after typing.&lt;/li&gt;
&lt;li&gt;Recipe : &lt;br/&gt;
Go to &lt;code class="menu"&gt;[Tools &gt; Options...]&lt;/code&gt; menu and select &lt;code class="dialog"&gt;[OpenOffice.org Writer &gt; Table]&lt;/code&gt; section. In the dialog, uncheck &lt;code class="menu"&gt;&lt;b&gt;"Number recognition"&lt;/b&gt;&lt;/code&gt; option.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Bottom-line mismatch between pure English line and line containing both English and Asian letter.&lt;/h4&gt;
&lt;p&gt;
....not solved
&lt;/p&gt;

&lt;h4&gt;View page headings panel and styles/formatting panel&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Check &lt;code class="menu"&gt;[Format &gt; Styles and Formatting]&lt;/code&gt; menu&lt;/li&gt;
&lt;li&gt;Check &lt;code class="menu"&gt;[Edit &gt; Navigator]&lt;/code&gt; menu&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Cascaded numbering for heading style&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code class="menu"&gt;[Tools &gt; Outline Numbering ...]&lt;/code&gt; menu&lt;/li&gt;
&lt;li&gt;In &lt;code class="menu"&gt;Numbering&lt;/code&gt; tabs, you can assign number format (1, 2, 3, ..., A, B, C, ..., or i, ii, iii, ...), cascading level (1.1.1, 1.1.1.1 for example) and start number for each level. Levels from 1 to 10 correspond styles from &lt;code&gt;&lt;b&gt;Heading 1&lt;/b&gt;&lt;/code&gt; to &lt;code&gt;&lt;b&gt;Heading 10&lt;/b&gt;&lt;/code&gt; respectively.
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-1077200741309303932?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/1077200741309303932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2009/01/tips-for-openofficeorg-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1077200741309303932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/1077200741309303932'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2009/01/tips-for-openofficeorg-3.html' title='Tips for OpenOffice.org 3'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-5640897337808061742</id><published>2008-12-19T11:30:00.030+09:00</published><updated>2011-11-14T15:59:28.376+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iBATIS'/><title type='text'>Using Stored Procedure/Function with iBATIS</title><content type='html'>This is simple example for using stored function with iBATIS.
&lt;br/&gt;&lt;br/&gt;
Recently I implemented number generating module using oracle stored function and iBATIS with lots of trial/error more than I expected. It's because I couldn't find a complete working example. The example in official manual from iBATIS is not sufficient , the example from the book 'iBATIS in Action' is not correct(I didn't check the corrections from the Manning site), and the search results from Goole didn't include excellent examples for me.
&lt;br/&gt;&lt;br/&gt;
The following exmaple is using number table to generate number for construct new primary key for specified table.
&lt;br/&gt;&lt;br/&gt;
The number table has following structure
&lt;pre class="brush:sql"&gt;
CREATE TABLE test.PS_NUMBER (
  table_name VARCHAR2(50) NOT NULL,
  next_no NUMBER(20) NOT NULL,
  CONSTRAINT pk_number PRIMARY KEY (table_name)
);
&lt;/pre&gt;
To prevent same number is given in highly concurrent situation with Oracle database, SELECT ~ FOR UPDATE should be used.&lt;br/&gt;
But iBATIS dosen't provide ways to execute both select statement and update statement at the same time(as I know), I decided to use stored procedure. Because it is possible to lock the table row in case of server failure right after the first select(for update) statement is executed but before second update statement is excuted.
&lt;br/&gt;&lt;br/&gt;
The stored procedure is like following
&lt;pre class="brush:sql"&gt;
CREATE OR REPLACE FUNCTION gen_num_for_table(table_name_in IN VARCHAR2)
  RETURN NUMBER
  IS
  next_no_out NUMBER;
BEGIN
  SELECT next_no INTO next_no_out
  FROM ps_number
  WHERE table_name = table_name_in
  FOR UPDATE WAIT 3;

  UPDATE ps_number SET next_no = next_no + 1
  WHERE table_name = table_name_in;

  RETURN next_no_out;
END gen_num_for_table;
&lt;/pre&gt;

Now, for server applications the SQL Map is like following

&lt;script type="syntaxhighlighter" class="brush:xml"&gt;
&lt;parameterMap id="generateNumberParam" class="java.util.Map"&gt;
  &lt;parameter property="next_no" jdbcType="INTEGER" mode="OUT"/&gt;
  &lt;parameter property="table_name" jdbcType="VARCHAR2" mode="IN"/&gt;
&lt;/parameterMap&gt;

&lt;procedure id="generateNumberForTable" parametermap="generateNumberParam"&gt;
{? = call GEN_NUM_FOR_TABLE(?) }
&lt;/procedure&gt;
&lt;/script&gt;

The statement part should be enclosed with curly brackets({}) and the statement is proceeded by '? = call' in case of function. In case of procedure, just start with 'call'. These are same syntax with java.sql.CallableStatement. Acually, iBATIS will execute callable statement using specified statement and parameterMap.
The parameterMap should be specified surely. The order of parameter is important. In case of function, the first parameter is for return value and so should have 'OUT' mode attribute. For each parameter, jdbcType should be specified explicitly, so as to be interpreted to &lt;code&gt;CallableStatment.registerOutParameter&lt;/code&gt; method with correct parameter and &lt;code&gt;setXXX&lt;/code&gt; of &lt;code&gt;CallableStatement&lt;/code&gt;.
&lt;br/&gt;&lt;br/&gt;
Finally the application using above sql map is like following

&lt;pre class="brush:java"&gt;
public int generateNumberForTable(String tableName) throws Exception{

  java.util.Map map = new java.util.HashMap();
  map.put("table_name", tableName);

  this.sqlMapClient.queryForObject("Common.generateNumberForTable", map);

  return (Integer)map.get("next_no");
}
&lt;/pre&gt;

The input is given using map object as is expected from SQL Map definition. The important thing is that the result is not given as a return value of &lt;code&gt;queryForObject&lt;/code&gt; method but is put in the map with the key specified in SQL Map definition.
&lt;br/&gt;&lt;br/&gt;
For your information, the equivalent codes using plain JDBC would be like following. It could help you understand how the above codes would work.
&lt;pre class="brush:java"&gt;
public int generateNumberForTable(String tableName) throws Exception{
   Connection conn = null;
   CallableStatement cstmt = null;

   try{
      DataSource ds = this.sqlMapClient.getDataSource();
      conn = ds.getConnection();
      cstmt = conn.prepareCall("{? = call gen_num_for_table(?)}");
      cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
      cstmt.setString(2, tableName);

      cstmt.executeQuery();

      return cstmt.getInt(1);
   }catch(Exception ex){
      ex.printStackTrace(System.err);
      throw ex;
   }finally{
      if(cstmt != null){ try{ cstmt.close();}catch(Exception ex2){} }
      if(conn != null){ try{ conn.close();}catch(Exception ex2){} }
   }
}
&lt;/pre&gt;

For more readings.
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://andriusm.wordpress.com/2008/09/01/ibatis-and-stored-oracle-proceduresfunctions/trackback/"&gt;iBatis and Stored Oracle procedures/functions&lt;/a&gt;
This is the article that I found after this writing and I think it gives you more information about iBATIS and Oracle stored procedure/function. I didn't execute personally the code in that article and I didn't understand what is 'ORACLECURSOR' type in the example code, but as a whole you can find hints or guide from the article.&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/8559058673267774097-5640897337808061742?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/5640897337808061742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2008/12/using-stored-procedure-with-ibatis.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5640897337808061742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5640897337808061742'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2008/12/using-stored-procedure-with-ibatis.html' title='Using Stored Procedure/Function with iBATIS'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2462545017564171015</id><published>2008-11-12T11:35:00.034+09:00</published><updated>2012-01-30T13:07:49.175+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UNIX'/><title type='text'>Useful UNIX Commands and Shell Scripts</title><content type='html'>&lt;h4&gt;Often-used Solaris Commands&lt;/h4&gt;
Really concise and useful
&lt;br/&gt;&lt;br/&gt;
&lt;a target="_blank" href="http://www.themis.com/supp/suppfaqs/faqs_solaris.htm#q36"&gt;http://www.themis.com/supp/suppfaqs/faqs_solaris.htm#q36&lt;/a&gt;


&lt;h4&gt;View files in octal or hexadecimal format - od&lt;/h4&gt;
You can view non ascii base files in hexadecimal format using &lt;code&gt;od&lt;/code&gt; command.
&lt;pre class='code'&gt;&lt;code class='shell'&gt;
% od -A d -x journal.log
&lt;/code&gt;&lt;/pre&gt;

For more about &lt;code&gt;od&lt;/code&gt;, refer the following.
&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.opengroup.org/onlinepubs/9699919799/utilities/od.html'&gt;http://www.opengroup.org/onlinepubs/9699919799/utilities/od.html&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds4/od.htm'&gt;http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds4/od.htm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Find files with specified name and list them with full path&lt;/h4&gt;
If you want to find files with extension of 'jar' and print them with full path, use &lt;code&gt;find&lt;/code&gt; command with &lt;code&gt;-exec&lt;/code&gt; operator like the following.
&lt;pre class='code'&gt;&lt;code class='shell'&gt;
% find . -name '*.jar' -exec ls -l {} \;
&lt;/code&gt;&lt;/pre&gt;
For more about &lt;code&gt;find&lt;/code&gt; command and &lt;code&gt;-exec&lt;/code&gt; operator including strange '{}' or '\;' in the above example, refer the followings.
&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.opengroup.org/onlinepubs/9699919799/utilities/find.html'&gt;http://www.opengroup.org/onlinepubs/9699919799/utilities/find.html&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://docstore.mik.ua/orelly/unix3/upt/ch09_01.htm'&gt;http://docstore.mik.ua/orelly/unix3/upt/ch09_01.htm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Find files containing the specified word&lt;/h4&gt;
&lt;script type="syntaxhighlighter" class="brush:shell;gutter:false"&gt;
  
% find /home |xargs grep "password"
  
&lt;/script&gt;


&lt;h4&gt;List files using &lt;code&gt;find&lt;/code&gt; command excluding files with 'Permission denined'&lt;/h4&gt;

&lt;p&gt;
When executing &lt;code&gt;find&lt;/code&gt; command in simplest format, you may get lots of lines just saying that &lt;code&gt;'Permission denied'&lt;/code&gt;. Most cases, those are not what you want, and lots of permission denied lines can disturb you identifying the wanted result.
&lt;/p&gt;
&lt;p&gt;
You can use &lt;b&gt;&lt;code&gt;stderr&lt;/code&gt; redirection&lt;/b&gt; to cut out permission denied files (or directories).
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:shell;gutter:false"&gt;
  
% find / -name '*.jar' 2&gt;/dev/null
  
&lt;/script&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://stackoverflow.com/questions/762348/how-can-i-exclude-all-permission-denied-messages-from-find"&gt;How can I exclude all “permission denied”-messages from “find .”? (from stackoverflow)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Redirection_%28computing%29"&gt;Redirection on Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;






&lt;h4&gt;Sorting the file system usage result from the &lt;code&gt;du&lt;/code&gt; command&lt;/h4&gt;
&lt;p&gt;
You can sort the output of &lt;code&gt;du&lt;/code&gt; command applying pipe to &lt;code&gt;sort&lt;/code&gt; command.
&lt;/p&gt;
&lt;pre class='code'&gt;&lt;code class='shell'&gt;
% du -m | sort -n
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
For more about &lt;code&gt;du&lt;/code&gt; and &lt;code&gt;sort&lt;/code&gt;, read the followings.
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.opengroup.org/onlinepubs/9699919799/utilities/du.html'&gt;du - estimate file space usage&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a target='_blank' href='http://www.opengroup.org/onlinepubs/9699919799/utilities/sort.html'&gt;sort - sort, merge, or sequence check text files&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;Finding large files&lt;/h4&gt;

&lt;p&gt;
To find large files(not directories) under current directory and list them in pages, use the following command.
&lt;/p&gt;
&lt;pre class="brush:shell;gutter:false"&gt;

% find . -type f -exec du -k {} 2&gt;/dev/null \; | sort -nr | more

&lt;/pre&gt;
&lt;p&gt;
To filter out small files, you can use &lt;code&gt;size&lt;/code&gt; option with &lt;code&gt;find&lt;/code&gt; command, or to filter out some subdirectories you can redirect the result to &lt;code&gt;grep&lt;/code&gt; command.&lt;br/&gt;
The following command will list files whose size are more than 1 mega-byte under current directory recursively except the subdirectories starting with 'svn' in order of their size.
&lt;/p&gt;
&lt;pre class="brush:shell;gutter:false"&gt;

% find . -type f -size +1000000c -exec du -k {} 2&gt;/dev/null \; | sort -nr | grep -E "\./svn.*" -v

&lt;/pre&gt;


&lt;h4&gt;Identifying the shell of your current login&lt;/h4&gt;
&lt;p&gt;
To identify what shell a user is set to use by default, you can check &lt;code&gt;'SHELL'&lt;/code&gt; variable.
&lt;/p&gt;
&lt;script type="syntaxhighlighter" class="brush:shell;gutter:false"&gt;
  
$ echo $SHELL
/bin/bash
$ bin/ksh
$ echo $SHELL
/bin/bash
 
&lt;/script&gt;
&lt;p&gt;
As the above example shows, &lt;code&gt;SHELL&lt;/code&gt; variable contains the login default shell type not the one currently in use.
&lt;/p&gt;


&lt;h4&gt;Identifying the product of Linux installed&lt;/h4&gt;
&lt;p&gt;
For Linux, &lt;strong&gt;&lt;code&gt;/etc/issues&lt;/code&gt;&lt;/strong&gt; file contains more detailed information on what Linux product it is.
&lt;/p&gt;

&lt;script type="syntaxhighlighter" class="brush:shell;gutter:false"&gt;
  
$ cat /etc/issue
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
Kernel \r on an \m
 
&lt;/script&gt;


&lt;h4&gt;Identifying TCP/IP ports currently in use.&lt;/h4&gt;

&lt;p&gt;
You can identify TCP/IP ports currently in use using &lt;strong&gt;&lt;code&gt;netstat&lt;/code&gt;&lt;/strong&gt; command. The options of &lt;code&gt;netstat&lt;/code&gt; is slightly different among operating systems.
&lt;/p&gt;

&lt;p&gt;
For UNIX,
&lt;script type="syntaxhighlighter" class="brush:shell;gutter:false"&gt;
  
$ netstat -na

&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;
For Linux,
&lt;script type="syntaxhighlighter" class="brush:shell;gutter:false"&gt;
  
$ netstat -nap

&lt;/script&gt;
You need root privilege to take effect of &lt;code&gt;-p&lt;/code&gt; option
&lt;/p&gt;
&lt;p&gt;
For Windows,
&lt;script type="syntaxhighlighter" class="brush:shell;gutter:false"&gt;
  
$ netstat -nao

&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;
For more about &lt;strong&gt;&lt;code&gt;netstat&lt;/code&gt;&lt;/strong&gt;, refer &lt;a target='_blank' href='http://en.wikipedia.org/wiki/Netstat'&gt;topics in Wikipedia&lt;/a&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-2462545017564171015?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2462545017564171015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2008/11/often-used-solaris-commands.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2462545017564171015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2462545017564171015'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2008/11/often-used-solaris-commands.html' title='Useful UNIX Commands and Shell Scripts'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-4234075508985674556</id><published>2008-11-03T09:29:00.022+09:00</published><updated>2011-11-12T00:27:39.831+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Paginated Query</title><content type='html'>The statements to retrieve partial rows from selected data are like followings according to the DBMS.
&lt;br/&gt;&lt;br/&gt;

&lt;h4&gt;Oracle (8i or higer)&lt;/h4&gt;
Use &lt;code&gt;ROW_NUMBER()&lt;/code&gt; function and subquery. In some cases, such as hierarchical query (&lt;code&gt;START WITH ~ CONNECT BY ~&lt;/code&gt; clause) using &lt;code&gt;ORDER SIBLINGS BY&lt;/code&gt;, &lt;code&gt;ROW_NUMBER()&lt;/code&gt; function can't be used in subquery, so in those cases, &lt;code&gt;ROWNUM&lt;/code&gt; with double-nested subquery can be used.&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;Syntax :&lt;/li&gt; 
&lt;pre class="syntax"&gt;
SELECT *
FROM (
   SELECT ROW_NUMBER() OVER (ORDER BY ~) AS row_no, ~
   FROM ~ 
   WHERE ~ )
WHERE row_no BETWEEN &lt;i&gt;m&lt;/i&gt; AND &lt;i&gt;n&lt;/i&gt;
&lt;/pre&gt;
&lt;li&gt;Example :&lt;/li&gt;
&lt;pre class="code"&gt;
select *
from(
  select row_number(order by product_name) as row_no,
      product_id, product_name, price, manufacturer
  from tb_product
  where category_id = 101)
where row_no between 21 and 30
&lt;/pre&gt;
&lt;/ul&gt;

&lt;h4&gt;Microsoft SQL Server (2005 or higher)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Syntax :&lt;/li&gt; 
&lt;pre class="syntax"&gt;
WITH ~ AS(
   SELECT ~ , ROW_NUMBER() OVER(~) AS row_no
   FROM ~
   WHERE ~
)
SELECT ~
FROM ~
WHERE row_no BETWEEN &lt;i&gt;m&lt;/i&gt; AND &lt;i&gt;n&lt;/i&gt;
&lt;/pre&gt;
&lt;li&gt;Example :&lt;/li&gt; 
&lt;pre class="code"&gt;
with v_product as (
   select row_number() over(order by product_name) as row_no,
      product_id, product_name, price, manufacturer
   from tb_product
   where category_id = 101)
select *
from v_product
where row_no between 21 and 30
&lt;/pre&gt;
&lt;/ul&gt;

&lt;h4&gt;MySQL&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Syntax :&lt;/li&gt;
&lt;pre class="syntax"&gt;
SELECT ~ 
FROM ~ 
WHERE ~ 
ORDER BY ~
LIMIT &lt;i&gt;offset&lt;/i&gt;, &lt;i&gt;row_count&lt;/i&gt;
&lt;/pre&gt;
&lt;li&gt;Example :&lt;/li&gt; 
&lt;pre class="code"&gt;
select product_id, product_name, price, manufacturer
from tb_product
where category_id = 101
order by product_name
limit 20, 10
&lt;/pre&gt;
&lt;/ul&gt;
The query with both LIMIT clause and ORDER BY clause sort the result before limit unlike Oracle so, you need not use subquery.


&lt;h4&gt;PostgresSQL&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Syntax :&lt;/li&gt; 
&lt;pre class="syntax"&gt;
SELECT ~ 
FROM ~ 
WHERE ~ 
ORDER BY ~ 
LIMIT &lt;i&gt;row_count&lt;/i&gt; OFFSET &lt;i&gt;offset&lt;/i&gt;
&lt;/pre&gt;
&lt;li&gt;Example :&lt;/li&gt; 
&lt;pre class="code"&gt;
select product_id, product_name, price, manufacturer
from tb_product
where category_id = 101
order by product_name
limit 10 offset 20
&lt;/pre&gt;
&lt;/ul&gt;
The query with both LIMIT/OFFSET clause and ORDER BY clause sort the result before limit unlike Oracle so, you need not use subquery.


&lt;h4&gt;Informix&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Syntax :&lt;/li&gt; 
&lt;pre class="syntax"&gt;
SELECT SKIP &lt;i&gt;offset&lt;/i&gt; FIRST &lt;i&gt;row_count&lt;/i&gt; &lt;i&gt;selection_list&lt;/i&gt;
FORM ~
WHERE ~
ORDER BY ~
&lt;/pre&gt;
&lt;/ul&gt;

&lt;h4&gt;Readings&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a target="_blank" href=""&gt;Limiting result rows of &lt;code&gt;SELECT&lt;/code&gt; (from Wikipedia)&lt;/a&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/8559058673267774097-4234075508985674556?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/4234075508985674556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2008/11/partial-retrieval-of-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4234075508985674556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4234075508985674556'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2008/11/partial-retrieval-of-data.html' title='Paginated Query'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2833367717923315156</id><published>2008-09-24T00:53:00.006+09:00</published><updated>2009-01-29T02:20:44.495+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SQL Server'/><title type='text'>UNIQUE constraint of Microsoft SQL Server and CHECK constraint of MySQL</title><content type='html'>Micsoft SQL Server allows only one null value for the column having UNIQUE constraint, as with any other(non-null) value.  This is quiet different from Oracle.
&lt;br/&gt;&lt;br/&gt;
MySQL provides CHECK contraint syntax in its SQL, but it doesn't really check the contraint in run-time, at leat as of version 5.0. The syntax is for compatibility of the SQL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-2833367717923315156?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2833367717923315156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2008/09/unique-constraint-of-microsoft-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2833367717923315156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2833367717923315156'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2008/09/unique-constraint-of-microsoft-sql.html' title='UNIQUE constraint of Microsoft SQL Server and CHECK constraint of MySQL'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-5544343988486558855</id><published>2008-09-22T15:10:00.012+09:00</published><updated>2009-01-29T02:21:27.580+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Maximum Length of VARCHAR Type in Major DBMS</title><content type='html'>&lt;ul&gt;
&lt;li&gt;Oracle 8 ~ 10g : 4,000 Byte&lt;/li&gt;
&lt;li&gt;Microsoft SQL Server : 8,000 Byte (not sure)&lt;/li&gt;
&lt;li&gt;MySQL 5.0.3 before : 255 Byte&lt;/li&gt;
&lt;li&gt;MySQL 5.0.3 or higher : 65,535 Byte&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/8559058673267774097-5544343988486558855?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/5544343988486558855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2008/09/maximum-length-of-varchar-type-in-major.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5544343988486558855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/5544343988486558855'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2008/09/maximum-length-of-varchar-type-in-major.html' title='Maximum Length of VARCHAR Type in Major DBMS'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-4993665656604676086</id><published>2008-09-22T14:47:00.005+09:00</published><updated>2009-01-29T02:23:26.797+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SQL Server'/><title type='text'>Default TCP/IP Port of Microsoft SQL Server 2005 Express</title><content type='html'>After Install, the default settings for Microsoft SQL Server 2005 Express are different from those which are expected in previous versions.
&lt;ul&gt;
&lt;li&gt;TCP/IP  is not enabled for the Server&lt;/li&gt;
&lt;li&gt;The default TCP port is not 1433 (which is default previous versions)&lt;/li&gt;
&lt;/ul&gt;
So, if you would make JDBC connections from your applications, you should setup followings first.
&lt;ul&gt;
&lt;li&gt;Enable TCP/IP for the serve : &lt;br/&gt;
Load &lt;span style="font-weight: bold; font-style: italic;"&gt;SQL Server Configuration Manager&lt;/span&gt;, in &lt;span style="font-weight: bold; font-style: italic;"&gt;SQL Server 2005 Network Configuration&lt;/span&gt;/&lt;span style="font-weight: bold; font-style: italic;"&gt;Protocols for SQLEXRPRESS&lt;/span&gt; dialog, make enable TCP/IP (SQLEXPRESS is instance name of SQL Server, so is dependent on your installation)
&lt;/li&gt;
&lt;li&gt;Check the TCP port of your server : &lt;br/&gt;
In above&lt;span style="font-weight: bold; font-style: italic;"&gt; SQL Server 2005 Network Configuration&lt;/span&gt;/&lt;span style="font-weight: bold; font-style: italic;"&gt;Protocols for SQLEXRPRESS&lt;/span&gt; dialog, double click TCP/IP item. At the loaded dialog, seek into &lt;span style="font-weight: bold; font-style: italic;"&gt;IP Addresses&lt;/span&gt; tab, &lt;span style="font-weight: bold; font-style: italic;"&gt;IP All&lt;/span&gt; section, and &lt;span style="font-weight: bold; font-style: italic;"&gt;TCP Dynamic Ports&lt;/span&gt; and that is TCP port for JDBC connection.&lt;/li&gt;
&lt;/ul&gt;
Those may be same with SQL Server 2005.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-4993665656604676086?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/4993665656604676086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2008/09/default-tcpip-port-of-microsoft-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4993665656604676086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/4993665656604676086'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2008/09/default-tcpip-port-of-microsoft-sql.html' title='Default TCP/IP Port of Microsoft SQL Server 2005 Express'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-9162710118638927530</id><published>2008-09-11T09:05:00.013+09:00</published><updated>2009-01-29T02:24:12.259+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DbUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>DbUnit with Oracle</title><content type='html'>When using DbUnit with Oracle, the followings are recommened to avoid exceptions or something like that.

&lt;ul&gt;
&lt;li&gt;Provide the schema name when creating the database connection.&lt;/li&gt;
&lt;li&gt;Use the OracleDataTypeFactory.&lt;/li&gt;
&lt;li&gt;Disable FEATURE_QUALIFIED_TABLE_NAMES&lt;/li&gt;
&lt;li&gt;Enable FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="code"&gt;
IDatabaseConnection conn = new OracleConnection(ds.getConnection(), "MYSCHEMA");
DatabaseConfig config = conn.getConfig();
config.setFeature(DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, false);
config.setFeature(DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES, true);
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new OracleDataTypeFactory());
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-9162710118638927530?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/9162710118638927530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2008/09/dbunit-with-oracle.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/9162710118638927530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/9162710118638927530'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2008/09/dbunit-with-oracle.html' title='DbUnit with Oracle'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-2929701698697830607</id><published>2008-08-18T23:13:00.004+09:00</published><updated>2009-01-29T02:26:20.255+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='DbUnit'/><title type='text'>Using Keyword with Table Name and DbUnit</title><content type='html'>DbUnit 2.2 doesn't support automatic identifier quotation for auto generated DDLs or DMLs.
&lt;br/&gt;&lt;br/&gt;
So, using with MySQL where table name may be keyword like 'order', 'lower-case-table-names' system variable of MySQL should be set to '0' on Unix or '2' on Windows and FEATURE_QUALIFIED_TABLE_NAMES of DbUnit should be set to 'true'.
&lt;br/&gt;&lt;br/&gt;
Note that 'lower-case-table-names' is not dynamic variable, so it should be set at start-up like using my.ini.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-2929701698697830607?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/2929701698697830607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2008/08/using-keyword-with-table-name-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2929701698697830607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/2929701698697830607'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2008/08/using-keyword-with-table-name-and.html' title='Using Keyword with Table Name and DbUnit'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-9213805087023558140</id><published>2008-08-04T16:22:00.005+09:00</published><updated>2011-04-24T20:00:58.123+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Annotation Based JMX in Spring Framework 2.5</title><content type='html'>In spring framework 2.5, to use annotation based JMX

&lt;ol&gt;
&lt;li&gt;The position of the JMX bean definition in bean config&lt;/li&gt;
&lt;li&gt;The type of proxy&lt;/li&gt;
&lt;/ol&gt;
is important.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-9213805087023558140?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/9213805087023558140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2008/08/annotation-based-jmx-in-spring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/9213805087023558140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/9213805087023558140'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2008/08/annotation-based-jmx-in-spring.html' title='Annotation Based JMX in Spring Framework 2.5'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8559058673267774097.post-6394710338250783418</id><published>2008-08-04T15:59:00.005+09:00</published><updated>2011-11-01T17:42:24.135+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>Blocking Remote Images in Thunderbird 2</title><content type='html'>In Thunderbird 2, the blocking of remote image to protect privacy is active by default. Sometimes this could be annoying.  To change this behavior, you should use "advanced configuration" which is located at "General" tab of "Advanced" section in option dialog.  At that dialog,

&lt;ol&gt;
&lt;li&gt;Click "Config Edit..." button, then a new dailog would pop up.&lt;/li&gt;
&lt;li&gt;Fill in "remote" in "Filter" textbox and you could see "mailnews.message_display.disable_remote_image" preference which is set to true.&lt;/li&gt;
&lt;li&gt;Double click the above preference, and it would change to false.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8559058673267774097-6394710338250783418?l=3rdstage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://3rdstage.blogspot.com/feeds/6394710338250783418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://3rdstage.blogspot.com/2008/08/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6394710338250783418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8559058673267774097/posts/default/6394710338250783418'/><link rel='alternate' type='text/html' href='http://3rdstage.blogspot.com/2008/08/blog-post.html' title='Blocking Remote Images in Thunderbird 2'/><author><name>Sangmoon Oh</name><uri>http://www.blogger.com/profile/12472225748031758335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
