Context initial = new InitialContext();
Object objref = initial.lookup("java:comp/env/ejb/SimpleConverter");

一般情况下,intial.lookup("")中的参数就是你的JNDI名称。但是用的应用服务器,是把JNDI名放到java:comp/env/ejb/后面的。两种方式都没有错。比如:
TomCat5.0中使用的是Object objref = initial.lookup("java:comp/env/ejb/SimpleConverter"); WebLogic6.1中使用的是:
Object objref = initial.lookup("HelloHome");

InitialContext的构造方法主要是准备JNDI的访问环境,如果不加参数,那就意味着是用本地匿名访问,也就是说,用户角色是匿名,ctx.PROVIDER_URL是LOCALHOST
所以,对于本地测试(并且JNDI资源没有设置安全属性)这两段代码没有区别,如果要访问远程的JNDI资源,就必须用饱含JNDI环境参数Hashtable初始化InitialContext。

必要的环境参数如:
Context.INITIAL_CONTEXT_FACTORY//连接工厂
Context.PROVIDER_URL//访问连接
Context.SECURITY_PRINCIPAL//安全用户
Context.SECURITY_CREDENTIALS//用户密码

EJBLocalHome->本地主接口,负责控制Bean的整个生命周期,另外,可以看作是
生成Bean引用的
“工厂“类。

EJBLocalObject->本地组件接口,定义Bean要向客户提供的业务方法的签名。

本地接口是一种轻量级代理,语法更简单(直接类型转换,不需要narrow),

开销更小,速度更快。规范说可以在同一JVM内使用,我只在同一个EJB包内用过。
EJBLocalHome+EJBLocalObject   vs   EJBHome+EJBObject:  
  前一对不是远程调用,省时省力   
Home   vs   Object:  
  前者是Factory模式,用来生成后者;后者是proxy模式,用来暴露商业逻辑

InitialContext context = new InitialContext();          
Object ref = context.lookup(JNDIname);          
accHome = (AccountHome)PortableRemoteObject.narrow(ref,AccountHome.class);      
ejbObject = accHome.create();  
  上面即是ejb实例的一个很常见的创建过程  
理解如下:  
   上面的创建过程是通过远程接口创建ejb实例的过程:即先通过JNDIname找到ejb本地接
口的一个实例,然后再通过本地接口的实例创建ejb实例,PortableRemoteObject.narrow(ref,AccountHome.class);
实际上是一个强制转换,由于是远程强制转换,所以要用PortableRemoteObject.narrow()方法。

// 创建一个JNDI naming contest
           Context initial = new InitialContext();
          
           // 从JNDI 中以MyConverter 名子来定位到对象(在发布名称指定了JNDI名称)
//         Object objref = initial.lookup("java:comp/env/ejb/ConverterEJB");
           Object objref = initial.lookup("MyConverter");
          
           // 通过objref 得到ConverterHome 本地接口
           ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(
                   objref, ConverterHome.class);
          
           // 再由Home 接口的create 方法来创建一个服务器上的EJB实例
           Converter currencyConverter = home.create();
          
           // 调用EJB 中的方法
           代码省略

有关InitialContext()的困惑 <转>的更多相关文章

  1. C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解  ...

  2. C#进阶系列——WebApi 接口参数不再困惑:传参详解

    前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...

  3. javascript中异步和闭包产生的困惑

    这里我不打算大谈特谈什么是异步,什么是闭包,这些内容在博客园都已经写的够多的了,但是这些内容出现的多,并不代表所有初学者都已经撑握了,所以我还是打算,用一个比较常见的示例来分析一下,或许能让对这个问题 ...

  4. WebApi 接口参数不再困惑:传参详解

    阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.后台发送请求参数的 ...

  5. 计算LDA模型困惑度

    http://www.52nlp.cn/lda-math-lda-%E6%96%87%E6%9C%AC%E5%BB%BA%E6%A8%A1 LDA主题模型评估方法--Perplexity http:/ ...

  6. WebApi接口传参不再困惑(4):传参详解(转载)

    WebApi接口传参不再困惑(4):传参详解   前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方 ...

  7. python logging模块可能会令人困惑的地方

    python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...

  8. 【深入BFC】 关于CSS中float布局,清除浮动,和margin合并的原理解析,解开你心中的那些困惑!

    BFC的通俗理解: Block Formatting Context(块级格式化上下文)是W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用. ...

  9. 【Android】使用属性动画碰到的困惑及讲解

    属性动画的教程网上已经特别多了,本篇也不打算再去各种详解知识点,主要就是记录题主学习属性动画时的碰到的一些困惑,以及后来自己的理解.如果有人也碰到相似的问题,正好可以一起讨论下. 概要 本篇主要涉及的 ...

随机推荐

  1. DataGridView使用技巧十三:点击列头实现升序和降序排序

    DataGridView 列有三种排序模式.每一列的排序模式是通过该列的 SortMode 属性指定的,该属性可以设置为以下的 DataGridViewColumnSortMode 枚举值之一. Da ...

  2. [oracle] 安装卸载及常见问题

    (1)安装oracle10g备注: ① 检查安装版本是否复合安装主机的硬件要求,避免版本不兼容.如64位的oracle就不能在x86的机器上运行安装. ② 检查安装主机是否满足oracle的硬件要求, ...

  3. Qt 事件处理的五个层次

    看了这篇文章(见http://devbean.blog.51cto.com/448512/231861),然后经过自己的思考,把Qt事件处理的五个层次.同时也是Qt时间处理的流程画了出来.若有不对请批 ...

  4. Ubuntu下启动/重启/停止apache服务器

    Task: Start Apache 2 Server /启动apache服务# /etc/init.d/apache2 startor$ sudo /etc/init.d/apache2 start ...

  5. 【Android实战】Android中处理崩溃异常

    public class MainActivity extends ActionBarActivity { public CrashApplication application; @Override ...

  6. vnc 多用户登录

    1, 创建新用户: $ useradd tom $ passwd tom 2,  登录到tom账户,创建vnc实例: $ su tom$ vncserver 这时可以看看~/.vnc/目录下,有一些如 ...

  7. 获取作为 URL 部署清单的位置。

    ActivationContext ac = AppDomain.CurrentDomain.ActivationContext; ApplicationIdentity ai = ac.Identi ...

  8. 【Java NIO的深入研究1】缓冲区

    缓冲区 传统的流和通道的对比 流 通道 慢 快 处理简单 处理复杂 单字节的传输 一块数据的传输 - Java.io.*已经重新写过 - 是对流的模拟 单向的 双向的 可直接访问 必须通过Buffer ...

  9. c++ define的用法(转)

    #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用 ...

  10. 【Raspberry Pi】openwrt 路由

    http://blog.sina.com.cn/s/blog_40983e5e0102v6qt.html