- 博客(0)
- 资源 (12)
空空如也
Drools规则引擎介绍
“检查申请人信息是否合法”:用来存放检查申请人信息是否合法的四条规则,对申请人信息进行合法性检查。
“判断是否合法”:判断当前申请人信息是否合法,如果合法那么将选择“合法”线路,否则选择“非法”线路。
“合法申请人信用卡发放”:存放发放信用卡的五条规则,对申请人的信息进行检查,从而为申请人提供合适的信用卡额度。
两个结束节点分别用来结束合法与非法的信用卡申请信息。
/**
如果申请人既没房也没车,同时学历为大专及以下,并且月薪少于5000,那么不通过。
*/
rule "检查学历与薪水1"
ruleflow-group "applycheck"
lock-on-active true
salience 1
when
Current user
-degree is 1
-has car is false
-has house is false
-salary is less then 5000
then
So current user apply is invalid
end
/**
如果申请人既没房也没车,同时学历为大专或本科,并且月薪少于3000,那么不通过。
*/
rule "检查学历与薪水2"
ruleflow-group "applycheck"
lock-on-active true
salience 2
when
Current user
-has car is false
-has house is false
-salary is less then 3000
-current user degree is 2 or 3
then
So current user apply is invalid
End
……
2010-08-20
Drools4.0官方使用手册中文
第一章. Drools 4.0 发布版标注
1.1. Drools 4.0的新内容
Drools4.0是从之前的Drools3.0.x系列以来的一次主要更新。在语言表达式,引擎性能和工具实用性方面都有一整套的新特性开发完成。下面列出一些最引人注意的更新列表。
1.1.1. 语言表达式增强
• 新的条件元素: from, collect, accumulate 和forall
• 新的字段约束操作: not matches, not contains, in, not in, memberOf, not memberOf
• 新的自索引字段: this
• 对条件元素嵌套的完全支持,对一阶逻辑的完全支持
• 支持使用&& 和||连接多个约束条件
• 语法分析器的增强以去除之前的一些语言约束,如字符转码和关键字冲突
• 支持插件式语言,以及对MVEL脚本语言的完全支持
• 完全重写的DSL引擎,允许完全的本地化
• Fact属性对于返回值约束和内嵌求值的自动变换
• 支持嵌套访问,属性导航和简化的集合、数组以及映射的语法
• 对XML规则的增强支持
1.1.2. 核心引擎增强
• 对于元数据类型的本地支持,避免经常性的自动封包操作
• 支持透明的可选的影子Fact
• 对于复杂规则的Rete网络性能增强
• 支持规则流
• 支持有状态与无状态的Working Memory(规则引擎Session)
• 支持异步Working Memory操作
• 规则代理(Agent)提供热部署机制和BRMS集成
• 对于规则冲突解决方案的动态salience值
• 支持参数化查询
• 支持暂停命令
• 支持顺序执行模式
• 支持插件式的全局变量转换器
1.1.3. IDE 增强
• 支持调试中的规则断点
• 对于规则流的所见即所得功能
• 对于规则编制的新的向导编辑器
• 支持所有新的引擎特性
1.1.4. 业务规则管理系统 - BRMS
• 新的BRMS工具
• 具有Web2.0 Ajax特性的用户友好的Web界面
• Package配置
• 通过向导编辑器与文本编辑器,规则的作者更容易修改规则
• Package编译和部署
• 通过使用Rule Agent简化部署
• 通过分类组织规则,简化规则的查找
• 可版本化,你可以很容易的使用之前保存的版本替换现在的一套规则
• 与JCR兼容的规则仓库
1.1.5. 其它增强
• 减少了依赖类库和更少的内存占用
1.2. 从Drool3.0.x向Drools4.0.x更新的提示
之前说到,Drools4.0是自Drools3.0.x系列以来的重要关键更新。但不幸的是为了达到这次发布的目标,带来了一些向后兼容性的问题,如邮件列表和博客中所提到的。
本节简单介绍一下如何从Drools3.0.x向Drool4.0.x升级
1.2.1. API 变更
只有很少的API变更是对于常规用户可见并需要调整的。
1.2.1.1. Working Memory 创建
Drools3.0.x中只有一种Working Memory类型,它的是以有状态Working Memory的方式工作的。Drool4.0.x提供两个独立的有状态与无状态working memory,现在被称为Rule Session。在Drools3.0.x中建立Working Memory的代码是:
Example 1.1. Drools 3.0.x: Working Memory 创建
WorkingMemory wm = rulebase.newWorkingMemory();
在Drools 4.0.x中必须变成:
Example 1.2. Drools 4.0.x: 有状态Rule Session创建
StatefulSession wm = rulebase.newStatefulSession();
StatefulSession对象与Drools3.0.x中的WorkingMemory对象的行为相同(它甚至继承了WorkingMemory接口),因此除了创建代码以外这个调整不会带来其它问题。
1.2.1.2. Working Memory 操作
Drools 4.0.x支持可插入的语言,并且已经内建了对Java和MVEL脚本语言的支持。为了避免关键字冲突,working memory的一些操作被重新命名如下:
Table 1.1. Working Memory Actions equivalent API methods
Drools 3.0.x Drools 4.0.x
2010-08-20
iText中文教程 iText中文实例
第一部分 iText的简单应用
第一章 创建一个Document
利用iText五步创建一个PDF文件:helloword。
第一步,创建一个 iTextSharp.text.Document对象的实例:
Document document = new Document();
第二步,为该Document创建一个Writer实例:
PdfWriter.getInstance(document, new FileStream("Chap0101.pdf", FileMode.Create));
第三步,打开当前Document
document.Open();
第四步,为当前Document添加内容:
document.Add(new Paragraph("Hello World"));
第五步,关闭Document
document.Close();
完整的代码见示例代码0101。
在例中,不难看出,制作一个PDF文件是非常简单的。
注:如果你将例中“document.Add(new Paragraph("Hello World"));”中的字符串“Hello Word”换成中文,如“这是我的第一个PDF文件”,产生的结果一定让你大失所望,因为生成的PDF文件中并没有将中文显示出来,不要担心,在第9章中 要专门讲解字体问题,中文显示也就迎刃而解了,如果不能正确显示中文,也就没有必要翻译本文了。
下面对这几步做详细介绍。
第一步 创建一个Document实例:
iTextSharp.text.Document-object共有三个构造函数:
public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize,
int marginLeft,
int marginRight,
int marginTop,
int marginBottom);
第一个构造函数以A4页面作为参数调用第二个构造函数,第二个构造函数以每边36磅页边距为参数调用第三个构造函数
页面尺寸:
你可以通过指定的颜色和大小创建你自己的页面,示例代码0102创建一个细长的浅黄色背景的页面:
Rectangle pageSize = new Rectangle(144, 720);
pageSize.BackgroundColor = new Color(0xFF, 0xFF, 0xDE);
Document document = new Document(pageSize);
通常,你不必创建这样的页面,而可以从下面页面尺寸中选择:
A0-A10, LEGAL, LETTER, HALFLETTER, _11x17, LEDGER, NOTE, B0-B5, ARCH_A-ARCH_E, FLSA 和 FLSE
大多数情况下使用纵向页面,如果希望使用横向页面,你只须使用rotate()函数:
Document document = new Document(PageSize.A4.rotate());
详细代码见示例代码0103。
页边距:
当创建一个文件时,你还可以定义上、下、左、右页边距:
Document document = new Document(PageSize.A5, 36, 72, 108, 180);
在示例代码0104中你可以看到该文档有一个0.5英寸的左边距和1英寸的右边距,上边距为1.5英寸,下边距为2.5英寸。
说明:
当创建一个矩形或设置边距时,你可能希望知道该用什么度量单位:厘米、英寸或象素,事实上,默认的度量系统以排版单位磅为基础得出其他单位的近似值,如1英寸=72磅,如果你想在A4页面的PDF中创建一个矩形,你需要计算以下数据:
21 厘米 / 2.54 = 8.2677 英寸
8.2677英寸* 72 = 595 磅
29.7 厘米 / 2.54 = 11.6929 英寸
11.6929英寸* 72 = 842 磅
默认边距为36磅即半英寸。
如果你修改了页面尺寸,仅仅影响到下一页,如果你修改了页边距,则影响到全部,故慎用。
关于页面的初始值,请参考第三步。
第二步 创建Writer实例
一旦创建了document,我们可以创建该文档的多个Writer的实例,所有这些Writer实例均继承自抽象类“iText
2010-08-20
spring web flow demo
Spring Web Flow 2.0 入门
本教程分析了 Spring Web Flow 2.0 的技术要点,并且通过创建一个示例应用程序,展示了 Spring Web
Flow 2.0 的基本知识。
开始之前
关于本教程
本教程通过一个简化的购物车应用,介绍了如何使用 Spring Web Flow 2.0 来构建 Web 应用程序。本教
程以讲解实例为主,为了读者更好地理解 Spring Web Flow ,也有部分理论的解释。
先决条件
本教程要求读者具备 Java Web 应用的基本知识、熟悉 Spring Framework 的应用。
系统要求
运行本教程中的示例,需要下列工具:
• JDK 1.6.0+
• Spring Framework 2.5.4+ 及其依赖项
• Spring Web Flow 2.0.2
• Tomcat 6.0.0+ (为支持 EL , Tomcat 须 6.0 及以上版本)
• eclipse 3.2.2+
Spring Web Flow 2.0 概述
Spring Web Flow 2.0 新特性
Spring Web Flow 是 Spring 的一个子项目,其最主要的目的是解决跨越多个请求的、用户与服务器之间
的、有状态交互问题。最新版本为 2.0 ,相比于 1.x 版的 Spring Web Flow ,有以下几个值得注意的新
特性。
• 与 Spring MVC 深度整合
Spring Web Flow 1.x 是个自成体系的框架,可与 Spring Web MVC 、 Struts 、 JSF 等 Web
框架整合。最新的 Spring Web Flow 2.0 则明确声明是基于 Spring Web MVC 的一个扩展。
• 提供了处理 Ajax 事件的能力
Ajax 事件的处理与 Web Flow 事件的处理相一致,在处理完成后, flow 即可刷新客户端相关
界面代码。
• 与 JSF 整合
通过将 JSF 层层包装,最终可在 Spring Framework 和 Spring Web Flow 中使用 JSF 的各种
组件。
• 与 Spring Security (原 Acegi Security )整合
只需将某个 flow 声明为“ secured ”,即可利用 Spring Security 来确定当前用户是否有权限运
行 flow 、激发事件等等。
• 更简洁的配置
官方的数据说同一个 flow , 2.0 版的配置比 1.x 版的配置少 50% 的 XML 代码。
2
• 重用更方便
Spring Web Flow 2.0 提供了 flow 的继承,重用即有的 flow 代码更加容易。
• 重用更方便
Spring Web Flow 2.0 提供了 flow 的继承,重用即有的 flow 代码更加容易。
购物车用例
要了解 Spring Web Flow 是什么东西,最好的办法莫过于查看示例,图 2 展示了一个简化的购物车的流
程。
图 1 购物车示例
图 2 所示流程用 Spring Web Flow 2.0 的配置文件表示如下:
清单 1 用 Spring Web Flow 语义表达购物车流程
……
<flow>
<view-state id="viewCart">
<transition on="submit" to="viewOrder"/>
</view-state>
<view-state id="viewOrder">
<transition on="confirm" to="viewConfirmed"/>
</view-state>
<view-state id="viewConfirmed">
<transition on="returnToIndex" to="returnToIndex"/>
</view-state>
<end-state id="returnToIndex"/>
</flow>
清单 1 省略了许多技术细节,展示的只是一个业务的流程,主要是为了让大家对 Spring Web Flow 的语
义有个初始的印象。从清单 1 中,应注意到一个很重要的特征—— Spring Web Flow 语义与 Servlet API
3
无关。更确切地讲, Spring Web Flow 语义关注的是业务的流程,并未与 Sun 公司的 Web 规范紧密结
合,这种描述是更高层次的抽象,差不多是在建模的角度来描述业务流程。
不过, Spring Web Flow 也并非只有抽象,现在还没有哪一种工具或语言可以将一个模型直接转换成相应
的应用程序。 Spring Web Flow 更像是抽象建模和技术细节的混血儿,相比于湮没在繁多的控制器和视图
中的 Web MVC 应用来讲, Spring Web Flow 提供了如清单 1 所描述的更高层次的抽象,但同时它也
整合了像 Unified EL 这样的工具来控制技术上的细节。
Spring Web Flow 的基本元素
Flow 可看作是客户端与服务器的一次对话( conversation )。 Flow 的完成要由分多个步骤来实现,在
Spring Web Flow 的语义中,步骤指的就是 state 。 Spring Web Flow 提供了五种 state ,分别是 Action
State 、 View State 、 Subflow State 、 Decision State 、 End State ,这些 state 可用于定义 flow 执
行过程中的各个步骤。除了 End State 外,其他 state 都可以转换到别的 state ,一般通过在 state 中
定义 transition 来实现到其他 state 的转换,转换的发生一般由事件( event )来触发。
什么情况下可以使用 Spring Web Flow?
前面讲了, Spring Web Flow 提供了描述业务流程的抽象能力,但对一种 Web 开发技术而言,仅有这
些是不够的。同时, Spring Web Flow 是不是能够取代其他 Web MVC 技术?或者在任何情况下都应优
先使用 Spring Web Flow ?要回答这些问题,先来看一下 Spring Web Flow 所着力解决的技术问题。
Web 应用程序的三种范围
Java Servlet 规范为 Web 应用程序中用到的各种对象规定了三种范围( scope ),分别是 request 范
围、 session 范围和 application 范围。
• request 范围中的对象是跟客户的请求绑定在一起的,每次请求结束都会销毁对象,而新的请求
过来时又会重新创建对象。 request 范围适合存放数据量较大的临时数据。
• session 范围中的对象是跟会话( session )绑定在一起的,每次会话结束会销毁这些对象,而
新的会话中又会重新创建。 HTTP 协议本身是无状态的,服务器和客户端要实现会话的管理,只
能借助于一些辅助的手段,如在协议的数据包中加一些隐藏的记号,等等。 session 范围适合存
放本次会话需要保留的数据。
• application 范围的对象是跟应用程序本身绑定在一起,从 Servlet API 的角度来讲,就是存放在
ServletContext 中的对象,它们随着 Servlet 的启动而创建, Servlet 关闭时才会销毁。
application 范围适合存放那些与应用程序全局相关的数据。
现实开发中最令人头痛的莫过于 session 范围, Java Servlet 规范指明可在 web.xml 中按如下方式配置
session 的有效时间为100 分钟:
清单 2 web.xml 中 session 的配置
<session-config>
<session-timeout>100</session-timeout>
</session-config>
然而,现实中的 session 范围更像是“鸡肋”,把大量数据放入 session 会导致严重的效率问题,
2010-08-20
Spring2.0帮助文档
Core 封装包是框架的最基础部分,提供IoC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。
构建于Core封装包基础上的 Context封装包,提供了一种框架式的对象访问方法,有些象JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定),事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器。
DAO 提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。 并且,JDBC 封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJOs(plain old Java objects)都适用。
ORM 封装包提供了常用的“对象/关系”映射APIs的集成层。 其中包括JPA、JDO、Hibernate 和 iBatis 。利用ORM封装包,可以混合使用所有Spring提供的特性进行“对象/关系”映射,如前边提到的简单声明性事务管理。
Spring的 AOP 封装包提供了符合 AOP Alliance规范的面向方面的编程(aspect-oriented programming)实现,让你可以定义,例如方法拦截器(method-interceptors)和切点(pointcuts),从逻辑上讲,从而减弱代码的功能耦合,清晰的被分离开。而且,利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中,这有点象.Net的attribute的概念。
Spring中的 Web 包提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet listeners进行IoC容器初始化和针对Web的application context。当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。
Spring中的 MVC 封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种 清晰的 分离模型,在领域模型代码和web form之间。并且,还可以借助Spring框架的其他特性。
2010-05-20
软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档
软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档软件测试教学文档
2010-05-03
jspSmartUpload使用详解(上传下载组件)
jspSmartUpload是由www.jspsmart.com网站开发的一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点:
2009-06-11
Linux 命令全集.chm
本手册由Linhan整理,编写。版权所有者为Linhan。
您可以免费的使用、分发本手册。但未经Linhan的授权许可不得擅自进行篡改、反编译,及将其全部或部分用于商业用途。
本手册受著作权法和国际公约的保护,作者保留对本手册及本声明的最终修改权。
本手册的内容参考网络文档制作,原著作权归原作者所有。
本手册使用Mainsoft(R)的HTML Help格式制作。
2009-06-11
mysql帮助手册中文翻译版
这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问dev.mysql.com。 原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。
2009-06-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人