This issue involves a combination of two problems: the EJB client sending invocations to targets which do not have the module deployed and retries of that invocation which lose their DiscoveryProvider context.
The scenario involves the following:
- a cluster of two nodes, node1 and node2, both nodes started with the bind address set to the unspecified address 0.0.0.0
- a remote outbound connection from node1 to node2, and a remote outbound connection from node2 to node1
- a deployment of two beans deployed on each node: a SLSB EjbNmsRedundancyBean receiving invocations and an @Singleton bean EjbNmsRedundancyBeanClient acting as an EJB client, where the client invokes on the EjbNmsRedundancyBean on the other server across the remote outbound connection
- both deployments embed the node name as a distinct name for the deployment of EjbNmsRedundancyBean: so on node1, the deployment is called server2server/server2server-ejb/node1/EjbNmsRedundancyBean, and, on node2, the deployment is called server2server/server2server-ejb/node2/EjbNmsRedundancyBean
What should happen is that when the servers are started, the two servers exchange invocations with each other.
What is happening is that one or both of the servers is throwing NoSuchEJBExceptions after a period of time, and the period of time can vary non-deterministically. This occurs in the absence of node failures.