DistributedReadOnlyBeanServiceImplpublic class DistributedReadOnlyBeanServiceImpl extends Object implements DistributedReadOnlyBeanService
Fields Summary |
---|
private static final Logger | _logger | private ConcurrentHashMap | refreshHandlers | private DistributedReadOnlyBeanNotifier | robNotifier |
Methods Summary |
---|
public void | addReadOnlyBeanRefreshEventHandler(long ejbID, java.lang.ClassLoader loader, ReadOnlyBeanRefreshEventHandler handler)
refreshHandlers.put(ejbID, new ReadOnlyBeanRefreshHandlerInfo(
ejbID, loader, handler));
_logger.log(Level.INFO, "Registered ReadOnlyBeanRefreshEventHandler: "
+ ejbID + "; " + handler);
| public void | handleRefreshAllRequest(long ejbID)
refreshRequestReceived(true, ejbID, null);
| public void | handleRefreshRequest(long ejbID, byte[] pkData)
refreshRequestReceived(false, ejbID, pkData);
| public void | notifyRefresh(long ejbID, java.lang.Object pk)
if (robNotifier != null) {
byte[] pkData = null;
ByteArrayOutputStream bos = null;
ObjectOutputStream oos = null;
try {
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
oos.writeObject(pk);
oos.flush();
bos.flush();
pkData = bos.toByteArray();
robNotifier.notifyRefresh(ejbID, pkData);
} catch (Exception ex) {
_logger.log(Level.WARNING, "Error during notifyRefresh", ex);
} finally {
if (oos != null) {
try { oos.close(); } catch(IOException ioEx) {};
}
if (bos != null) {
try { bos.close(); } catch(IOException ioEx) {};
}
}
} else {
if (_logger.isLoggable(Level.FINE)) {
_logger.log(Level.FINE,
"DistributedReadOnlyBeanService ignoring request "
+ "for notifyRefresh: " + ejbID);
}
}
| public void | notifyRefreshAll(long ejbID)
if (robNotifier != null) {
robNotifier.notifyRefreshAll(ejbID);
} else {
if (_logger.isLoggable(Level.FINE)) {
_logger.log(Level.FINE,
"DistributedReadOnlyBeanService ignoring request "
+ "for notifyRefreshAll: " + ejbID);
}
}
| private void | refreshRequestReceived(boolean refreshAll, long ejbID, byte[] pkData)
final ReadOnlyBeanRefreshHandlerInfo info = refreshHandlers.get(ejbID);
if (info == null) {
//TODO: Log something
return;
}
final Thread currentThread = Thread.currentThread();
final ClassLoader prevClassLoader = currentThread.getContextClassLoader();
try {
if(System.getSecurityManager() == null) {
currentThread.setContextClassLoader(info.loader);
} else {
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction() {
public java.lang.Object run() {
currentThread.setContextClassLoader(info.loader);
return null;
}
});
}
if (! refreshAll) {
ByteArrayInputStream bis = null;
ObjectInputStream ois = null;
Serializable pk = null;
try {
bis = new ByteArrayInputStream(pkData);
ois = new ObjectInputStream(bis);
pk = (Serializable) ois.readObject();
} catch (IOException ioEx) {
_logger.log(Level.WARNING, "Error during refresh", ioEx);
} catch (ClassNotFoundException cnfEx) {
_logger.log(Level.WARNING, "Error during refresh", cnfEx);
} finally {
if (ois != null) {
try {
ois.close();
} catch(IOException ioEx) {
_logger.log(Level.WARNING,
"Error while closing object stream", ioEx);
};
}
if (bis != null) {
try {
bis.close();
} catch(IOException ioEx) {
_logger.log(Level.WARNING,
"Error while closing byte stream", ioEx);
};
}
}
if (pk != null) {
info.handler.handleRefreshRequest(pk);
}
} else {
info.handler.handleRefreshAllRequest();
}
} catch (Exception ex) {
_logger.log(Level.WARNING, "Error during refresh", ex);
} finally {
if(System.getSecurityManager() == null) {
currentThread.setContextClassLoader(prevClassLoader);
} else {
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction() {
public java.lang.Object run() {
currentThread.setContextClassLoader(prevClassLoader);
return null;
}
});
}
}
| public void | removeReadOnlyBeanRefreshEventHandler(long ejbID)
refreshHandlers.remove(ejbID);
| public void | setDistributedReadOnlyBeanNotifier(DistributedReadOnlyBeanNotifier notifier)
this.robNotifier = notifier;
_logger.log(Level.INFO, "Registered ReadOnlyBeanNotifier: "
+ notifier);
|
|