我正在尝试使用远程和本地接口实现 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 名称。
我正在寻找类似@LocalBinding
和@RemoteBinding
在 JBoss 中的东西。
也许我错过了什么?