帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
如何实现一个与数据库表字段松耦合的j2ee应用
作者:佚名 发布时间:2005-04-02 来源:不详
 
  本文基于java环境,分
体bean的不足,接着讲述了
析和实现了解决这个问题的方案
用java实现这个需求的技巧,最
。首先指出j2ee容器管理持久性实
后是具体地实现。

  1 前言

  在软件项目的分析设计
ER图。再详细设计UI界面上
类型。这些过程紧密地依赖
个表的字段有多少,它们的
目前我只能为我的表大概确
段的变化就是我的一个需求
字段可能不会是一样的。由
烦地构造源代码的版本数。
j2ee容器管理持久性实体be
实现。
过程中,我们首先分析数据实体
有哪些输入框,文本框等,紧接
于数据实体的稳定性,比如在数
类型是什么等。但是当这个稳定
定这些字段。项目组是否该等到
,项目该如何开发?即使所有客
于不同的客户对字段的需求不是
本文基于java环境,分析和实现
an的不足,接着讲述了用java实

,例如确定类,类成员变量或者画
着我们还会确定方法的参数个数和
据库设计中,我们需要多少表,每
性失去了怎么办?用户很有可能说
用户确定之后再做?如果用户说字
户能确定字段,不同的客户确定的
一样的,项目组有时不得不不厌其
了解决这个问题的方案。首先指出
现这个需求的技巧,最后是具体地


  2 固定字段假设和CMP实体BEAN类机制

  CMP实体BEAN机制也就
bean类具有持久性字段(或
的get/set方法一样。下面
是容器管理持久性实体bean机制
属性)的抽象get/set方法。这
是一个Personbean实体bean类的
。CMP实体bean的提供者提供的
两个方法与普通java bean的属性
name持久性字段的申明。

  Class Personbean extends EntityBean {    
  Abstract String getName();                          
  Abstract String setName(String vname);  
  String ebjCreate(String name) {
setName(name);};
  ------                                                                  
  }                                                                            
  部署时,一般部署工具会产生这个类的子类,子类的申明大概如下:                  
  Class PersonbeanSubClass extends
Personbean{
  Private:                                                              
  String name;                                                      
  Public:                                                                
  String getName(){ return name;}                

  String setName(Strin
g vname){name=vname;}
  ------                                                                  
  }                                                                            

  至于具体的字类实现机制可参见《Ma
