javax.naming.InitialContext 是线程安全的吗

2024-04-05

目前我正在使用以下代码来查找普通 POJO 类的 EJB3 无状态会话 bean。 (我们使用的是 JEE5,所以我们无法在普通 POJO 类中注入无状态会话 Bean,我必须使用查找)

import javax.naming.Context;  
import javax.naming.InitialContext;  
import javax.naming.NamingException;  

import org.apache.log4j.Logger;  

public Object getEJB(String jndiName) {  

                logger.debug("WEBSPHERE EJB Lookup : " + jndiName);  
                String modifiedJndiName = "";  
                Hashtable<Object, Object> properties = new Hashtable<Object, Object>();  
                properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");  
                properties.put(Context.PROVIDER_URL, "iiop://localhost:2809");  
                try {  
                    Context context = new InitialContext(properties);  
                    logger.debug("WEBSPHERE EJB Lookup Modified JNDI Name: " + modifiedJndiName);  
                    return context.lookup("ejblocal:"+modifiedJndiName);  
                }catch (NamingException ne) {  
                    logger.debug("Naming Exception occurred :"+jndiName +">>>"+ne.getMessage());  
                    logger.error(ne.getMessage(), ne);  
                }  

                return null;  
            }  

那么Context对象是ThredSafe吗?我应该为每个调用创建 Context 对象 [如本代码片段所示] 还是可以为所有线程重用 Context?


有关线程安全的答案通常已经在 javadoc 中提及(只要相关)。确实,InitialContext javadoc http://docs.oracle.com/javase/6/docs/api/javax/naming/InitialContext.html提到以下内容:

An InitialContext实例不与多个线程的并发访问同步。多个线程,每个线程操作不同的InitialContext实例不需要同步。需要访问单个线程InitialContext并发实例应该在它们之间同步并提供必要的锁定。

最后一句话证实了这一点:它不是线程安全的,并且每线程同步是必要的。在你特别的但是,在代码示例中,不需要同步,因为无论如何它都是在方法本地范围中创建的(即它绝对不在线程之间共享)。如果InitialContext在您的特定代码示例中是一个实例变量,那么您必须添加synchronized关键字到getEJB() method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javax.naming.InitialContext 是线程安全的吗 的相关文章

