XML ファイルは、SOAP 要求 (いくつかの構成値) を介して一時的な値を格納するための一時的なキャッシュとして使用されています。複数のスレッドがこのファイルを使用するため、既に更新されている場合はファイルに書き込みたくありません。コードの最初のパスでは、キャッシュが null を返し、その後ファイルが更新されることを期待しています。ただし、InvocationTargetException
finally ブロックを終了するときにエラーが発生し、プログラムが失敗します。CacheValues
nullオブジェクトが例外をスローする理由がわかりません。
public class TempCache{
private final ReadWriteLock myLock = new ReentrantReadWriteLock();
private final MyCache cache = XmlCache.getInstance(); //creates singleton
//instance, but doesn't
//set values upon
//initialization...
public CacheValues getCache(){
Lock lock = myLock.readLock();
CacheValues cv = null;
try{
lock.lock();
cv = cache.getCacheValues(); //returns null on the first pass...
}finally{
lock.unlock();
} // exception thrown here
if(cv == null){
refreshCache(); //submits SOAP request to set the xml cache values
}
...
}