java.lang.IllegalStateException:EJBCLIENT000025:没有 EJB 接收器可用于处理调用上下文的组合
java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling combination for invocation context
我有一个包含 3 层的应用程序:DB、后端 包含 EJB(运行 在 Wildfly 上单独EJB 容器)和 前端 一个 EJB 客户端(运行 在 Tomcat 上分开)。前端和后端之间的通信由 DTO(数据传输对象)完成。一切正常,直到我在其中一个 DTO 中添加了一个新的地图字段:
public class xxxDTO implements Serializable {
private static final long serialVersionUID = 5811694947383586010L;
// simple fields like String, Integer, etc. go here
private Map<Language, yyyNameDTO> NameDetailsMap;
.....
}
我添加映射字段后,客户端对 xxxDTO
的 EJB 方法调用出现以下异常:
java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:app, moduleName:app-ejb, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@2d3f6ba3
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:749) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:116) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBClientInvocationContext.retryRequest(EJBClientInvocationContext.java:211) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:256) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:265) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:198) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:181) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:144) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at com.sun.proxy.$Proxy65.registerTaxpayer(Unknown Source) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_66]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_66]
at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_66]
at org.springframework.remoting.rmi.RmiClientInterceptorUtils.invokeRemoteMethod(RmiClientInterceptorUtils.java:71) ~[spring-context-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.doInvoke(SimpleRemoteSlsbInvokerInterceptor.java:98) ~[spring-context-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.invokeInContext(AbstractRemoteSlsbInvokerInterceptor.java:140) ~[spring-context-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.ejb.access.AbstractSlsbInvokerInterceptor.invoke(AbstractSlsbInvokerInterceptor.java:189) ~[spring-context-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) ~[spring-aop-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at com.sun.proxy.$Proxy22.registerTaxpayer(Unknown Source) ~[?:?]
当我删除映射字段或将该字段设置为 null
时,EJB 接收器变得可用并且一切正常,但如果映射字段的值不是 null
,则 EJB接收器不可用。
我试图通过更改 SerialVersionUID
来解决它(认为这可能是序列化和版本控制问题)但没有结果。
问题是:
- 为什么map字段会导致抛出异常?
- 如何解决?
我刚刚解决了这个问题。
愚蠢的错误:我忘记实现 Serializable
接口并为我的 yyyNameDTO
新添加的 DTO class.
放一个 serialVersionUID
我有一个包含 3 层的应用程序:DB、后端 包含 EJB(运行 在 Wildfly 上单独EJB 容器)和 前端 一个 EJB 客户端(运行 在 Tomcat 上分开)。前端和后端之间的通信由 DTO(数据传输对象)完成。一切正常,直到我在其中一个 DTO 中添加了一个新的地图字段:
public class xxxDTO implements Serializable {
private static final long serialVersionUID = 5811694947383586010L;
// simple fields like String, Integer, etc. go here
private Map<Language, yyyNameDTO> NameDetailsMap;
.....
}
我添加映射字段后,客户端对 xxxDTO
的 EJB 方法调用出现以下异常:
java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:app, moduleName:app-ejb, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@2d3f6ba3
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:749) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:116) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBClientInvocationContext.retryRequest(EJBClientInvocationContext.java:211) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:256) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:265) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:198) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:181) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:144) ~[jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
at com.sun.proxy.$Proxy65.registerTaxpayer(Unknown Source) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_66]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_66]
at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_66]
at org.springframework.remoting.rmi.RmiClientInterceptorUtils.invokeRemoteMethod(RmiClientInterceptorUtils.java:71) ~[spring-context-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.doInvoke(SimpleRemoteSlsbInvokerInterceptor.java:98) ~[spring-context-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.invokeInContext(AbstractRemoteSlsbInvokerInterceptor.java:140) ~[spring-context-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.ejb.access.AbstractSlsbInvokerInterceptor.invoke(AbstractSlsbInvokerInterceptor.java:189) ~[spring-context-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) ~[spring-aop-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at com.sun.proxy.$Proxy22.registerTaxpayer(Unknown Source) ~[?:?]
当我删除映射字段或将该字段设置为 null
时,EJB 接收器变得可用并且一切正常,但如果映射字段的值不是 null
,则 EJB接收器不可用。
我试图通过更改 SerialVersionUID
来解决它(认为这可能是序列化和版本控制问题)但没有结果。
问题是:
- 为什么map字段会导致抛出异常?
- 如何解决?
我刚刚解决了这个问题。
愚蠢的错误:我忘记实现 Serializable
接口并为我的 yyyNameDTO
新添加的 DTO class.
serialVersionUID