リモートおよびローカル インターフェイスを使用して 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
し、使用すると、リモート インターフェイスの正しい JNDI 名が取得されます@EJB(beanName=IRemoteInterface.JNDI_NAME)
。ClassCastException
JBoss で@LocalBinding
andのようなものを探しています。@RemoteBinding
多分私は何かを逃していますか?