sangita
sangita

Reputation: 191

Creating singleton class for mongo

I am trying to write singleton for java mongo driver. I have tried this piece of code but it is not correct. Help me to correct my logic.

public class MySingleton extends Mongo{
    private static MySingleton instance = null;
    private static Mongo mongo = null;

    protected MySingleton () 
          throws UnknownHostException,UnsupportedOperationException{


    }

    protected MySingleton (String ip, int port) 
               throws UnknownHostException,UnsupportedOperationException{

        mongo = new Mongo(ip,port);
        instance = (MySingleton) mongo;
    }

    public static synchronized MySingleton getInstance(String ip, int port) 
                     throws UnknownHostException{

        if (instance == null){
          instance =  new MySingleton(ip,port);
        }

         return instance;
    }
}

I am getting ClassCast exception for instance = (MySingleton) mongo;, which is obviously incorrect.

I am already aware of MongoClient. Holder.singleton(). connect() method but it does not solve my issue. So I am looking to create my own singleton class.

Upvotes: 3

Views: 3173

Answers (2)

Bipil Raut
Bipil Raut

Reputation: 262

we define implementation for MySingleton interface by MongoDB

public class  implements MySingleton
{

   
}

Upvotes: 1

Atilla Ozgur
Atilla Ozgur

Reputation: 14721

Why do you hold another mongo instance while you are already extending it.

public class MySingleton extends Mongo{
    private static MySingleton instance = null;

    protected MySingleton () 
          throws UnknownHostException,UnsupportedOperationException{


    }

    protected MySingleton (String ip, int port) 
               throws UnknownHostException,UnsupportedOperationException{
        super(ip, port);
    }

    public static synchronized MySingleton getInstance(String ip, int port) 
                     throws UnknownHostException{

        if (instance == null){
          instance =  new MySingleton(ip,port);
        }

         return instance;
    }
}

If you need a mongo instance, you can use following way.

 Mongo m = MySingleton.getInstance(ip,port);

I also suggest to read following singleton article so that if you may use its Example 7. A simple singleton.

public class Singleton {
   public final static Singleton INSTANCE = new Singleton();
   private Singleton() {
         // Exists only to defeat instantiation.
      }
}   

Upvotes: 2

Related Questions