Fixing listener is not enough. Old and lastest code has this for references to ServerPlatform.launchContainerRunnable, which WebSpherePlatform do not override:
CommandPropagator:
public void asynchronousPropagateCommand() {
// The async logic is in the run() method
rcm.logDebug("async_propagation", (Object[])null);
this.rcm.getServerPlatform().launchContainerRunnable(this);
}
public void propagateCommand(RemoteConnection conn) {
Object[] arguments = { command.getClass().getName(), conn.getServiceId() };
rcm.logDebug("propagate_command_to", arguments);
try {
// The result will be null on success, and an exception string on failure
Object result = conn.executeCommand(command);
if (result != null) {
// An error occurred executing the remote command
handleExceptionFromRemoteExecution(conn, (String)result);
}
} catch (CommunicationException comEx) {
// We got a comms exception.
this.handleCommunicationException(conn, comEx);
}
}
JMSTopicRemoteConnection:
...
DiscoveryManager:
public void startDiscovery() {
if (rcm.isCommandProcessorASession()) {
rcm.getCommandProcessor().processCommand(new ProfileDiscoveryStartedCommand());
}
// Only start if we are currently stopped
if (this.isDiscoveryStopped()) {
this.rcm.getServerPlatform().launchContainerRunnable(this);
}
}
JMSTopicTransportManager:
public Hashtable getConnectionsToExternalServicesForCommandPropagation() {
if(this.getConnectionsToExternalServices().isEmpty() && !this.rcm.isStopped()) {
this.createExternalConnection();
if(this.localConnection == null) {
// It's a good time to create localConnection,
// in a new thread - to return externalConnections promptly.
this.rcm.getServerPlatform().launchContainerRunnable(new Runnable() {
public void run() {
try {
createLocalConnection();
} catch (RemoteCommandManagerException ex) {
// Ignore exception - user had a chance to handle it in createLocalConnection method:
// for instance to change host url and create a new local connection.
}
}
});
}
}
return super.getConnectionsToExternalServicesForCommandPropagation();
}