【发布时间】:2013-05-31 05:40:58
【问题描述】:
我正在尝试使用远程和本地接口实现 EJB3 无状态,问题是本地接口在另一个远程 EJB 中调用,注释为 @EJB,但它返回 null 或 ClassCastException (java.lang.ClassCastException: com.sun.proxy.$Proxy58 cannot be cast) .
要在服务器上执行查找以获取本地无状态,我必须为无状态输入 2 个 JNDI 名称,否则它会为我提供远程名称。
@Stateless(mappedName=IRemoteInterface.JNDI_NAME, description="...")
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@Interceptors({GenericInvocationHandler.class})
@Remote(IRemoteInterface.class)
@Local(ILocalInterface.class)
public class MystatelessBean extends AbstractBasicBean implements
IRemoteInterface, ILocalInterface {
...
}
@Stateless(mappedName=IRouting.JNDI_NAME, description="gives access to other services")
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@Interceptors({GenericInvocationHandler.class})
@Remote(IRouting.class)
public class RoutingServiceBean extends AbstractBasicBean implements IRouting {
@EJB
public ILocalInterface iLocalInterface;
}
实际上,当我使用@EJB 时,我得到NPE,当我使用@EJB(beanName=IRemoteInterface.JNDI_NAME) 时,我得到ClassCastException,这是远程接口的正确JNDI 名称。
我正在 JBoss 中寻找 @LocalBinding 和 @RemoteBinding 之类的东西。
也许我错过了什么?
【问题讨论】:
-
由于答案似乎不起作用-您是如何解决的?谢谢
-
我真的不明白你为什么要发布同一个 EJB 的
@Remote和@Local?
标签: java jakarta-ee ejb-3.0 jndi stateless-session-bean