Interview Questions, Tips and Tricks, Tutorial

Singleton in Java

What is Singleton?

Singleton is a class that cannot have more than one instance.
(Source: https://en.wikipedia.org/wiki/Singleton_pattern)

In Java, there are many way to create singleton class, one of the example is:

class SingletonClass {

    private static volatile SingletonClass INSTANCE = null;

    private SingletonClass() {   }

    public SingletonClass getInstance() {
         if (INSTANCE == null) {
            synchronized (SingletonClass.class) {
                 if (INSTANCE == null) {
                    INSTANCE = new SingletonClass();
                 }
            }
         }
         return INSTANCE;
    } 
}

When to use singleton?

Singleton is used when you need system wide “global value” that need to be accessed by many part of systems. Example: Session Value, Logger, Cache, etc

Advertisements
Information Technology, Tips and Tricks

Change JSESSIONID in URL parameter

Having problem with JSESSIONID in URL ?

Well, this is not a bug. When the server received a request from client, it is not sure whether the client support cookie or not. So, it generate both of them in the URL. When it comes back for second time, and the server detects the cookie is present, it will drop JSESSIONID from URL automatically. However, when the cookie is not present, the server will continue to use it.

Having JSESSIONID in URL actually is not bad at all, however it has a few drawbacks:

  • Security Risk

By exposing SESSIONID in the URL, it allows attacker to attack victim and steal some information store in the session

  • SEO

Because SESSIONID is unique, search engine both may not recognise different pages that having unique SESSIONID.

How to solve this?

There are few ways to avoid JSESSIONID in URL

  1. Implementing Servlet Filter which will disable/skip URL based on SESSION ID generation.
  2. Since Servlet 3.0, we can use SessionTrackingMode Enumeration to specify how SessionTracking should be.
    So, in web.xml we just need to add the following:
<session-config>
    <tracking-mode>COOKIE</tracking-mode>
<session-config>

 

So, who said it is difficult and complicated? Happy coding 🙂

Information Technology, Tips and Tricks

Steps to create MySQL datasource in JBoss 7 (not jdbc 4 compliant driver)

  1. Create the directory structure for the MySQL module.
    Example: how to create a module for MySQL driver:

    cd $JBOSS_HOME
    mkdir modules/com/mysql
    mkdir modules/com/mysql/jdbc
    mkdir modules/com/mysql/jdbc/main

  2. Copy the driver(s) jar into the created directory
  3. Create a module.xml file to define dependencies and resources. For our mysql example it looks like this:
    jboss:module:1.0" name="com.mysql.jdbc"
    

    Note: replace the JAR name accordingly with the version that you have in your local machine

  4. Add driver to the standalone.xml
                    <drivers>
                        <driver name="h2" module="com.h2database.h2">
                            <xa-datasource-class>
                                org.h2.jdbcx.JdbcDataSource
                            </xa-datasource-class>
                        </driver>
    		    <driver name="mysql" module="com.mysql.jdbc"> 
    			<driver-class>com.mysql.jdbc.Driver</driver-class>  
    		    </driver>
                    </drivers>
  5. Restart your JBoss
  6. Go to JBoss console http://localhost:8080/console, select “Connector –> DataSources” from menu on the left, and then click button “Add” on the top right corner. Afterwards, follow the steps and you will that “mysql” is now available as driver option.