- 浏览: 2106197 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
无心流泪wan:
private static final Log log = ...
log4j Category.callAppenders Block -
yjxa901:
博主好: http://www.java.net/down ...
jdk debug -
aptech406328627:
大神,请接收我的膜拜吧,纠结了两天的问题,就这么让你给解决了 ...
java.lang.reflect.MalformedParameterizedTypeException -
xukunddp:
谢谢1楼,我也遇到,搞定了
java.lang.reflect.MalformedParameterizedTypeException -
di1984HIT:
学习了!!!!
jvmstat hsperfdata java.io.tmpdir
转载自:http://tech.csai.cn/sa/no000138.htm
Java规则引擎与其API应用详解 |
作者:Seraphim 来源:java家 http://www.csai.cn 2006年3月7日 |
本文对Java规则引擎与其API(JSR-94)及相关实现做了较详细的介绍,对其体系结构和API应用有较详尽的描述,并指出Java规则引擎,规则语言,JSR-94的相互关系,以及JSR-94的不足之处和展望。
复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(business logic),迫切需要分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时(即商 务时间)可以动态地管理和修改从而提供软件系统的柔性和适应性。规则引擎正是应用于上述动态环境中的一种解决方法。
本文第一部分简要介绍了规则引擎的产生背景和基于规则的专家系统,第二部分介绍了什么是规则引擎及其架构和算法,第三部分介绍了商业产品和开源项目实现 等各种Java规则引擎,第四部分对Java规则引擎API(JSR-94)作了详细介绍,讲解了其体系结构,管理API和运行时API及相关安全问题, 第五部分则对规则语言及其标准化作了探讨,第六部分给出了一个使用Java规则引擎API的简单示例,第七部分给予小结和展望。
1、 介绍
1.1 规则引擎产生背景
企业管理者对企业级IT系统的开发有着如下的要求:(1)为提高效率,管理流程必须自动化,即使现代商业规则异常复杂(2)市场要求业务规则经常变 化,IT系统必须依据业务规则的变化快速、低成本的更新(3)为了快速、低成本的更新,业务人员应能直接管理IT系统中的规则,不需要程序开发人员参与。
而项目开发人员则碰到了以下问题:(1)程序=算法+数据结构,有些复杂的商业规则很难推导出算法和抽象出数据模型(2)软件工程要求从需求-> 设计->编码,然而业务规则常常在需求阶段可能还没有明确,在设计和编码后还在变化,业务规则往往嵌在系统各处代码中(3)对程序员来说,系统已经 维护、更新困难,更不可能让业务人员来管理。
基于规则的专家系统的出现给开发人员以解决问题的契机。规则引擎由基于规则的专家系统中的推理引擎发展而来。下面简要介绍一下基于规则的专家系统。
1.2 基于规则的专家系统(RBES)
专家系统是人工智能的一个分支,它模仿人类的推理方式,使用试探性的方法进行推理,并使用人类能理解的术语解释和证明它的推理结论。专家系统有很多分类:神经网络、基于案例推理和基于规则系统等。
RBES包括三部分:Rule Base(knowledge base)、Working Memory(fact base)和Inference Engine(推理引擎)。它们的结构如下所示:
图1.基于规则的专家系统组成
如上图所示,推理引擎包括三部分:Pattern Matcher、Agenda和Execution Engine。Pattern
Matcher何时执行哪个规则;Agenda管理PatternMatcher挑选出来的规则的执行次序;Execution Engine负责执行规则和其他动作。
推理引擎通过决定哪些规则满足事实或目标,并授予规则优先级,满足事实或目标的规则被加入议程。存在两者推理方式:演绎法(Forward- Chaining正向链)和归纳法(Backward-Chaining反向链)。演绎法从一个初始的事实出发,不断地应用规则得出结论(或执行指定的动 作)。而归纳法则是从假设出发,不断地寻找符合假设的事实。
2、 规则引擎
2.1 业务规则
一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑。业务规则通常应该由业务分析人员和策略管理者开发和修
改,但有些复杂的业务规则也可以由技术人员使用面向对象的技术语言或脚本来定制。业务规则的理论基础是:设置一个或多个条件,当满足这些条件时会触发一个
或多个操作。
2.2 规则引擎
什么是规则引擎?规则引擎是如何执行规则的?这可以称之为"什么"与"如何"的问题。到底规则引擎是什么还是目前业界一个比较有争议的问题,在JSR- 94种也几乎没有定义。可以这样认为充分定义和解决了"如何"的问题,"什么"问题本质上也迎刃而解。也许这又是一种"先有蛋还是先有鸡"哲学争论。今后 标准规则语言的定义和推出及相关标准的制定应该可以给这样的问题和争论划上一个句号。本文中,暂且这样述说什么是规则引擎:规则引擎由推理引擎发展而来, 是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据规 则做出业务决策。
2.3 规则引擎的使用方式
由于规则引擎是软件组件,所以只有开发人员才能够通过程序接口的方式来使用和控制它,规则引擎的程序接口至少包含以下几种API:加载和卸载规则集的 API;数据操作的API;引擎执行的API。开发人员在程序中使用规则引擎基本遵循以下5个典型的步骤:创建规则引擎对象;向引擎中加载规则集或更换规 则集;向引擎提交需要被规则集处理的数据对象集合;命令引擎执行;导出引擎执行结果,从引擎中撤出处理过的数据。使用了规则引擎之后,许多涉及业务逻辑的 程序代码基本被这五个典型步骤所取代。
一个开放的业务规则引擎应该可以"嵌入"在应用程序的任何位置,不同位置的规则引擎可以使用不同的规则集,用于处理不同的数据对象。此外,对使用引擎的数量没有限制。
2.4 规则引擎架构与推理
规则引擎的架构如下图所示:
图2. 业务规则引擎架构
规则引擎的推理步骤如下:a. 将初始数据(fact)输入至工作内存(Working Memory)。b.
使用Pattern Matcher将规则库(Rules repository)中的规则(rule)和数据(fact)比较。c.
如果执行规则存在冲突(conflict),即同时激活了多个规则,将冲突的规则放入冲突集合。d. 解决冲突,将激活的规则按顺序放入Agenda。e.
执行Agenda中的规则。重复步骤b至e,直到执行完毕Agenda中的所有规则。
任何一个规则引擎都需要很好地解决规则的推理机制和规则条件匹配的效率问题。
当引擎执行时,会根据规则执行队列中的优先顺序逐条执行规则执行实例,由于规则的执行部分可能会改变工作区的数据对象,从而会使队列中的某些规则执行实 例因为条件改变而失效,必须从队列中撤销,也可能会激活原来不满足条件的规则,生成新的规则执行实例进入队列。于是就产生了一种"动态"的规则执行链,形 成规则的推理机制。这种规则的"链式"反应完全是由工作区中的数据驱动的。
规则条件匹配的效率决定了引擎的性能,引擎需要迅速测试工作区中的数据对象,从加载的规则集中发现符合条件的规则,生成规则执行实例。1982年美国卡耐基·梅隆大学的Charles L. Forgy发明了一种叫Rete算法,很好地解决了这方面的问题。目前世界顶尖的商用业务规则引擎产品基本上都使用Rete算法。
2.5 规则引擎的算法
大部分规则引擎产品的算法,基本上都来自于Dr. Charles
Forgy在1979年提出的RETE算法及其变体,Rete算法是目前效率最高的一个Forward-Chaining推理算法,Drools项目是
Rete算法的一个面向对象的Java实现,Rete算法其核心思想是将分离的匹配项根据内容动态构造匹配树,以达到显著降低计算量的效果。
3、 Java规则引擎
目前主流的规则引擎组件多是基于Java和C++程序语言环境,已经有多种Java规则引擎商业产品与开源项目的实现,其中有的已经支持JSR94,有的正朝这个方向做出努力,列出如下:
3.1 Java规则引擎商业产品
Java规则引擎商业产品主要有(Jess不是开源项目,它可以免费用于学术研究,但用于商业用途则要收费):
3.2 Java规则引擎开源项目
开源项目的实现主要包括:
Drools - Drools规则引擎应用Rete算法的改进形式Rete-II算法。从内部机制上讲,它使用了和Forgy的算法相同的概念和方法,但是增加了可与面向对象语言无缝连接的节点类型。
Mandarax 基于反向推理(归纳法)。能够较容易地实现多个数据源的集成。例如,数据库记录能方便地集成为事实集(facts sets),reflection用来集成对象模型中的功能。目前不支持JSR 94
OFBiz Rule Engine - 支持归纳法(Backward chaining).最初代码基于Steven John Metsker的"Building Parsers in Java",不支持JSR 94
JLisa - JLisa是用来构建业务规则的强大框架,它有着扩展了LISP优秀特色的优点,比Clips还要强大.这些特色对于多范例软件的开发是至关重要的.支持JSR 94
其它的开源项目实现有诸如Algernon, TyRuBa, JTP, JEOPS, InfoSapient, RDFExpert, Jena 2, Euler, JLog, Pellet OWL Reasoner, Prova, OpenRules, SweetRules, JShop2等等。
4、 Java规则引擎API(JSR-94)
4.1 简介
过去大部分的规则引擎开发并没有规范化,有其自有的API,这使得其与外部程序交互集成不够灵活。转而使用另外一种产品时往往意味需要重写应用程序逻辑 和API调用,代价较大。规则引擎工业中标准的缺乏成为令人关注的重要方面。2003年11月定稿并于2004年8月最终发布的JSR 94(Java规则引擎API)使得Java规则引擎的实现得以标准化。
Java规则引擎API由javax.rules包定义,是访问规则引擎的标准企业级API。Java规则引擎API允许客户程序使用统一的方式和不同 厂商的规则引擎产品交互,就像使用JDBC编写独立于厂商访问不同的数据库产品一样。Java规则引擎API包括创建和管理规则集合的机制,在 Working Memory中添加,删除和修改对象的机制,以及初始化,重置和执行规则引擎的机制。
4.2 简介Java规则引擎API体系结构
Java规则引擎API分为两个主要部分:运行时客户API(the Runtime client API)和规则管理API(the rules administration API)。
4.2.1规则管理API
规则管理API在javax.rules.admin中定义,包括装载规则以及与规则对应的动作(执行集 execution sets)以及实例化规则引擎。规则可以从外部资源中装载,比如说URI,Input streams, XML streams和readers等等.同时管理API提供了注册和取消注册执行集以及对执行集进行维护的机制。使用admin包定义规则有助于对客户访问运行规则进行控制管理,它通过在执行集上定义许可权使得未经授权的用户无法访问受控规则。
管理API使用类RuleServiceProvider来获得规则管理(RuleAdministrator)接口的实例.规则管理接口提供方法注册 和取消注册执行集.规则管理器(RuleAdministrator)提供了本地和远程的RuleExecutionSetProvider.在前面已提 及,RuleExecutionSetProvider负责创建规则执行集.规则执行集可以从如XML streams, input streams等来源中创建.这些数据来源及其内容经汇集和序列化后传送到远程的运行规则引擎的服务器上.大多数应用程序中,远程规则引擎或远程规则数据 来源的情况并不多见.为了避免这些情况中的网络开销,API规定了可以从运行在同一JVM中规则库中读取数据的本地 RuleExecutionSetProvider.
规则执行集接口除了拥有能够获得有关规则执行集的方法,还有能够检索在规则执行集中定义的所有规则对象.这使得客户能够知道规则集中的规则对象并且按照自己需要来使用它们。
4.2.2 运行时API
运行时API定义在javax.rules包中,为规则引擎用户运行规则获得结果提供了类和方法。运行时客户只能访问那些使用规则管理API注册过的规则,运行时API帮助用户获得规则对话并且在这个对话中执行规则。
运行时API提供了对厂商规则引擎API实现的类似于JDBC的访问方法.规则引擎厂商通过类RuleServiceProvider(类 RuleServiceProvider提供了对具体规则引擎实现的运行时和管理API的访问)将其规则引擎实现提供给客户,并获得 RuleServiceProvider唯一标识规则引擎的URL.
URL推 荐标准用法是使用类似"com.mycompany.myrulesengine.rules.RuleServiceProvider"这样的 Internet域名空间,这将有助于访问URL的唯一性.类RuleServiceProvider内部实现了规则管理和运行时访问所需的接口.所有的 RuleServiceProvider要想被客户所访问都必须用RuleServiceProviderManager进行注册。注册方式类似于 JDBC API的DriverManager和Driver。
运行时接口是运行时API的关键部分.运行时接口提供了用于创建规则会话(RuleSession)的方法,规则会话如前所述是用来运行规则的.运行时API同时也提供了访问在service provider注册过的所有规则执行集(RuleExecutionSets).规则会话接口定义了客户使用的会话的类型,客户根据自己运行规则的方式可以选择使用有状态会话或者无状态会话。
无状态会话的工作方式就像一个无状态会话bean.客户可以发送单个输入对象或一列对象来获得输出对象.当客户需要一个与规则引擎间的专用会话时,有状态会话就很有用.输入的对象通过addObject() 方法可以加入到会话当中.同一个会话当中可以加入多个对象.对话中已有对象可以通过使用updateObject()方法得到更新.只要客户与规则引擎间的会话依然存在,会话中的对象就不会丢失。
RuleExecutionSetMetaData接口提供给客户让其查找规则执行集的元数据(metadata).元数据通过规则会话接口(RuleSession Interface)提供给用户。
使用运行时Runtime API的代码片断如下所示:
RuleServiceProvider ruleProvider = RuleServiceProviderManager.getRuleServiceProvider ("com.mycompany.myrulesengine.rules. RuleServiceProvider"); RuleRuntime ruleRuntime = ruleProvider.getRuleRuntime(); StatelessRuleSession ruleSession = (StatelessRuleSession)ruleRuntime.createRuleSession(ruleURL, null, RuleRuntime.STTELESS_SESSION_TYPE); List inputRules = new ArrayList(); inputRules.add(new String("Rule 1")); inputRules.add(new Integer(1)); List resultRules = ruleSession.executeRules(inputRules); |
4.3 Java规则引擎API安全问题
规则引擎API将管理API和运行时API加以分开,从而为这些包提供了较好粒度的安全控制.规则引擎API并没有提供明显的安全机制,它可以和J2EE规范中定义的标准安全API联合使用.安全可以由以下机制提供,如Java
authentication and authorization service (JAAS),the Java cryptography
extension (JCE),Java secure Socket Extension (JSSE),或者其它定制的安全API.JAAS能被用来定义规则执行集的许可权限,从而只有授权用户才能访问。
4.4 异常与日志
规则引擎API定义了javax.rules.RuleException作为规则引擎异常层次的根类.所有其它异常都继承于这个根类.规则引擎中定义的异常都是受控制的异常(checked exceptions),所以捕获异常的任务就交给了规则引擎。规则引擎API没有提供明确的日志机制,但是它建议将Java Logging API用于规则引擎API。
4.5 JSR 94 小结
JSR 94 为规则引擎提供了公用标准API,仅仅为实现规则管理API和运行时API提供了指导规范,并没有提供规则和动作该如何定义以及该用什么语言定义规则,也没有为规则引擎如何读和评价规则提供技术性指导.JSR 94规范将上述问题留给了规则引擎的厂商.在下一节我将简要介绍一下规则语言。
5、 规则语言
JSR 94中没有涉及用来创建规则和动作的语言.规则语言是规则引擎应用程序的重要组成部分,所有的业务规则都必须用某种语言定义并且存储于规则执行集中,从而规则引擎可以装载和处理他们。
由于没有关于规则如何定义的公用规范,市场上大多数流行的规则引擎都有其自己的规则语言,目前便有许多种规则语言正在应用,因此,当需要将应用移植到其 他的Java规则引擎实现时,可能需要变换规则定义,如将Drools私有的DRL规则语言转换成标准的ruleML,Jess规则语言转换成 ruleML等。这个工作一般由XSLT转换器来完成。
多种规则语言的使用使得不同规则引擎实现之间的兼容性成为问题.通用的规则引擎API或许可以减轻不同厂家API之间的问题,但公用规则语言的缺乏将仍然阻碍不同规则引擎实现之间的互操作性.尽管业界在提出公用规则语言上做出了一些努力, 比如说RuleML,SRML的出现,但距离获得绝大部分规则引擎厂商同意的公用标准还有很长的路要走。
6、 Java规则引擎API使用示例
6.1 设置规则引擎
Java规则引擎的管理活动阶段开始于查找一个合适的javax.rules.RuleServiceProvider对象,这个对象是应用程序访问规 则引擎的入口。在J2EE环境中,你可能可以通过JNDI获得RuleServiceProvider。否则,你可以使用 javax.rules.RuleServiceProviderManager类:
javax.rules.RuleServiceProviderManager
class: String implName = "org.jcp.jsr94.ri.RuleServiceProvider"; Class.forName(implName); RuleServiceProvider serviceProvider = RuleServiceProviderManager.getRuleServiceProvider |
拥有了RuleServiceProvider对象,你就可以获得一个javax.rules.admin.RuleAdministrator类。从 RuleAdministrator类中,你可以得到一个RuleExecutionSetProvider,从类名可以知道,它用于创建 javax.rules.RuleExecutionSets对象。RuleExecutionSet基本上是一个装入内存的,准备好执行的规则集合。
包javax.rules.admin包括两个不同的RuleExecutionSetProvider类。 RuleExecutionSetProvider类本身包括了从Serializable对象创建RuleExecutionSets的方法,因此在规 则引擎位于远程服务器的情况下,仍然可以使用RuleExecutionSetProvider类,构造器的参数可以通过RMI来传递。另一个类是 LocalRuleExecutionSetProvider,包含了其他方法,用于从非Serializable资源(如 java.io.Reader-本地文件)创建RuleExectionSets。假设拥有了一个RuleServiceProvider对象,你可以从 本地文件rules.xml文件创建一个RuleExectionSet对象。如以下的代码所示:
RuleAdministrator admin = serviceProvider.getRuleAdministrator();
HashMap properties = new HashMap(); properties.put("name", "My Rules"); properties.put("description", "A trivial rulebase"); FileReader reader = new FileReader("rules.xml"); RuleExecutionSet ruleSet = null; try { LocalRuleExecutionSetProvider lresp =admin.getLocalRuleExecutionSetProvider(properties); ruleSet = lresp.createRuleExecutionSet(reader, properties); } finally { reader.close(); } |
接下来,你可以使用RuleAdministrator注册获得的RuleExecutionSet,并给它分配一个名称。在运行时,你可以用同一个名 称创建一个RuleSession;该RuleSession使用了这个命名的RuleExecutionSet。参见下面的用 法:admin.registerRuleExecutionSet("rules", ruleSet, properties);
6.2 执行规则引擎
在运行时阶段,你可以参见一个RuleSession对象。RuleSession对象基本上是一个装载了特定规则集合的规则引擎实例。你从 RuleServiceProvider得到一个RuleRuntime对象,接下来,从javax.rules.RuleRuntime得到 RuleSession对象。
RuleSession分为两 类:stateful和stateless。它们具有不同的功能。StatefulRuleSession的Working Memory能够在多个方法调用期间保存状态。你可以在多个方法调用期间在Working Memory中加入多个对象,然后执行引擎,接下来还可以加入更多的对象并再次执行引擎。相反,StatelessRuleSession类是不保存状态 的,为了执行它的executeRules方法,你必须为Working Memory提供所有的初始数据,执行规则引擎,得到一个内容列表作为返回值。
下面的例子中,我们创建一个StatefulRuleSession实例,添加两个对象(一个Integer和一个String)到Working Memory,执行规则,然后得到Working Memory中所有的内容,作为java.util.List对象返回。最后,我们调用release方法清理RuleSession:
RuleRuntime runtime = rsp.getRuleRuntime();
StatefulRuleSession session=(StatefulRuleSession)runtime.createRuleSession("rules", properties,RuleRuntime.STATEFUL_SESSION_TYPE); session.addObject(new Integer(1)); session.addObject("A string"); session.executeRules(); List results = session.getObjects(); session.release(); |
7、 结束语
Java规则引擎API(JSR-94)允许客户程序使用统一的方式和不同厂商的规则引擎产品交互,一定程度上给规则引擎厂商提供了标准化规范。但其几 乎没有定义什么是规则引擎,当然也没有深入到规则是如何构建和操纵的,规则调用的效用,规则与Java语言的绑定等方面。并且JSR-94在对J2EE的 支持上也不足。规则语言的标准化,JSR-94的进一步的充实深化都有待研究。
发表评论
-
groovy shell 安全
2017-01-18 11:29 1202groovy 可以动态执行代码,但是我们也想他在一定的沙箱中 ... -
eclipse 插件
2016-11-17 12:00 610eclipse remote editor https: ... -
java method signature
2013-08-12 21:07 2718case 'B': _type = T_BYT ... -
eclipse显示GC的按钮
2013-06-18 19:32 4334同事说idea的一个比较亮的功能是可以手动去GC,然后机器 ... -
好用的maven插件收集
2013-02-22 10:40 13491:Maven Shade Plugin(把所有jar打到一 ... -
查看JVM Flags
2013-01-09 14:22 1334-XX:+PrintFlagsFinal Jav ... -
开源的好用JVM问题排查工具
2013-01-08 09:45 1860TProfiler https://github.com/ ... -
java ocr
2013-01-04 13:06 3019java OCR相关的资料记录 Clara OC ... -
eclipse ast
2012-12-23 22:36 1012Eclipse JDT - Abstract Syntax ... -
正则生成器
2012-12-23 22:24 977能够依据普通文本给出可能的正则组合 http://ww ... -
Kilim
2012-12-14 23:40 1109Java 开发 2.0: Kilim 简介 h ... -
IO Design Patterns Reactor VS Proactor
2012-11-13 01:34 15091:两种高性能I/O设计模式(Reactor/Proactor ... -
antlr
2012-11-13 00:36 12191:使用 Antlr 开发领域语言 http://www.i ... -
java singalException
2012-11-12 21:39 982之前看到毕大师一封关于异常多造成的cpu us很高的分析邮件, ... -
log4j Category.callAppenders Block
2012-11-06 17:01 10107经常在高并发下就遇到log4j用错引起的线程block住的问题 ... -
Troubleshooting JDK
2012-10-26 14:13 1524收集整理下JDK自带的关于 Troubleshooting 的 ... -
JavaOne 2011 Content Catalog
2012-10-14 17:12 1168上一篇讲javaone 2012,这次找了下2011的资料。 ... -
JavaOne 2012 Content Catalog
2012-10-13 16:07 1309转载自:http://marxsoftware.blogspo ... -
Memory usage of Java
2012-10-01 17:30 1218用JDK自带的api计算size,每次都会有个多余的12,看了 ... -
GC roots
2012-10-01 17:07 18501:GC roots http://www.yourkit. ...
相关推荐
Java设计模式详解涵盖了在Java编程中广泛使用的一些经典设计模式。这些模式不仅有助于提高代码的可读性、可维护性和可扩展性,还能促进团队之间的沟通与协作。下面,我们将深入探讨几个重要的Java设计模式。 1. ...
#### TextView的API详解 **1.1 结构** `TextView`是Android中用于展示文本的重要组件。它继承自`View`类,并且是`android.widget`包中的一个核心成员。`TextView`的类结构如下所示: - `java.lang.Object` - `↳...
《Tomcat与Java Web开发技术详解》是一本深入探讨Java Web应用服务器Tomcat及与其相关的开发实践的专业书籍。源码提供了书中的实例代码,确保读者能够动手实践,加深理解。以下将围绕标题和描述中涉及的关键知识点...
### 嘉讯MAS2.0 Java API接口详解 #### 一、引言 随着信息技术的发展,企业级应用越来越依赖于高效稳定的消息传递系统。**中国移动代理服务器(MAS)**作为一套集成移动通信功能的企业应用平台,为企业提供了一个...
《工行API SDK详解及应用实践》 工行API SDK,全称为“工商银行应用程序接口软件开发工具包”,是工商银行为了方便开发者与其系统进行交互而提供的一个重要工具。此SDK的版本为"icbc-api-sdk-cop_v2_20210224.zip...
### JAVA编程笔记知识点详解 #### 1. Java可以做什么? - **开发桌面应用程序**:Java 可以用于开发各类桌面应用程序,例如银行软件、商场结算系统等。这些应用程序通常需要良好的用户界面和强大的后台处理能力。 ...
"23种模式详解-java附详细文档"的资源正是为了帮助学习者深入理解这23个经典的设计模式。下面,我们将详细探讨这些设计模式及其在Java中的应用。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在...
**标题详解:** "hibernate-jpa-2.1-api 1.0.0.Final API" 这个标题指的是Hibernate对Java Persistence API (JPA) 2.1规范的实现,版本为1.0.0.Final。Hibernate是Java领域中最受欢迎的对象关系映射(ORM)框架之一...
内容概要:本文详细介绍了如何利用Java编程语言读取Excel表格文件并将数据映射到自定义的数据实体类(DataEntry)中,通过解析Excel中的行数据,构建日期(String类型)作为键值,与其相对应的一列多条字符串数据...
"海康java测试demo"是该公司为开发者提供的一种Java应用程序示例,旨在帮助用户了解如何通过编程方式与其设备进行交互,特别是针对图片的实时抓拍和后续处理。 一、Java测试DEMO的核心功能 1. 实时抓拍:DEMO主要...
这意味着文档可能包含了Java标准库的API详解,包括核心类、集合、多线程、网络编程等,以及如何有效地使用它们进行开发。 综合以上信息,这份“软件开发帮助文档(java)2-2”可能是一个非常全面的资源,对于开发者来...
这份"Java5.0中方帮助文档"是针对中国开发者量身定制的官方指南,包含了丰富的API详解、示例代码和编程指南,对于Java初学者和资深开发者来说都是宝贵的资源。 1. **泛型(Generics)** Java 5.0引入了泛型,允许...
- **源文件命名规则**:Java源文件的文件名必须与其公共类(`public class`)的名称完全一致,包括大小写。 - **主方法**:每一个Java应用程序都必须有一个`public static void main(String[] args)`方法作为程序的...
- **命名规则:** 源程序文件的名称必须与其包含的公共类名相同,并且扩展名为`.java`。 - **编译结果:** 编译后的Java源程序会生成字节码文件(`.class`文件),这些文件包含了可以被JVM解释执行的指令。 **知识...
Java SE(标准版)提供基础平台,而Java EE(企业版)则包含用于构建分布式应用程序的API和服务,如Servlet和JSP,这些都是Java后台开发的基础。 2. **MySQL**:MySQL是一款开源的关系型数据库管理系统,广泛用于...
### IT知识解析:第七届全国信息技术应用水平大赛Java程序设计预赛主观题 #### 赛事背景与目的 第七届全国信息技术应用水平大赛旨在通过一系列竞赛项目,检验与提升参赛者在信息技术领域的实践能力和创新思维。...
### Java词汇大全知识点详解 #### AbstractWindowToolkit (AWT) - **定义**: 抽象窗口工具包(Abstract Window Toolkit),是一组用于构建图形用户界面(GUI)的类。 - **功能**: AWT 提供了基本的图形用户界面构建...
ArcGIS提供了丰富的API,允许开发者使用各种编程语言与其进行集成。其中,ArcGIS Java SDK(Software Development Kit)是专门用于Java开发的工具包,它使得开发者能够创建桌面、服务器以及Web应用,实现地图服务的...