。容器创建的是子类的实例。通过父子类
性get/set方法实现了一个实体bean的持
成这个子类的。这样bean提供者只需规定
有工具辅助完成。但我们必须注意到,为
方法。同样我们注意到为了创建一个实体
String的参数。这样的代码无疑建立在这
设下的语句还有访问数据库时的Statemen
stering Enterprise JavaBeans Second Edition》
的比较可知,子类通过一个私有字段和继承的两个属
久性属性。部署工具是根据java bean的内省机制生
持久性字段的抽象访问器函数,其他的持久性实现都
了指定一个持久性字段,提供者必须硬编码两个访问
Bean,我们为ejbCreate方法提供了一个类型为
个实体bean只有一个持久性字段的前提之下。类似假
t语句:

  Statement st = conn.createStatement();  
  St.execuate("insert
into person (name) value('Jo
hn')");
  广泛使用类似假设的例
定制标签处理类的数据交互
制为CMP实体BEAN类机制,
子还有Struts的视图-模型数据
。我暂且称这种假设为固定字段
目的在于重视j2ee中的这个特征
交换机制中ActionForm和HTMLTag
假设,基于这个假设的代码实现机


  3 不定字段假设和脚本语言类技术

  固定字段假设和CMP实
文称为持久性字段的三属性
响源代码,这就产生了一系
久性字段的三属性和源代码
有XML,动态编译技术,元
久性字段,有一个持久性字
性字段,最后执行数据库操
源代码,接着及时编译生成
体BEAN类机制硬编码持久性字段
)三个中至少一个固定下来了,
列令人讨厌的代码树。不定字段
分开,最终达到客户可以订制持
数据技术,字典集合技术等。这
段的数据容器和一部分分析代码
作。动态编译技术是一个过渡技
字节代码,部署到应用中。
,把字段的名字,个数和类型(本
使得更改持久性字段的工作必然影
假设和脚本语言类技术就是要把持
久性字段的目的。典型的实现技术
些技术有一个共同点就是不固定持
。分析代码解释数据容器中的持久
术,它可根据客户配置,动态生成


  3.1 XML                                                                

  XML是一个非常好的数据交换格式,
据,定义了文档中数据的格式和组成。XM
数据值(元素文本或属性值)。另外JAVA
等。JAXP集合了基于事件分析的简单XML
XML进行消息发送接收和消息处理的编程
档如HTML,JAVA源代码等。
它具有很好的模式定义(DTD),DTD是XML文档的元数
L文档中同时包含了数据名称(元素名或属性名)和
中有很强的XML文档分析和使用API,包括JAXP,JAXM
编程接口SAX和节点数的DOM分析技术。JAXM则是利用
接口。XSLT能很容易地把XML文档转为其他格式的文


  3.2 动态编译技术                                                          

  利用XML表达用户配置信息,XSLT把
java.lang.Compiler类及时编译产生字接
。详细描述请参照http://www.javaworld
这些信息转换成相应的JAVA源代码,接着是用
代码。当然你也可以生成其他的辅助类,sql语句等
.com/javaworld/jw-02-2002/jw-0201-xslt.html

  3.3 元数据技术                                                            

  元数据技术把关于数据
信息。数据字典可以放在xm
,开发者访问数据字典可以
的描述放在数据字典中,使用者
l文档中,也可以在数据库服务
得到客户的当前持久性字段,并
访问数据字典可以得到关于数据的
器上。在客户配置了持久性字段后
生成正确的代码。

  3.4 字典集合技术                                                          

  java中的哈西表等字典
我们的方法调用是表中有多
字段硬编码入了源代码中,
数的接口是固定的。
类集合数据结构可以在方法调用
少字段,填充数据库的函数一般
持久性字段变化必会造成源代码

之间传递变化的持久性字段。平常
要接收多少参数,这样就把持久性
的变动。字典集合技术使这样的函


  4 一个简单任务

  为了应用上面的分析,具体体现如何
出一个简单的任务:做一个采集人员信息
实现与数据库表字段松散耦合的j2ee应用,在这里提
的应用程序。

  我们粗略分析一下便可
WAF框架来设计。关于WAF框
s/cn/java/l-j2eeArch/ind
得到一个人员类,暂且命名为Pe
架可参见http://www-900.ibm.c
ex.shtml
rson,但字段我们确定不了。采用
om/developerwork


  4.1 设计一、字典集合技术和元数据技术                                      

  下面设计图(图一)表
务器部分和客户端部分,服
上显示页面的客户端部分,
客户可以点击此按钮发出提
类来处理用户的提交请求。
示:客户发出http请求,容器定
务器部分为在容器中运行的指令
客户端部分聚集(包含)了一个
交请求。根据WAF的框架流程,
下面是这个关键类的设计说明:
位到person.jsp,这个网页分成服
,这些指令会build在客户浏览器
html表单,表单有一个提交按钮,
我们设计一个personHTMLAction的
字段:

  Connection conn 保存了从容器连接池中获取的数据库连接;        
  Hashtable reqHashNamevalue 保存
了从用户提交的表单中提取的名字-值对;
  Hashtable targetHash
元数据--字段名-类型对;
NameType 保存了从数据库中获

得的关于数据表persion_table的

  Hashtable finalHashNamevalue保存
了最后插入到数据库中的名字-值对;
  函数或方法:                                                                  
  Connect getConnect() 从容器的连接池中获取数据库连结;    
  Hashtable getReqHash
Namevalue() 从用户提交的表
单中提取名字-值对;
  Hashtable getTargetH
数据--字段名-类型对;
ashNameType() 从数据库中获

得关于数据表persion_table的元

  Hashtable getFinalHashNamevalue
reqHashNamevalue中过多的字段,
() 根据targetHashNameType中的字段过滤掉

  得到最后插入到数据库中的名字-值对;                                          
  Void insert()根据t
构造sql语句,操作数据库
argetHashNameType中的类型和f

inalHashNamevalue中的名字-值对

  这些函数统一由WAF框架中的这个类
的父类HTMLAction的一个函数perform来调用。
  

  图二表达了这个设计达到的松散耦合
递充分利用了哈西字典类。达到的直接好
应用的输入界面,客户可以增加各种输入
理类和数据库表格之间,它们间的数据传
处是我们可以开发出定制数据表的工具让
或修改字段却不会影响处理类。
效果。第一处在表单和处理类之间,它们间的数据传
处是我们可以开发出定制表单的工具让客户自己定制
元素到表单上却不会影响后台的处理类。第二处在处
递充分利用了数据库中的元数据信息,达到的直接好
客户自己定制数据表的多数字段,客户可以增加减少


  4.2 设计二、xml技术、哈西技术和元数据技术                              

  设计图(图三)于图二
格式。 XMLpersonHTMLActi
去。下面是这两个关键类的
不同的是我们在控制层内部加上
on的类来处理用户的提交请求,
设计说明:
了JMS技术,用XML作为数据的交换
PersonMDB把数据插入到数据库中


  XMLpersonHTMLAction类                                      
  函数或方法:                                                                  
  String getReqXML()
调用getParameters()获得客户
的提交数据,产生xml文档;
  Void sendXML() 生成一个临时队列
回的xml文档作为JMS的消息体发送出去。
作为消息的反馈队列,利用JMS API把getReqXML()返


  PersonMDB类                                                          
  字段:                                                                        
  Connect conn 保存了从容器连接池中获取的数据库连接;              
  Hashtable XMLHashNamevalue 保存
了从处理类的发送来的消息中提取的名字-值对;
  Hashtable targetHash
元数据--字段名-类型对;
NameType 保存了从数据库中获

得的关于数据表persion_table的

  Hashtable finalHashN
amevalue保存了最后插入到数据
库中的名字-值对;

  函数或方法:                                                                  
  Connect getConnect() 从容器的连接池中获取数据库连结;    
  Hashtable getXMLHash
Namevalue() 从处理类的发送
来的消息中提取名字-值对;
  Hashtable getTargetH
数据--字段名-类型对;
ashNameType() 从数据库中获

得关于数据表persion_table的元

  Hashtable getFinalHa
XMLHashNamevalue中过多的
shNamevalue() 根据targetHa
字段,得到最后插入到数据库中
shNameType中的字段过滤掉
的名字-值对;
  Void insert()根据targetHashNam
构造sql语句,操作数据库;
eType中的类型和finalHashNamevalue中的名字-值对

  Void sendReply() 发送反馈消息给处理类。                      
  这些函数统一由EBJ 2.
0 中的消息驱动BEAN的onMessag
e函数统一调用。

  图四表达了这个设计达
从而增强了设计的分布特性
到的松散耦合效果。与图二相比

,这个设计增加了一个松散耦合,

  

  

  不能确定数据库表的字段是一个普遍
结出两个假设:固定字段假设和不定字段
的实体BEAN技术,众多框架的视图-模型
造成项目的需求不确定风险,而且往往使
把这种不确定性作为一个需求来处理,利
技术解决这个问题,达到数据库字段和应
供参考。
的需求不确定性问题,本文通过对J2EE技术的分析总
假设。有好多关键技术是基于固定字段假设的如CMP
数据交换技术。这个假设和基于这个假设的技术往往
项目组生成枝叶繁盛的源代码版本数。不定字段假设
用了XML技术、集合技术、元数据技术甚至动态编译
用松散耦合的最终目的。本文还给出了两个设计方案

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·如何搭建J2EE开发环境  (2005-04-02)
 ·J2EE项目中如何组建开发团队  (2005-04-02)
 ·ADO存取数据时如何实现留言记录的  (2005-03-12)
 ·如何使用ASP在自己的网站建立投票  (2005-03-12)
 ·如何使用ASP在自己的网站建立投票  (2005-03-12)
 ·如何实现动态添加Html文档中Form  (2005-03-12)
 ·如何使用 Microsoft Access 和 A  (2005-03-12)
 ·如何定义一个session 数组?  (2005-03-12)
 ·如何用ASP编写网站统计系统一  (2005-03-12)
 ·如何用ASP编写网站统计系统二  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统