网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.JSR-184中纹理对象介绍.
.比尔学Java:Java Socket篇.
.使用属性和反射过渡从数据存取层.
.Apache服务器配置全攻略.
.根据name调用getName方法.
.系统构建高性能J2EE应用的五种核.
.Palm J2ME串行通讯程序编写与调试.
.浅谈Hibernate获得成功的十大理由.
.如何判断字符串是否为空串?.
.关于java中的对象序列化.
.经验分享:开发SWT应用两点心得.
.使用Commons-Pool写的数据库连接.
.大巧不工 JGraph简介和使用技巧.
.逐步深入剖析java类的构造方式.
.Java小技巧:关于Cookie的操作.
.写给程序员:从C++转到Java需注意.
.TOMCAT3.1的安装与配置简要介绍.
.JBuilder应用技巧一则.
.WebWork中使用动态Form字段.
.Java3D实现三维显示 系列二.

保持 EJB 技术的所有优点而不增加 RMI 开销

发表日期:2008-1-5


EJB 组件的一个比较常见的用途是在关系型数据治理领域。与 RMI 结合起来,EJB 组件让您不必钻研 JDBC 就可以从关系数据库访问数据。但这种抽象是要付出代价的:RMI 很慢,通常是极慢。那么,窍门就是找到一种方法来保持 EJB 技术的所有优点而又没有使用 RMI 的巨大开销。在这篇技巧文章中,您将看到值对象(也称为对象映射)是如何帮助您绕开最严重的 RMI 速度障碍的。您将首先从一个工作示例开始,然后了解代码是怎样工作的。

简单实体 bean

考虑一个名为 DVDs 的简单数据库表。这个表有几列:id、title、releaseDate、prodUCer(通过外键)和 Director(也是通过外键)。因为我们正在使用 EJB 组件,所以表由实体 bean 表示,并且每个列都有其自己的取值(Accessor)方法和赋值(mutator)方法。清单 1 显示了我们的 DVD 表的远程接口:

清单 1. DVD 远程接口

import com.ibm.ejb;

import Java.rmi.RemoteException;

import java.util.Date;

import javax.ejb.EJBObject;

public interface DVD extends EJBObject {

public int getId() throws RemoteException;

public String getTitle() throws RemoteException;

public void setTitle(String title) throws RemoteException;

public Date getReleaseDate() throws RemoteException;

public void setReleaseDate(Date releaseDate) throws RemoteException;

public Person getProducer() throws RemoteException;

public void setProducer(Person producer) throws RemoteException;

public Person getDirector() throws RemoteException;

public void setDirector(Person director) throws RemoteException;

}

这里的问题是如何访问表数据,可能一次访问所有数据。为进行一次 DVD 销售或搜索,在线商店或清单应用程序很可能要求获取上述列中包含的大多数或所有信息。为了访问所有信息,应用程序为每列调用一个取值方法 ? 共有五次方法调用,每次都会多占用一点 RMI 通信时间。这种情况再加上其它复杂性,如可能的错误情况、网络流量和相关问题,以及数据的指数级数量(大多数此类表有 15 行或更多),我们的应用程序随时都可能崩溃。

这时就需要值对象。值对象是简单的 Java 类,可以用它来表示多种对象,包括关系数据库行中的数据。通过直接使用值对象,而不是反复使用 bean 的远程接口,我们可以将 RMI 通信减少到一次方法调用。

创建值对象

清单 2 中的值对象看起来和我们的远程接口几乎相同,但它实际上是具体类。注:通常用 bean 的名称加上 Info 来表示值对象。

清单 2. DVD 值对象

package com.ibm.ejb;

import java.io.Serializable;

import java.util.Date;

public class DVDInfo implements Serializable {

private int id;

private String title

private Date releaseDate;

private Producer producer;

private Director director;

public int getId() {return id;

}

void setId(int id) {this.id = id;

}public String getTitle() {return title;

}

public void setTitle(String title) {this.title = title;

}

public Date getReleaseDate() {return releaseDate;

}

public void setReleaseDate(Date releaseDate) {

this.releaseDate = releaseDate;

}

public Person getProducer() {

return producer;

}

public void setProducer(Person producer) {this.producer = producer;

}

public Person getDirector() {return director;

}

public void setDirector(Person director) {this.director = director;

}}


上一篇:保护Applet免遭窃取的小技 人气:426
下一篇:编程中的一些共同的问题 人气:408
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