}
return null; // not found
}
private void selectAndInitRouter() {
SipApplicationRouter newRouter = chooseApplicationRouter();
if (newRouter == runtimeRouter) {
if (m_logger.isLoggable(Level.FINEST)){
m_logger.log(Level.FINEST, "No change in router. Keep using {0}", new Object[]{newRouter.getClass().getName()});
}
// nothing changed
return;
} else if (newRouter == null) {
// not allowed
// do not change the runtimeRouter...
if (m_logger.isLoggable(Level.FINEST)){
m_logger.log(Level.FINEST, "Not changing runtime router", new Object[]{runtimeRouter.getClass().getName()});
}
return;
} else {
// new non-null router selected
if (runtimeRouter != null) {
setRouterContext();
try {
// allow the currently active runtime application router to cleanup
// its resources
if (runtimeRouter != null){
if (m_logger.isLoggable(Level.FINE)){
m_logger.log(Level.FINE,
"Overwriting previously active AR: {0} with new AR {1}",
new Object[]{runtimeRouter.getClass().getName(), newRouter.getClass().getName()});
}
runtimeRouter.destroy();
}
} finally {
resetRouterContext();
}
}
if (m_logger.isLoggable(Level.FINEST)){
m_logger.log(Level.FINEST,
"setting new AR {0}",
new Object[]{newRouter.getClass().getName()});
}
runtimeRouter = newRouter;
setRouterContext();
try {
// initialize the new application router with the currently
// active list of applications.
// XXX or other way around?
if ((newRouter == customDeployedRouter) && (customDeployedRouterProperties != null)) {
newRouter.init(customDeployedRouterProperties);
} else {
newRouter.init();
}
newRouter.applicationDeployed(new ArrayList<String>(m_contextMapping.keySet()));
} finally {
resetRouterContext();
}
}