📄 9.html
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="description" content="Java,JDBC,EJB,Open Source,jdk,rmi">
<meta name="Keywords"
content="Java, servlets, Java servlet, Javascript, ActiveX, VRML,
applet, applets, directory, news, jdbc, applications,
Java applications, Java developer, Java development, developer,
classes, Jars.com, Jars, intranet, Java applet, Javabeans,
Java products, JDK, Java development kit, java development environment, JIT,
JavaPlan, enterprise tools, JVM, Java Virtual Machine, Java resources,
SUN, CGI, Perl, database, network, html,
xml, dhtml, rating, ratings, review, jars, cgi, programming,
software review, software rating">
<title>csdn_用J2EE技术实现基于Web的智能推理引擎 </title>
<style>
.news { BACKGROUND: #007cd3; font-family: "宋体"; font-size: 9pt }
.t { font-family: "宋体"; font-size: 9pt }
.t1 { color:#007cd3; font-family: "宋体"; font-size: 9pt }
.white { font-family: "宋体"; font-size: 9pt;color:#FFFFFF }
.red { font-family: "宋体"; font-size: 9pt;color:#FF0000 }
A:visited {color:#0000FF}
A:hover {color: #ff6666; text-decoration: none}
.text {font-size: 12px; line-height: 160%; font-family: "宋体"}
.text1 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text1:visited {color:#000000}
.text1:hover {color: #000000}
.text2 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text2:visited {color:#000000}
.text2:hover {color: #000000}
.text3 {font-size: 12px; line-height: 100%; font-family: "宋体"; text-decoration: none}
.large {font-size: 14.8px; line-height: 130%}
</style>
</head>
<body>
<tr>
<td WIDTH="100%" VALIGN="TOP">
<tr>
<td WIDTH="100%" CLASS="white"></td>
</tr>
<div align=center>
<tr>
<td WIDTH="50%" bordercolor="#FFFFFF" CLASS="t1" bgcolor="#F0F0F0" align="center" nowrap>用J2EE技术实现基于Web的智能推理引擎 </td>
<p> <td WIDTH="50%" bordercolor="#FFFFFF" CLASS="t1" bgcolor="#F0F0F0" align="center" nowrap>作者:guo_jerry</p>
</td>
</tr></div>
<tr> <td WIDTH="100%" bordercolor="#FFFFFF" CLASS="t" bgcolor="#F0F0F0" colspan="2">
<P class=line><FONT
color=#386490><B>1、引言</B><BR><BR> 二十世纪九十年代是计算机软件技术迅猛发展的时期,计算机软件的应用也同时得到了空前的发展。然而,随着软件应用的不断扩展,人们对软件功能的需求也愈来愈大,人们已不满足于现有软件的简单功能,他们期盼着软件应具有更多、更高级的具有一定智能的功能。于是,出现了智能软件技术。智能软件技术是一种基于人工智能、知识工程等的现代软件开发技术,它的覆盖面非常广,尤其是在专家系统、决策支持系统、ERP等软件开发中得到了广泛的应用。智能软件是软件发展的最终目标之一,所以智能软件技术也会逐步得到更深层次的发展和应用。<BR> 二十世纪九十年代也是计算机网络技术飞速发展的年代,尤其是Internet的应用更是渗透到了各行各业,并进入了千家万户。Internet改变了人们传统的工作与生活模式,借助于这一强大的工具,不仅可以实现网上办公、网上娱乐,而且利用电子商务还可以实现网上购物等。Internet的发展离不开基于Web的应用程序,它使得Internet具有强大的功能和友好的用户界面。这种基于Web的应用程序不仅改变了传统的软件开发模式,也为传统的软件技术提供了新的发展方向,智能软件技术自然也不例外。基于Web的智能软件技术已成为当今的热点,并具有广阔的发展和应用前景。<BR> 在智能软件中,推理是一个不可缺少的部分。如今,在许多基于Web的应用领域中,都存在着对推理引擎的需求,如基于Web的专家系统、联机分析系统、数据挖掘系统、智能搜索引擎等等。如果能够开发一个开放的、对象化的、基于Web的推理引擎,势必会节省大量的重复开发工作,从而促进基于Web的智能软件开发及发展,本文论述了如何使用当今比较流行的J2EE技术来实现一个这样的推理引擎。</FONT></P>
<P class=line><FONT
color=#386490><BR><B>2、J2EE技术简介</B><BR><BR> J2EE即Java2 Platform
Enterprise Edition,是一个方便于服务器方应用程序开发的中间件服务集,它利用Java2
技术来简化诸多与企业解决方案的开发、部署和管理相关的复杂问题。由于J2EE技术的核心就是Java2平台,所以它不仅继承了Java2平台的一些优点,如:平台无关性,安全性等,而且增加了一整套核心企业应用程序编程界面,而所有这些界面均为标准的模块化组件,其中包括:Servlets,EJB(Enterprise
JavaBeans),JSP,JDBC等。<BR><BR>2.1
Servlets<BR> Servlets是一些运行于Web服务器方的Java小程序,用来扩展Web服务器的功能。Servlets用特定的Java解决方案替代了其它的Web服务器方编程模式(如:CGI,ISAPI等),Servlets也同样使用HTTP协议与客户端进行通讯,所以有时也称Sevlets为"HTTP
Servlets"。Servlets 实现了一个用来处理客户与服务器之间消息的公共的请求/应答结构,Java Servlet
API为这个结构定义了完整的、标准的接口。<BR> Servlets可以嵌入在不同的Java服务器之中,因为我们用来编写Servlets的Servlet
API对于服务器环境和协议没有任何特殊的要求,所以Servlets具有很强的可移植性。<BR><BR>2.2
EJB<BR> EJB不是一个具体的产品,它是一个Java服务器端组件开发的规范,它的目的是为了定义一个用来开发面向对象分布式应用组件的标准方法。使用EJB,Java程序员可以将一些定义明确的程序块组合到一起,从而方便、快捷地建构起分布式应用程序。EJB规范在简化分布式应用程序开发复杂性方面也做了大量的工作,所以EJB程序员不必太担心事务处理、多线程、资源管理等方面的问题。<BR> EJB分为两种:会话EJB和实体EJB,会话EJB向客户提供一定的服务,如:特定的商业逻辑、数据库查询等;而实体EJB则代表数据对象,通常代表的是数据表记录集的一行,一个实体EJB可以同时与多个客户进行交互。<BR> 使用EJB可以使整个程序分块明确,并且EJB可以使用其它EJB或JDBC等服务,从而增强了分布式应用程序的可扩展性和性能;另外,EJB的定义明确又增强了整个系统程序的可靠性、可管理性和可移植性。<BR><BR>2.3
JDBC<BR> JDBC是一组API,其定义了用来访问数据源的标准Java类库,使用这个类库我们可以以一种标准的方法、方便地访问数据库资源。JDBC的目标是使应用程序开发人员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
<BR></FONT></P>
<P class=line><FONT color=#386490><BR><B>3
、系统设计</B><BR><BR> 推理引擎就是应用系统中用来完成推理功能的模块,也可以称作推理机。推理机一般包括调度器,执行器和一致性协调器三部分。调度器控制整个推理流程,使得推理可以按照一定的流程进行下去;执行器执行调度器所选定的动作,并且负责读取知识库中的知识和全局黑板中的信息;一致性协调器保持推理中间结果的一致性,主要用于反向推理中。<BR> 推理引擎根据知识表示的不同采取的控制策略也是不同的,在这里我们所实现的是基于产生式规则集的知识表示。选择这种知识表示是因为其具有很多的优点,尤其是其易于理解、易于获取、易于管理,并且在现今的大多数智能应用系统中都采用了这种知识表示方法。基于这种知识表示的推理引擎采?quot;识别-动作"的方式来循环执行规则,它的工作流程如图1:</FONT></P>
<P align=center class=line><FONT color=#386490><IMG height=425
src="1.gif" tppabs="http://www.chinajavaworld.com/doc/j2ee/images/1.gif" width=378><BR>图1.
基于规则的推理机流程 </FONT></P>
<P class=line><FONT
color=#386490> 面向对象、组件化的软件开发方法成为当今软件开发的趋势,为了开发一个通用的、具有良好的"即插即用"性的推理引擎,就必须采用这种软件开发思想及开发流程。基于这种思想,我们可以将推理机进行封装,只提供给用户必要的、简单的接口及部署规范,用户使用这些接口就可以得到想要的推理服务,这样就可以取得内部复杂、完备而外部通用、简单这一组件化软件的效果。一个典型的使用这种推理引擎的智能软件的体系结构如图2.。</FONT></P>
<P align=center class=line><IMG height=180
src="2.gif" tppabs="http://www.chinajavaworld.com/doc/j2ee/images/2.gif" width=252></P>
<P align=center class=line><FONT color=#386490>图2. 典型的智能软件系统结构</FONT></P>
<P class=line><FONT
color=#386490><BR><B>4、系统实现</B><BR><BR> Java语言是一种纯的面向对象的设计语言,与J2EE技术的结合,使得我们实现推理引擎变得更加简单,在整个实现的过程中,我们可以只关心内部结构的实现以及核心推理算法的实现,而不必花费太多的精力来考虑各个部分的接口实现问题,因为无论是Servlets还是EJB,其接口的定义和实现都十分方便。<BR> 我们将整个推理引擎实现成一个Java类包,用Servlets与外部应用系统进行数据交换;内部的推理核心使用无状态的会话EJB来实现,这样可以使多个用户同时使用,满足了基于Web应用程序多用户并发的特性;使用实体EJB通过JDBC访问知识库中的相关数据。整个推理引擎的结构如图3..</FONT></P>
<P align=center class=line><FONT color=#386490><IMG height=284
src="3.gif" tppabs="http://www.chinajavaworld.com/doc/j2ee/images/3.gif" width=346><BR>图3.
基于Web的推理引擎结构图</FONT></P>
<P class=line><FONT
color=#386490> 在这个结构中接收器用Servlet实现,即最终实现为一组Servlet类,它的基本功能是给用户提供使用这个推理引擎的服务,这些服务是基于HTTP协议的请求/应答模式的,用户只需在自己的HTML、ASP、JSP网页或其它的客户端应用程序中按照HTTP协议请求这个Servlet类并传入相应的输入事实数据,便可以启动这个推理引擎,推理引擎经过推理得到结论,通过Servlet中的Response对象发送给客户端。<BR> 知识库的创建需遵循我们给出的规范,在这个规范中我们给出了事实表、规则表、数据字典表、控制表和临时表的结构。我们用多个实体EJB代表知识库中的各个表的记录集,实体EJB通过JDBC访问知识库,其中的JDBC连接串、数据库服务器名称、用户名和口令以一个XML文件的形式部署在服务器方。<BR> 推理核心部分需构件一个知识库类库,这个类库可以表示出整个基于产生式规则的知识库的结构,将这个知识库类库用一个无状态的会话EJB进行封装,一方面它可以定义一套完备的接口供接收器Servlets启动推理服务,另一方面它还需与代表知识库的实体EJB进行数据交换:访问事实、规则,存取临时数据等等。<BR></FONT></P>
<P class=line><FONT
color=#386490><BR><B>5、特点</B><BR><BR> 用J2EE技术实现的对象组件式的基于Web的智能推理引擎比其它技术(如微软的DCOM技术)所实现的推理引擎更具有优势,其主要特点如下:<BR>层次清晰<BR> J2EE技术本身就是一个定义非常明确的基于Web应用开发的界面,在这个技术规范下所实现的推理引擎自然秉承了这一优点,整个引擎分三层:控制层、推理层、数据访问层,每一层都有完备的接口和明确的功能。<BR>有很强的可移植性<BR> Java语言的"平台无关性"、"一次编写,处处使用"的特色已经得到了软件开发界的认可,所以这个推理引擎也是平ㄎ薰氐模
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -