仮想センターに接続してデータを取得する必要があるシナリオがあります。同時アクセスの問題があるため、2つのスレッドが同時にVCにアクセスできないようにシングルトンクラスを実装しました。私のコードは次のとおりです。
public class Connector {
private static Connector instance ;
private Connector(String urlStr, String username, String password) {
connect(urlStr, username, password);
}
public static synchronized Connector getInstance(String urlStr, String username, String password) {
if (instance == null){
instance = new Connector(urlStr,username,password);
System.out.println("creating instance");
}
return instance ;
}
public void connect(String urlStr, String username, String password) {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
try {
//code to connect to VC
}
} catch (RuntimeException e) {
connectException = e;
} finally {
Thread.currentThread().setContextClassLoader(cl);
}
}
public void disconnect() throws RuntimeFault, RemoteException {
//code for disconnect
}
}
}
私はこれを別のクラスから次のように呼び出しました。
Connector c = Connector.getInstance(dburl, dbuser, dbpass);
c.connect(dburl, dbuser, dbpass);
//code for getting data
c.disconnect();
これで、仮想センターからデータを取得するための2つの同時要求がある場合、そのうちの1つが「セッションが認証されていません」と言って失敗します。問題に対処するためのより良い方法で私たちを助けてくれませんか。また、同じインスタンスが常に使用されるため、仮想センターが異なるかどうかをどのように区別できますか。