随机推荐

  • WebGet 的 WCF 响应格式

    WCF 为 ServiceContract 中的 WebGet 注释中的 ResponseFormat 属性提供了两个选项 ServiceContract public interface IService1 OperationContra
  • Drupal 6:打印纯正的主链接和所有子链接

    世界上怎么可能 我发誓 我读了相当于三本百科全书的书 却毫无用处 我已经尝试过区域 page tpl php 和块内的解决方案 他们都没有给我我需要的东西 而且我知道还有很多其他人也需要这个 我得出的结论是 我想打印出 page tpl p
  • 模糊除 div 之外的整个页面

    我有以下代码 除了中心的红色 div 之外 我需要将所有内容都模糊化 我尝试使用filter none or filter blur 0 但这行不通 如何模糊背景中除红色 div 之外的所有内容 编辑 我也尝试将它与 z index 一起使
  • iOS 11:蜂窝信号强度

    我正在获取蜂窝信号强度 iOS let statusBarView UIApplication shared value forKey statusBar as UIView if let foregroundView statusBarV
  • Spark:当我在 Range 中使用累加器时,它无法正常工作

    我不明白为什么 Spark 没有正确更新我的累加器 object AccumulatorsExample extends App val acc sc accumulator 0L acc sc range 0 20000 step 25
  • 在 C++17 中使用 const std::string& 参数是否有意义?

    通过得到string view在 C 17 中 我们得到了传递两者的廉价方法std string and char 不拥有字符串所有权并避免制作临时副本的函数 通过使用std string按值传递和std move我们可以显式且快速地传递右
  • 指定 NVCC 用于编译主机代码的编译器

    运行 nvcc 时 它始终使用 Visual C 编译器 cl exe 我怎样才能让它使用GCC编译器 设置CC环境变量到gcc没有修复它 我在可执行文件帮助输出中也找不到任何选项 在 Windows 上 NVCC 仅支持 Visual C
  • 为什么某些基本类型在 TypeScript 中不能传递赋值——它们是否按预期运行?

    本来想在 TypeScript 存储库的问题跟踪器中打开一个错误报告 我意识到我问了太多问题 所以我在错误报告之前在这里打开一个问题 带有相关代码的 Playground 链接 https www typescriptlang org pl
  • SecurityException - GoogleCertificatesRslt:不允许

    我们有一个拥有数百万用户的应用程序 在过去的一周里 我们从 Firebase Crashlytics 的旧版本应用程序中收到了大约 30 个 速度警报 其中包含如下错误消息 Fatal Exception java lang Securit
  • 使用按钮在打印机中打印 jLabel 的图标[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个带有图标的 jLabel 我想使用按钮在打印机 佳能 惠普 爱普生任何打印机 中打印该图标 我怎样才能做到这一点 有什么有用的代码
  • 在 MS Access 上与多个程序员一起工作

    您是否建议与多个程序员一起开发 MS Access 应用程序 我们的一款 MS Access 应用程序已经发展到了这样的程度 一名程序员无法在要求的时间范围内处理大量的更改 错误修复 和新功能 我们正在尝试使用 VBA 中未记录的 Save
  • 如何缩小自定义 Skobbler 离线地图应用程序的大小

    我正在将 Skobbler 地图集成到我的 iOS 应用程序中 目前 该应用程序的大小为 160Mb 这太大了 但我注意到已经集成了一堆地图 我想删除所有地图并让用户下载他需要的地图 现在 当我包含 SKMaps framework 时 其
  • Typescript 编译器突然开始生成错误

    我正在开发一个 Angular 2 项目 当我尝试运行打字稿编译器时 突然开始出现很多很多错误 有人可以建议从哪里开始搜索吗 我没有故意更改任何基本内容 即使当我从存储库克隆一个新副本时 错误仍然存 在 错误如下 node modules
  • Facebook SDK 3.1 - 错误:HTTP 状态代码:400

    自昨天 10 月 9 日起我已更新至 facebook SDK 3 1 后 我收到以下错误 错误 HTTP 状态代码 400 但就与 Facebook 连接而言 一切功能都完全正常 每次在我的应用程序上启动 Facebook 会话时 我都会
  • Rails 3 和图形数据库

    在 Postgresql 上运行的 Rails 3 应用程序需要切换到图形数据库才能成长 它们有很多 并且都提供不同类型的 API 主要是 REST 我深受启发talks http nosql mypopescu com post 3429
  • 如何使用 FFmpeg 在 C++ 中将 AVFrame 保存为图像

    在我的项目中 我想保存 Hevc 文件中的一帧 我在源代码中使用 FFmpeg 来解码 Hevc 文件并获取 AVFrame 和 AVCodecContext 我需要的是将框架保存为图片 全彩 我尝试将其保存为 pgm 文件 因此图片只是灰
  • isSet() 或运算符 void*() 或显式运算符 bool() 或其他什么?

    是什么最先进的关于函数检查值是否已设置 例如 下面的迭代器解析单元格 某些单元格包含值 其他单元格为空 最方便的方法是什么 struct iterator usage bool isset const if it isset bool is
  • 如何解决“错误 TS2351:无法将“new”与类型缺少调用或构造签名的表达式一起使用。”?

    我正在将一个名为 Auth js 的 js 文件 所以不是 ts 文件 导入到我的 Reactjs TypeScript 应用程序中 所以在我的组件中我有这个 import as Auth from Auth Auth const auth
  • 如何使用 Meteor js 触发自定义事件

    是否可以使用 Meteor 触发自定义事件 我发现触发自定义 jquery 事件不起作用 因为 Meteor 事件与 jQuery 是分开的 正如这里所讨论的 https stackoverflow com questions 106465
  • javax.naming.InitialContext 是线程安全的吗

    目前我正在使用以下代码来查找普通 POJO 类的 EJB3 无状态会话 bean 我们使用的是 JEE5 所以我们无法在普通 POJO 类中注入无状态会话 Bean 我必须使用查找 import javax naming Context i