栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用EJBContext getContextData-这样安全吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用EJBContext getContextData-这样安全吗?

我认为一般而言,该方法的约定是启用拦截器+ Web服务上下文与Bean之间的通信。因此, 只要没有创建新的调用上下文
,该上下文应可用于所有代码。因此,它应该绝对是线程安全的。

EJB 3.1规范的第12.6节指出:

InvocationContext对象提供了使拦截器方法能够控制调用链行为的元数据。上下文数据不可在单独的业务方法调用或生命周期回调事件之间共享。如果在Web服务终结点上调用了拦截器,则getContextData返回的映射将为JAX-
WS MessageContext。

此外,在4.3.3中描述了getContextData方法:

getContextData方法使业务方法,生命周期回调方法或超时方法能够检索与其调用关联的任何拦截器/ webservices上下文。

在实际实现方面,JBoss AS执行以下操作:

public Map<String, Object> getContextData() {    return CurrentInvocationContext.get().getContextData();}

其中

CurrentInvocationContext
使用基于线程本地链接列表的堆栈来弹出并推送当前调用上下文。

参见org.jboss.ejb3.context.CurrentInvocationContext。调用上下文只是懒惰地创建了一个简单的

HashMap
,就像org.jboss.ejb3.interceptor.InvocationContextImpl中所做的那样

Glassfish做类似的事情。它还从调用管理器获得一个调用,该调用管理器还使用基于线程本地数组列表的堆栈来再次弹出并推送这些调用上下文。

GlassFish实现的JavaDoc在这里特别有趣:

该TLS变量存储一个ArrayList。ArrayList包含ComponentInvocation对象,这些对象表示此线程上的调用堆栈。不需要同步对ArrayList的访问,因为每个线程都有自己的ArrayList。

就像在JBoss
AS中一样,GlassFish也懒洋洋地

HashMap
在com.sun.ejb.EjbInvocation中创建了一个简单的例子。在GlassFish案例中,有趣的是Web服务连接更易于在源中发现。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号