假设我有一个定义两个视图的 EJB:
- 当地的商业,
- 远程业务。
两个接口共享相同的方法签名,所以就像:
public interface MyBusinessCommon {
void myMethod(Object o);
}
@Local
public interface MyBusinessLocal extends MyBusinessCommon { }
@Remote
public interface MyBusinessRemote extends MyBusinessCommon { }
@Stateless
public class MyBusinessBean implements MyBusinessLocal, MyBusinessRemote {
public void myMethod(Object o) {
// ...
}
}
有没有办法找出从 EJB 本身(或其拦截器?)中调用的 EJB 视图
假设我想根据使用的视图执行不同的授权程序。远程应该受到更多限制,而本地不应该。
我可以调用SessionContext#getInvokedBusinessInterface()
,但这只会给我关于类对象的信息——而不是关于它的 EJB 语义。显然使用反射来检查接口或 bean 上的注释存在是不够的(在 中定义的视图ejb-jar.xml
呢?)
我怀疑是否有可能使用直接的 EJB 规范,但也许我错过了一些东西。
如果没有,是否有可能从应用程序服务器内部获取此信息?(我们只考虑 JBoss AS 7.x、Glassfish 3.x 和 TomEE 1.5.1)。