• 有关InitialContext()的困惑 <转>


    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 中的方法
               代码省略

  • 相关阅读:
    OOP 三大特点:继承性,封装性,多态性
    PHP 知识点
    ELK安装和配置及常用插件安装
    istio1.2.2 安装及使用示例
    动态扩展磁盘(LVM)
    kuberadm集群升级
    nginx+nginx-upsync-module实现配置动态更新
    kubernetes资源优化
    ingress controller 和ingress使用实例
    helm安装及使用
  • 原文地址:https://www.cnblogs.com/xiadongqing/p/5199803.html
Copyright © 2020-2023  润新知