Thursday, September 22, 2005

[Tips ] – “On the fly” deployment under NetBeans

Here's my problem, I have three set of application configuration files (e.g. project properties, hibernate configuration, log4j properties, and others) setup for three different deployment environments, there are:
-1. Production, my application will be connected to client's Oracle database, and log level set to warning.
-2. Local, HSQLDB running on my local machine will be use, log level set to debug
-3. Test, for unit testing purpose

I am a lazy person, I wants my build script to prompt me which mode I would like to deploy, prior it compile, package and deploy my application. Listed below are the steps to how I achieve that:
- Firstly, I create a folder name "cfg" under project project, I then create “production”, “local”, and “test” folders under the cfg folder.
- Put properties files in to respective folder, shown in figure below:


- Open build.xml and add in new target, called “-pre-compile”, which will prompt user deployment mode, and copy respective properties to src directory prior any compilation, as shown in code below:


    <target name="-pre-compile">
            <input message="Please enter deploy mode? (production, local, test)->"
                    addproperty="mode"
                    defaultvalue="local"/>
            <echo message="Copying application configuration file for ${mode} mode"/>
            <copy todir="${src.dir}" overwrite="true">
                <fileset dir="${basedir}/cfg/${mode}"/>
            </copy>
    </target>

- Clean and Build my project, surprise, surprise, Netbean actually popup a nice dialog ask me to enter deploy mode, as shown in figure below:




- That's very nice, but I am lazy person, remember. I don't want to type "production", "local", or "test" each time I want to deploy my application. So, I modified ant script a little bit by inserting a validargs element at the input taks, as show in code below:

    <target name="-pre-compile">
            <input message="Please enter deploy mode? (production, local, test)->"
                    validargs="local,production,test"
                    addproperty="mode"
                    defaultvalue="local"/>
            <echo message="Copying application configuration file for ${mode} mode"/>
            <copy todir="${src.dir}" overwrite="true">
                <fileset dir="${basedir}/cfg/${mode}"/>
            </copy>
    </target>

- Clean and Build my project, Netbean surprise me again, by showing me a popup with a pulldown showing available delopyment modes.



Now, that what I called hidden Easter egg in Netbean..Enjoy!



No comments: