当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > JAVA > EJB > 正文

EJB(Enterprise JavaBeans)入门(4)

http://www.zk168.com.cn  招考学习网 2006-4-11 3:08:11
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
EJB(Enterprise JavaBeans)入门(4)

客户端开发和测试

本章主要讲述以下内容:一个客户端应用的构成;JNDI 的工作方式以及使用 home 接口和会话 bean 等相关的知识。

本章讲述内容

  • 一个客户端应用的构成?
  • JNDI 是如何工作的
  • 使用 home 接口
  • 使用会话 bean

EJB 客户端

  • 看起来很特殊的 EJB 客户端应用实质上一点也不特殊
  • 可以是 applet, 应用程序, servlet, 或其它 bean
  • 没有过高的 overhead
  • 编程模式简单

JNDI

  • 使用 JNDI (Java Naming and Directory Interface) 来查找一个 EJB home 接口
    • JNDI 是将名称与对象匹配的服务(类似电话黄页)
    • 一个 "naming service"
  • 一个服务器将对象添加到目录树上:Known as "binding" a name to an object
  • 任何一种对象可以被加到目录树中

JNDI Context

  • 一个 Context 是一个将名称与对象绑定好的对象
  • Context 可以是嵌套的 (构成一个目录结构):顶级的 context 对象是一个 InitialContext
  • Context 可以被 "列出" 来查看其中的内容

Binding

  • Context 接口定义了下列方法
    • void bind(String name, Object obj)
    • Object lookup(String name)
  • 一个容器当 Bean 启动后自动将 Bean 的名称绑定到它的 home 对象上
  • 一个客户端通过名称就可查找到 home 接口

为何使用 JNDI?

  • 服务器和客户端需要知道:
    • 如何定位名称服务器
    • 在名称服务器上对象的正确名称
  • 客户端不知道如何定位 EJB 服务器:客户端必需知道如何找到名称服务器
  • 通过名称服务器存取的对象可以来自多方面:多个服务器可以构成命名空间

获得您的 Bean

  • 一旦您获得一个 home 接口,您可以使用 create() 方法来获得一个 bean 的引用:一旦您获得对该 bean 的引用,您可以开始调用它的方法
  • 不需要任何扫尾工作;只需简单地"停止引用" bean
try {
MyBean bean = findMyBeanHome().create();
bean.computeSomethingOrOther(42);
...
} catch (NamingException e) {
// Handle the naming exception
}

找到回 Home 的路

  • 每个 EJB 都有一个 home 接口
  • 客户端可从一个 JNDI context 获得 home 接口
  • 使用一个 helper 类将它 "narrow" 成正确类型
public MyBeanHome findMyBeanHome()
throws NamingException {
Context context = getInitialContext();
Object object = context.lookup("MyBean");
context.close();
return (MyBeanHome)PortableRemoteObject
.narrow(object, MyBeanHome.class);
}

创建一个 InitialContext

  • INITIAL_CONTEXT_FACTORY
    • 创建初始 context 的类
    • 与各厂商的实现相关
  • PROVIDER_URL
    • 名称服务器的位置 (URL 格式)
    • "IIOP://localhost:6543/" == 本地机器,端口 6543
    public Context getInitialContext()
    throws NamingException {
    Hashtable properties = new Hashtable(2);
    properties.put(Context.PROVIDER_URL, "iiop://localhost:6543/");
    properties.put(Context.INITIAL_CONTEXT_FACTORY,
    "com.ibm.ejs.ns.jndi.CNInitialContextFactory");
    return new InitialContext(properties);
    }

    注意这些 "魔术" 值
    • 这些 "常量" 不应该写死在您的方法中
    • 应该从一个 properties 文件中获得,或为 servlet "init" 参数,...
    public Context getInitialContext()
    throws NamingException {
    Hashtable properties = new Hashtable(2);
    properties.put(Context.PROVIDER_URL, getNameServerURL());
    properties.put(Context.INITIAL_CONTEXT_FACTORY,
    getInitialContextFactoryClassName());
    return new InitialContext(properties);
    }

    要及时关闭Context
    • Context 不是线程安全的 (thread-safe):当您要共享它们时要当心
    • 一旦您获得了对象的引用,您不再需要 context; 可以关闭它
    ...
    Context context = getInitialContext();
    Information info = null;
    try {
    info = (Information)context.lookup("information");
    } catch (NamingException e) {
    throw e;
    } finally {
    context.close();
    }
    ...

    引用 Bean
    • 您可以不确定地引用一个 home 或 bean 类
    • 实际上,我们建议您保存 home 接口如果您还将使用它们时:JNDI 的查找是开销很大的
    • 但要注意,home/bean 的引用不是 serializable 的
    ...
    MyBean bean = findMyBeanHome().create();
    bean.computeSomethingOrOther(42);
    ...

    Servlet 示例
    public void doGet(...) throws ... {
    PrintWriter out = response.getWriter();
    out.println("<HTML><HEAD>");
    try {
    BankAccount account = getBankAccountHome().findById(42);
    double balance = account.getBalance();
    out.print("Balance is: ");
    out.println(balance);
    } catch (Exception e) {
    out.println("A problem has occurred with the server.");
    }
    out.println("</HEAD></HTML>");
    }
    public synchronized BankAccountHome getBankAccountHome()
    throws NamingException{
    if (bankAccountHome == null)
    bankAccountHome = findBankAccountHome();
    return bankAccountHome;
    }

    EJB 客户端开发流程总结

    本章讲述内容

    • 构建一个 EJB 客户端的流程
    • JNDI 提供了一个分布式对象有层次的组织
    • 客户端和服务器不需要互为知道
    • 客户端和服务器必需知道:
      • 如何找到名称服务器
      • 对象的公用名称

    (未完待续)
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·环保企业人力资源开发与管理的实证研究————巨龙公
·重油制气污水处理系统(A/O)技术改造
·BOG压缩机在液化石油气基地的应用
·英美CPA管理模式及其启示
·改造NERA微波公务信道为国产监控信道
·LFCB-102型微波分相差动保护的应用
·EAStudio让电子商务网站如虎添翼
·基于PB6和ORACLE8开发“劳动信息管理系统”
·巧解Pretty  Park 病毒一例
·利用TDC组件实现对WEB页面的交互操作
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>