What is Shankh???


Shankh is a synonym for Conch Shell.So why that name for this blog?? My grandma used to say "When you put the conch shell to your ear, you hear the sound of ocean". Ignoring all scientific explanations to it, i would like this blog to bring you the sound of vast ocean of technology. Take a look

Some Random quotes


Innovation distinguishes between a leader and a follower. -Steve Jobs

It is not that i am smarter than others, i just persist with problems longer

Maven Commands Reference Mini Guide

In maven , we have several commands to remember and i was thinking of having a page with simple command reference so that i can have a quick look whenever needed. I have compiled a list of mostly used commands and some settings and useful links. Now publishing it so that it could be useful to others too . Feel free to add more commands to the comments section.

1. Compile

 mvn compile

2. Compile (offline)

 mvn -o compile

will save you a lot of time

3. Install the generated output to the respective repository

mvn install

4. Clean Target Directory

mvn clean

5. Package as jar or war

mvn package

6. Generate Eclipse project descriptors

mvn eclipse:eclipse

7. Run unit tests

mvn test

8. Run unit tests and print the output to console rather than to file

mvn -Dsurefire.useFile=false test

9. Run individual test

mvn test –Dtest=org.shankh.mavenTest

10. Package without running tests

mvn package -Dmaven.test.skip

11. Install without Running Tests

mvn install -Dmaven.test.skip

12. To download source code into your maven repo:

mvn eclipse:clean eclipse:eclipse –DdownloadSources=true

13. Create a new project

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app

Comment : Instead of ‘generate’ i wrote ‘create’ initially, but as simonz correctly pointed out, mvn archetype:create is now deprecated. so use mvn archetype:generate instead.

14. Create a Web Application

mvn archetype:generate
        -DarchetypeGroupId=org.apache.maven.archetypes
        -DarchetypeArtifactId=maven-archetype-webapp
        -DgroupId=com.mycompany
        -DartifactId=my-app

15. Start embedded Jetty

mvn jetty:run

16. Deploys a WAR to embedded instance of Jetty and starts it

mvn jetty:run-war

17. Specify Java Build version

<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.5</source>
      <target>1.5</target>
    </configuration>
  </plugin>
 </plugins>
</build>

18. Generate site for a single project

mvn site

19. Generate Javadoc

mvn javadoc:javadoc

20. Set Maven_opts System environment variable (will save you from out of memory error)

MAVEN_OPTS=”-Xmx512m -Xms256m -XX:MaxPermSize=128m”

21. Setting M2 variable in eclipse (informing of repository location

Goto Window -> Preferences -> Java -> build path -> classpath variable -> New
Name: M2_REPO
Path:
C:\Users\my_user_name\.m2\repository  (In vista)
C:\Documents And Settings\my_user_name\.m2\repository  (In XP)
~/.m2/repository (in Linus/ unix flavours)

22. Links

1. Settings.xml sample: http://maven.apache.org/maven-settings/settings.html

2. Maven Download: http://maven.apache.org/download.html

3. M2 eclipse download: http://m2eclipse.codehaus.org

4. M2 eclipse update site: http://m2eclipse.sonatype.org/update

5. Cargo: http://cargo.codehaus.org/

6. Jetty: http://jetty.mortbay.com/jetty/

  • Share/Bookmark

Some fun with Boolean.getBoolean

What will be the output of this code snippet ?

public class BooleanFun {
	public static void main(String[] args) {
		Boolean status = Boolean.getBoolean("true");
		System.out.println("First Case:"+status);
	}
}

You may think that it will obviously print First Case:true.. But it is not that straightforward. The output is following

First Case:false

Well .. How did this happen? Boolean.getBoolean property does something else than what its name denotes. According to its Javadoc
” Boolean.getBoolean Returns true if and only if the system property named by the argument exists and is equal to the string ‘true’. (Beginning with version 1.0.2 of the JavaTM platform, the test of this string is case insensitive.) A system property is accessible through getProperty, a method defined by the System class. ”

See the following code snippet to understand how it works..

public class BooleanFun {
	public static void main(String[] args) {
		Boolean status = Boolean.getBoolean("true");
		System.out.println("First Case:"+status);

         System.setProperty("bfun", "true");
		 String bfunString = System.getProperty("bfun");
		 System.out.println("System Property bfun value:"+bfunString);
		 status = Boolean.getBoolean("bfun");
		System.out.println("Second Case:"+status);

		System.setProperty("bfun2", "random");
		String bfun2String = System.getProperty("bfun2");
		System.out.println("System Property bfun2 value:"+bfun2String);
		status = Boolean.getBoolean("bfun2");
		System.out.println("Third Case:"+status);
	}
}

Output

First Case:false
System Property bfun value:true
Second Case:true
System Property bfun2 value:random
Third Case:false

So Boolean.getBoolean will check whether the System property of a given name exists and also whether its value is “true”. In only this case will it return true..

Hopefully this information will help somebody trying to figure out why their program always returns false for Boolean.getBoolean

  • Share/Bookmark

Java Concurrency and volatile

I came across an interesting behaviour of threads in James Roper’s Blog (http://jazzy.id.au/pebble/2009/04/24/java_concurrency_and_volatile.html).  Tested it on Vista 64 bit machine and without a volatile keyboard, in my machine also the code goes into an infinite loop.


public class ThreadExperiement implements Runnable {

	private volatile String str;
    void setStr(String str)
    {
        this.str = str;
    }
    public void run()
    {
        while (str == null){}
        System.out.println(str);

    }
    public static void main(String[] args) throws Exception
    {
    	ThreadExperiement threadExp = new ThreadExperiement();
        new Thread(threadExp).start();
        Thread.sleep(1000);
        threadExp.setStr("Hello world!!");
    }

}

Put a print statement inside the while loop and it starts working. Strange , isn’t it?

Is it because of byte code optimisation which detects that there is nothing to do inside the loop ?

  • Share/Bookmark

Jaxb: Printing Xml with proper formatting

Ever wondered when we print xml, instead of printing it in single line can’t we print with proper formatting and indentation.  If you are using Jaxb then there is a  nice little trick in  to achieve that.


JAXBContext jc = JAXBContext.newInstance( "MyClass.class" );

Marshaller marshaller = jc.createMarshaller();

marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );

marshaller.marshal( <object_to_marshal>, System.out );

  • Share/Bookmark

Configure Squirrel to connect to Firebird Database

I was looking for some tutorial about configuring Squirrel SQL (http://squirrel-sql.sourceforge.net/) to connect to firebird database and unfortunately i couldn’t find one . So when i finally managed to connect, i thought of publishing the steps in my log so that it could be useful to some one else.

Configuring Squirrel Sql to connect to firebird was much easier than i thought. You need to go to firebird website and  look for JCA-JDBC Driver downloads. At the time of writing this blog, the latest release was 2.1.6 (http://prdownloads.sourceforge.net/firebird/Jaybird-2.1.6JDK_1.6.zip?download). Download it and unzip it. There will be a jar file called Jaybird-2.1.6-full.jar. Copy this file and save it in your Squirrel lib directory (It will be something like C:/Program Files/Squirrel SQL/ lib).

Now start Squirrel and you will see the jaybird driver listed in the drivers window (with a tick sign).  Now click on the menu and click add. In the Database driver section put Jaybird Driver and provide the database url in the format jdbc:firebirdsql:localhost/3050:/firebird/test.gdb Now give your username and password . Hooray !!! you are finally connected to firebird database…

  • Share/Bookmark