知识大全 在你的企业级java应用中使用Drools(图)
Posted 框架
篇首语:若要功夫深,铁杵磨成针。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在你的企业级java应用中使用Drools(图)相关的知识,希望对你有一定的参考价值。
在你的企业级java应用中使用Drools(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
什么是Drools Drools 是一个基于Charles Fy s的Rete算法的 专为Java语言所设计的规则引擎 Rete算法应用于面向对象的接口将使基于商业对象的商业规则的表达更为自然 Drools是用Java写的 但能同时运行在Java和 Net上 Drools Drools 被设计为可插入式的语言实现 目前规则能用Java Python和Groovy实现 更为重要的是 Drools提供了声明式程序设计(Declarative Programming) 并且使用域描述语言(Domain Specific Languages (DSL))-专为你的问题域定义了某种模式的Xml 它已经足够灵活到可以用来描述你的问题域 DSLs包含的XML元素(Element)和属性(Attribute)代表了问题域中各种要素 这段时间企业级Java简直能让你睡着 有多少J EE EJB应用程序只是从网页提取数据并把它们存入到数据库中?但开发者真正应该开发和维护的却是他们应用程序中复杂的商业逻辑 这个问题不仅仅适用于将要新应用 而且渐渐地 也适用于那些长期运行的商业核心应用 它们的内部逻辑也需要经常改变 而且往往要求在一个非常短的时间内 在以前的文章中 用Drools让你的商业逻辑使用框架 我介绍了Drools框架 展示了它如何用来组织复杂的商业逻辑 Drool用一组简单的 众所周知的事物替换了许多缠杂的if…then表达式 如果你经历过和商业客户的会议 并为他们提出的想要实现的东西的复杂程度搞得头痛 或许你应该考虑一下像Drools这样的规则引擎了 这篇文章将向你展示如何在企业级Java应用中使用Drools 一路到底的框架 大多数开发者都有自己喜爱的框架 无特定顺序 它们包括表现层框架(Struts JSF Cocoon和Spring) 持久化框架(JDO Hibernate Cayenne and Entity Beans)以及结构框架(EJB 又是Spring Pico和Excalibur) 还有其它很多 每种框架都各有所长 给开发者提供子许多 即开即用 的功能 使用框架来部署应用意味着你避免了许多让人厌烦的细节 让你集中注意力到关键之处 到目前为直 在框架所能做的事中仍然有一个缺口 那就是商业逻辑没有框架 像EJB和Spring这样的工具虽好 但它们却几乎没有提及怎么组织你的那些if …then语句 把Drools加到你的开发工具箱中意味着现在你可以 一路到底 的使用框架来构建你的应用程序 图 显示了这样的一个应用 > > 这篇文章将基于我们已经了解的Drools框架的功能 这些功能可以让我们构建这样的一个应用 ] 我什么时候应该使用规则引擎? 如果你有一把锤子 那所有的东西都看起来都像钉子 这句话在软件工程领域几乎成了陈词滥调了 虽然规则引擎能解决我们的许多问题 但确实值得认真考虑一下规则引擎对我们的企业级Java应用是否合适 需要问的问题有 ● 我的应用程序有多复杂?对于那些只是把数据从数据库中传入传出 并不做更多事情的应用程序 最好不要使用规则引擎 但是 当在Java中有一定量的商业逻辑处理的话 可以考虑Drools的使用 这是因为很多应用随着时间的推移越来越复杂 而Drools可以让你轻松应对这一切 ● 我的应用的生命周期有多久?这个问题的正确答案往往是 令人惊讶的长 ――还记得那些认为他们的程序不会苟活到 年的大型机的程序员吗?使用规则引擎将会在中长期得到好处 像这篇文章所展示的那样 甚至原型都能从Drools与灵活方法的组合中获益 让 原型系统 转化成生产系统 ● 我的应用需要改变吗?唯一能确定的是你的需求将会改变 无论是在开发过程中或是在开发完成以后 Drools使用一个或多个简单易配的XML文件帮你来应对这一切 那么性能呢? 如果你正在写一个企业级应用 很有可能它会扩展到成百(如果不是成千)的用户 你已经知道现有的Java和J EE应用能做到这一点 但一个使用了Drools的应用对这一压力的表现如何?答案是 令人吃惊的好 大多数开发者只是因为不愿 失控 而依赖于他人的代码(比如 某种框架) 想想这个 Drools不仅可以让你的应用和 传统 的编程方法一样快 甚至可以更快 看下面 ● 避免糟糕的代码 Drools引导开发者去做 正确的事 你可以确定你正在写的代码是好的 但你的开发伙伴呢?你可以同样这样说吗?使用框架可以让你更轻松地写出更快 更好的代码 ● 优化过的框架 你有多少次看见商业逻辑重复地从数据库中提取相同的信息 从而降低了整个应用的速度?如果正确使用的话 Drools不仅仅能够记住信息 而且还能记住以往使用该信息进行测试的结果 从而大幅提升应用的速度 ● Rete算法 很多次我们并不是真正需要使用 if 条件 被Drools实现的Rete算法 可以用一个优化的方法替换掉所有的 if…then 表达式 需要重点提及的是 Rete算法在使用更多的内存来降低运行时延迟方面作了折衷 当然这在现代的应用服务器中并不是一个问题 我们也并不推荐你在移动手机上使用Drools! 我们到哪里了? 在我们上一篇文章中 我们写了一个基于Drools引擎的简单的股票交易程序 我们实现了不同的商业规则 展示了我们可以如何迅速地改变规则去适应商业需求 并且JUnit测试给了我们高度自信可以确认系统确实是像我们设想的那样运作的 但是这个应用几乎没有用户介面 而且用硬编码代替了数据库 为了把我们的程序提升到企业级的水平 我们需要增加两个主要的东西 ● 某种用户介面 最理想的是基于标准的Web表现层的框架 ● 一个数据存取对象(DAO)让Drools与数据库(或其它后端)交互 从现有表现框架中实现规则引擎 大多数企业级Java应用是通过Web介面进行交互的 其中最被广泛使用的Web表现层框架是Apache的Struts 理想的结果是 我们写的应用可以从表现层知道它下面的应用层 而不是通过相反的方向 它的好处在于不仅仅可以使我们将来变换其它的表现层(比如Ajax或web service界面) 而且意味着示例代码可以非常容易地应用于其它像Spring的框架 下面的代码片断演示了始何从Web表现层调用商业逻辑(通过规则引擎) 并根据返回结果显示不同的页面 这一例子中 我们使用了一个Struts行为 但其代码是和使用其它表现层框架甚至一个Servlet或一个Jsp页面是很类似的 这个片断使用了struts config xml配置文件 JSP页面来上传/显示数据 并且生成WAR文件来进行布署 片断展示了怎样把规则引擎和web框架集成使用 import javax servlet HttpServletRequest;import javax servlet HttpServletResponse;import apache struts action Action;import apache struts action ActionForm;import apache struts action ActionForward;import apache struts action ActionMapping;import BusinessLayer;/** * Sample Struts action with Pseudocode * 使用伪代码的Struts行为示例 */public class SampleStrutsAction extends Action /** * Standard Struts doPerfom method * 标准的Struts doPerform方法 */ public ActionForward doPerform( ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws InvalidEntryPointException //Local Variables//本地变量 StockOffer userOffer =null; //Get any previous values from the session//从session取得以前的数据 userOffer=(StockOffer)request getSession() getAttribute( PREVIOUS_STOCK_OFFER ); //create this object if it is null//如为null则创建新对象 if (null==userOffer) userOffer = new StockOffer(); //Update with the ining values //用上送的数据更新//These values match those on the form //这些数据是与form中的数据相对应的 userOffer setStockName(request getParameterValue( STOCK_NAME )); userOffer setStockPrice(request getParameterValue( STOCK_PRICE )); userOffer setStockQuantity(request getParameterValue( STOCK_QTY )); //Reset the output value//重置输出数据 userOffer setRemendPurchase(null);//Call the Business Layer//调用商业层 BusinessLayer evaluateStockPurchase(userOffer); //Forward to the appropriate page //转向合适的页面 if ( YES equals( testOffer getRemendPurchase()) return mapping findForward( YES_WEB_PAGE ); //otherwise default to the no page//否则指向无此页面 return mapping findForward( NO_WEB_PAGE ); 这个例子包含了几个东西 经常 我们需要的数据是用户通过好几个网页传来的 因此在这一例子中展示了通过session中的StockOffer对象来保存过去以来的数据 下一步 如果用户改变了一些值 我们更新StockOffer对象 然后我们重置了rmendPurchase标志用以在调用商业逻辑层之前清除以前的结果 最后我们使用商业逻辑层的返回来决定让用户转向哪一页面 在这一例子中 需要注意我们将商业逻辑(买或不买一支股票)与表现层逻辑(决定转向哪一页面)分离开来 这将使我们可以在不同的应用中重用我们的商 cha138/Article/program/Java/hx/201311/26263相关参考
知识大全 在java中请应用学过的知识,使用面向物件的思想实现影院选座功能,要求打印出座点阵图
在java中请应用学过的知识,使用面向物件的思想实现影院选座功能,要求打印出座点阵图你跟我刚才回答的那个问题是同学吧,我刚贴出来。下次提问之前可以先搜一下---------------分割线---下面
零基础学习电脑书这个可以参考一下,具体还要看个人的情况。我觉得应该根据你的工作需要或者说你的发展方向而定。基本上两大类吧:C/C++和Java。比如,如果你要做企业级应用的你应该学习Java和C#;如
改善Java企业级应用的可用性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!对一个在线商务站点来说
在前面我用多线程写了一个绘制了股票K线图的程序这里我再通过绘制一个成交量的统计图说明对鼠票事件的应用这里我们要传入几个参数: > > > se
关于Java单元测试中的伪对象介绍(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在单元测
知识大全 在 WAS 中使用 Java 安全套接字扩展(图)
在WAS中使用Java安全套接字扩展(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文提
知识大全 简答:在你的学习中,你感到快乐吗?列举三件事来证明.
简答:在你的学习中,你感到快乐吗?列举三件事来证明.本来是快乐的,但我觉得你不快乐,所以我在敲这些字的时候也不快乐列举妈妈爱你的三件事1从小抚养我到大2无限为我服务3待我如初孩子经常和你分享那些快乐。
知识大全 在你的读书经历中,有什么样的故事和大家一起分享写一篇作文不少于300字
在你的读书经历中,有什么样的故事和大家一起分享写一篇作文不少于300字星期天的上午,我和表姐乘坐武当环保车兴高采烈地来到逍遥谷停车场。我们参观完龙泉观就去游逍遥谷。沿着石头小路来到谷口的小水坝上,站在
知识大全 JBPM 整合 Drools(JBoss Rule)
JBPM整合Drools(JBossRule) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
知识大全 在你的生活中,有过那些快乐和忧愁?你是怎样和别人分享的?选一两件事写下来,题目自
在你的生活中,有过那些快乐和忧愁?你是怎样和别人分享的?选一两件事写下来,题目自分享我是从什么时候懂得分享的?是从姐姐分苹果的那一次吗?是从外公外婆分荷包蛋的那一次吗?那一次,姐姐脸上的笑容像太阳和花