帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统v4.6
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程 >
Enterprise JavaBeans 入门
作者:未知 发布时间:2005-03-12 来源:JSP天空网
本章讲述内容

一个客户端应用的构成?
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 客户端开发流程总结
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·最佳实践:用 Enterprise JavaBe  (2005-03-12)
 ·什么是 Enterprise JavaBeans 组  (2005-03-12)
 ·什么是 Enterprise JavaBeans 组  (2005-03-12)
 ·什么是 Enterprise JavaBeans 组  (2005-03-12)
 ·Enterprise JavaBeans查询语言  (2005-03-12)
 ·无状态Enterprise JavaBeans的观  (2005-03-12)
 ·布署和使用 Enterprise JavaBean  (2005-03-12)
 ·Enterprise bean的开发(一)  (2005-03-12)
 ·Enterprise bean的开发(二)  (2005-03-12)
 ·如何编写Enterprise bean的客户端  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·帝国网站管理系统采集使用教程
·帝国网站管理系统模板制作教程
·帝国CMS模板下载
·Discuz6.0.1UC版通行证发布
·帝国网站管理系统之网站迁移教程
·帝国网站管理系统实例入门教程下载
·《帝国网站管理系统》实例入门教程
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统