Reputation: 191
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
Reputation: 262
we define implementation for MySingleton interface by MongoDB
public class implements MySingleton
{
}
Upvotes: 1
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