Description
SimpleServiceManager.stop() not processing ResourceAdapters on a standalone remote stop due an oversight.
Current implementation calls containerSystem.getJNDIContext().listBindings("openejb/resourceAdapters"); and then hides the naming exception.
The following snippet resolves this issue, and also checks for instances of ResourceAdapter.
try {
ContainerSystem containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
NamingEnumeration<Binding> namingEnumeration = null;
try
{ namingEnumeration = containerSystem.getJNDIContext().listBindings("openejb/Resource"); }catch (NamingException ignored)
{ logger.debug("No resource adapters were created"); }if (namingEnumeration != null) {
while (namingEnumeration.hasMoreElements()) {
Binding binding = namingEnumeration.nextElement();
Object object = binding.getObject();
if (object instanceof ResourceAdapter) {
ResourceAdapter resourceAdapter = (ResourceAdapter) object;
logger.debug("Stopping ResourceAdapter: " + binding.getName());
try
{ resourceAdapter.stop(); }catch (Exception e)
{ logger.fatal("ResourceAdapter Shutdown Failed: " + binding.getName(), e); } }
}
} else
{ logger.warning("No resources were found"); }} catch (Throwable e)
{ logger.fatal("Unable to get ResourceAdapters from JNDI. Stop must be called on them for proper vm shutdown.", e); }