]
Flavia Rainone closed WFLY-11664.
---------------------------------
Resolution: Out of Date
[~istraka] I just checked that the error is fixed in wildfly master. It cannot be
reproduced with the code there. Automatically, this means that the bug will no longer be
present in the next version of the server
EJB client 4 is unable to discover EJB after WildFly crash during
previous call and reboot
------------------------------------------------------------------------------------------
Key: WFLY-11664
URL:
https://issues.jboss.org/browse/WFLY-11664
Project: WildFly
Issue Type: Bug
Components: EJB, Remoting
Affects Versions: 14.0.0.Final, 15.0.0.Final
Reporter: Ivan Straka
Assignee: Flavia Rainone
Priority: Blocker
Attachments: reproducer.zip
Issue is not valid for 7.2.0.CD12 (upstream client: 12.0.0.Final) therefore we consider
this as a blocker.
Lets have two WildFly servers and same EJB on both. They have nothing to do with each
other. And the client app that call beans on them.
*Scenario*
# Client invokes _hello_ method on the first server which crash during the call.
Exception is consumed.
# Client calls successfully _hello_ method on the second one.
# Now, the first server is started again and then the client (same thread) try to call
_hello_ on the first one. The call should be successful but the client is unable to
discover bean.
{code:java}Exception in thread "main" java.lang.RuntimeException:
javax.ejb.NoSuchEJBException: EJBCLIENT000079: Unable to discover destination for request
for EJB StatelessEJBLocator for "/server-1/HelloBean", view is interface
ejb.HelloBeanRemote, affinity is None
at client.Client.call(Client.java:41)
at client.Client.main(Client.java:21)
Caused by: javax.ejb.NoSuchEJBException: EJBCLIENT000079: Unable to discover destination
for request for EJB StatelessEJBLocator for "/server-1/HelloBean", view is
interface ejb.HelloBeanRemote, affinity is None
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:592)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at
org.jboss.ejb.protocol.remote.RemotingEJBClientInterceptor.handleInvocationResult(RemotingEJBClientInterceptor.java:56)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:594)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at
org.jboss.ejb.client.TransactionPostDiscoveryInterceptor.handleInvocationResult(TransactionPostDiscoveryInterceptor.java:133)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:594)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at
org.jboss.ejb.client.DiscoveryEJBClientInterceptor.handleInvocationResult(DiscoveryEJBClientInterceptor.java:115)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:594)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at
org.jboss.ejb.client.NamingEJBClientInterceptor.handleInvocationResult(NamingEJBClientInterceptor.java:79)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:594)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at
org.jboss.ejb.client.TransactionInterceptor.handleInvocationResult(TransactionInterceptor.java:172)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:594)
at
org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at
org.jboss.ejb.client.EJBClientInvocationContext.awaitResponse(EJBClientInvocationContext.java:938)
at
org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:177)
at
org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:112)
at com.sun.proxy.$Proxy0.hello(Unknown Source)
at client.Client.call(Client.java:35)
... 1 more
{code}
I hit this issue with 15.0.0.Final, 14.0.0.Final but not with 12.0.0.Final.
If client try to invoke _hello_ on the first server before it reboots (exception is
consumed), there is no problem after.
*Client side*
{code:java}
public static void main(String[] args)
throws Exception {
call("server-2", true);
call("server-1", true);
for (int i = 30; i > 0; i--) {
System.out.println(i);
Thread.sleep(1000);
}
call("server-1", false);
}
public static Properties getCtxProperties() {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"org.wildfly.naming.client.WildFlyInitialContextFactory");
return props;
}
public static void call(String container, boolean exceptedFailure) {
try {
InitialContext ctx = new InitialContext(getCtxProperties());
String lookupName = "ejb:/" + container +
"/HelloBean!ejb.HelloBeanRemote";
HelloBeanRemote bean = (HelloBeanRemote) ctx.lookup(lookupName);
System.out.println(bean.hello());
} catch (Exception e) {
if (exceptedFailure) {
System.out.println("EXPECTED FAILURE");
e.printStackTrace();
} else {
throw new RuntimeException(e);
}
}
}
{code}
*Server side*
{code:java}
@Stateless
@Remote(HelloBeanRemote.class)
public class HelloBean {
private static Logger log = Logger.getLogger(HelloBean.class);
public String hello() throws RemoteException {
log.info("hello called with message");
return "Hello there";
}
}
{code}