Skip to content

Commit

Permalink
Do not process EJB invocations until the server is no longer starting
Browse files Browse the repository at this point in the history
  • Loading branch information
dmlloyd committed Jan 25, 2017
1 parent eef933f commit afc0539
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
Expand Up @@ -21,6 +21,11 @@
*/
package org.jboss.as.ejb3.remote;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import org.jboss.as.controller.ControlledProcessState;
import org.jboss.as.controller.ControlledProcessStateService;
import org.jboss.as.remoting.RemotingConnectorBindingInfoService;
import org.jboss.ejb.protocol.remote.RemoteEJBService;
import org.jboss.ejb.server.Association;
Expand Down Expand Up @@ -51,6 +56,7 @@ public class EJBRemoteConnectorService implements Service<EJBRemoteConnectorServ
private final InjectedValue<RemotingConnectorBindingInfoService.RemotingConnectorInfo> remotingConnectorInfoInjectedValue = new InjectedValue<>();
private final InjectedValue<Association> associationInjectedValue = new InjectedValue<>();
private final InjectedValue<RemotingTransactionService> remotingTransactionServiceInjectedValue = new InjectedValue<>();
private final InjectedValue<ControlledProcessStateService> controlledProcessStateServiceInjectedValue = new InjectedValue<>();
private volatile Registration registration;
private final OptionMap channelCreationOptions;

Expand All @@ -68,6 +74,28 @@ public void start(StartContext context) throws StartException {
associationInjectedValue.getValue(),
remotingTransactionServiceInjectedValue.getValue()
);
final ControlledProcessStateService processStateService = controlledProcessStateServiceInjectedValue.getValue();
if (processStateService.getCurrentState() == ControlledProcessState.State.STARTING) {
final PropertyChangeListener listener = new PropertyChangeListener() {
public void propertyChange(final PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("currentState") && evt.getOldValue() == ControlledProcessState.State.STARTING) {
remoteEJBService.serverUp();
// can't use a lambda because of this line...
processStateService.removePropertyChangeListener(this);
}
}
};
processStateService.addPropertyChangeListener(listener);
// this is actually racy, so we have to double-check the state afterwards just to be sure it didn't transition before we got here.
if (processStateService.getCurrentState() != ControlledProcessState.State.STARTING) {
// this method is idempotent so it's OK if the listener got fired
remoteEJBService.serverUp();
// this one too
processStateService.removePropertyChangeListener(listener);
}
} else {
remoteEJBService.serverUp();
}

// Register an EJB channel open listener
OpenListener channelOpenListener = remoteEJBService.getOpenListener();
Expand Down Expand Up @@ -107,4 +135,8 @@ public InjectedValue<RemotingConnectorBindingInfoService.RemotingConnectorInfo>
public InjectedValue<RemotingTransactionService> getRemotingTransactionServiceInjector() {
return remotingTransactionServiceInjectedValue;
}

public InjectedValue<ControlledProcessStateService> getControlledProcessStateServiceInjector() {
return controlledProcessStateServiceInjectedValue;
}
}
Expand Up @@ -25,6 +25,7 @@

import org.jboss.as.clustering.controller.CapabilityServiceBuilder;
import org.jboss.as.controller.AbstractAddStepHandler;
import org.jboss.as.controller.ControlledProcessStateService;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.PathAddress;
Expand Down Expand Up @@ -130,6 +131,7 @@ public void uninject() {
}
})
.addDependency(TxnServices.JBOSS_TXN_REMOTE_TRANSACTION_SERVICE, RemotingTransactionService.class, ejbRemoteConnectorService.getRemotingTransactionServiceInjector())
.addDependency(ControlledProcessStateService.SERVICE_NAME, ControlledProcessStateService.class, ejbRemoteConnectorService.getControlledProcessStateServiceInjector())
.setInitialMode(ServiceController.Mode.ACTIVE);
builder.install();
}
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -157,7 +157,7 @@
<version.org.jboss.activemq.artemis.integration>1.0.2</version.org.jboss.activemq.artemis.integration>
<version.org.jboss.common.jboss-common-beans>2.0.0.Final</version.org.jboss.common.jboss-common-beans>
<version.org.jboss.hal.release-stream>2.9.0.Final</version.org.jboss.hal.release-stream>
<version.org.jboss.ejb-client>4.0.0.Beta8</version.org.jboss.ejb-client>
<version.org.jboss.ejb-client>4.0.0.Beta9</version.org.jboss.ejb-client>
<version.org.jboss.ejb3.ext-api>2.2.0.Final</version.org.jboss.ejb3.ext-api>
<version.org.jboss.genericjms>2.0.0.Alpha1</version.org.jboss.genericjms>
<version.org.jboss.iiop-client>1.0.0.Final</version.org.jboss.iiop-client>
Expand Down

0 comments on commit afc0539

Please sign in to comment.