• InitialContext与lookup


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

  • 相关阅读:
    zzulioj 2558 数字的差值
    ReSharper 配置及用法(转)
    HttpWebRequest的常见错误使用TcpClient可避免
    windows 2003 64位系统php运行报错:1% 不是有效的 win32 应用程序 .
    C#中使用list Add的问题
    HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的
    调用webservice时提示对操作的回复消息正文进行反序列化时出错&&Web service 超过了最大请求长度
    LINQ与labmda对照表
    Use dynamic type in Entity Framework 4.1 SqlQuery() method
    HttpWebResponse.GetResponse() 基础连接已经关闭: 服务器关闭了本应保持活动状态的连接。
  • 原文地址:https://www.cnblogs.com/firstdream/p/7851695.html
Copyright © 2020-2023  润新知