亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在你的企業級java應用中使用Drools(圖)

2019-11-18 11:58:23
字體:
來源:轉載
供稿:網友

  什么是Drools
  
  Drools 是一個基于Charles Forgy'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簡直能讓你睡著。有多少J2EE-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加到你的開發工具箱中意味著現在你可以“一路到底”的使用框架來構建你的應用程序。圖1顯示了這樣的一個應用
  
在你的企業級java應用中使用Drools(圖)

  
圖1. 用于Java應用的框架

  
  這篇文章將基于我們已經了解的Drools框架的功能,這些功能可以讓我們構建這樣的一個應用。]
  
  我什么時候應該使用規則引擎?
  
  “假如你有一把錘子,那所有的東西都看起來都像釘子”,這句話在軟件工程領域幾乎成了陳詞濫調了。雖然規則引擎能解決我們的許多問題,但確實值得認真考慮一下規則引擎對我們的企業級Java應用是否合適。需要問的問題有:
  
  ● 我的應用程序有多復雜?對于那些只是把數據從數據庫中傳入傳出,并不做更多事情的應用程序,最好不要使用規則引擎。但是,當在Java中有一定量的商業邏輯處理的話,可以考慮Drools的使用。這是因為很多應用隨著時間的推移越來越復雜,而Drools可以讓你輕松應對這一切。
  
  ● 我的應用的生命周期有多久?這個問題的正確答案往往是“令人驚奇的長”――還記得那些認為他們的程序不會茍活到2000年的大型機的程序員嗎?使用規則引擎將會在中長期得到好處。像這篇文章所展示的那樣,甚至原型都能從Drools與靈活方法的組合中獲益,讓“原型系統”轉化成生產系統。
  
  ● 我的應用需要改變嗎?唯一能確定的是你的需求將會改變,無論是在開發過程中或是在開發完成以后。Drools使用一個或多個簡單易配的XML文件幫你來應對這一切。
  
  那么性能呢?
  
  假如你正在寫一個企業級應用,很有可能它會擴展到成百(假如不是成千)的用戶。你已經知道現有的Java和J2EE應用能做到這一點,但一個使用了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.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.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 incoming 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.setRecommendPurchase(null);//Call the Business Layer//調用商業層
  BusinessLayer       .evaluateStockPurchase(userOffer);
  //Forward to the appropriate page //轉向合適的頁面
  if ("YES".equals(
  testOffer.getRecommendPurchase()){
  return mapping.findForward("YES_WEB_PAGE");
  } //otherwise default to the no page//否則指向無此頁面
  return mapping.findForward("NO_WEB_PAGE"); }}
  
  這個例子包含了幾個東西。經常,我們需要的數據是用戶通過好幾個網頁傳來的,因此在這一例子中展示了通過session中的StockOffer對象來保存過去以來的數據。
  
  下一步,假如用戶改變了一些值,我們更新StockOffer對象。然后我們重置了rcommendPurchase標志用以在調用商業邏輯層之前清除以前的結果。最后我們使用商業邏輯層的返回來決定讓用戶轉向哪一頁面。
  
  在這一例子中,需要注重我們將商業邏輯(買或不買一支股票)與表現層邏輯(決定轉向哪一頁面)分離開來。這將使我們可以在不同的應用中重用我們的商

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲经典中文字幕| 亚洲自拍小视频免费观看| 欧美极品少妇与黑人| 亚洲欧美成人网| 欧美激情视频三区| 日韩成人在线电影网| 91麻豆国产精品| 欧美丰满少妇xxxxx| 久久久久久久久久久亚洲| 国产精品久久久久久久久粉嫩av| 日韩中文字幕在线视频| 日韩在线视频二区| 亚洲天堂免费观看| 性日韩欧美在线视频| 欧美成人一区在线| 色综合天天狠天天透天天伊人| 色老头一区二区三区在线观看| 欧美成人午夜视频| 欧美亚州一区二区三区| 在线丨暗呦小u女国产精品| 成人在线中文字幕| 国产成人高清激情视频在线观看| 不卡伊人av在线播放| 日日摸夜夜添一区| 国产成+人+综合+亚洲欧洲| 色婷婷av一区二区三区在线观看| 欧美孕妇孕交黑巨大网站| 久久久国产精彩视频美女艺术照福利| 青青久久av北条麻妃黑人| 欧美性生交大片免费| 久久九九有精品国产23| 欧美—级a级欧美特级ar全黄| 亚洲欧美国产另类| 亚洲美女激情视频| 91久久久久久久久久久| 亚洲第一页中文字幕| 欧美在线视频播放| 伊人久久久久久久久久久久久| 久久久91精品国产一区不卡| 性色av一区二区咪爱| 亚洲新中文字幕| 97在线视频免费观看| 91青草视频久久| 日韩大片免费观看视频播放| 精品亚洲夜色av98在线观看| 久久影视电视剧凤归四时歌| 亚洲字幕在线观看| 欧美性高潮在线| 亚洲性视频网站| 日韩免费观看高清| 欧洲成人在线观看| 午夜精品福利在线观看| 一本色道久久综合狠狠躁篇怎么玩| 日韩日本欧美亚洲| 欧美精品久久久久久久久| xvideos亚洲人网站| 91大神福利视频在线| 亚洲精品狠狠操| 日韩欧美中文在线| 欧美激情精品久久久| 日韩中文字幕在线免费观看| 国产精品久久久久999| 亚洲国产美女精品久久久久∴| 色久欧美在线视频观看| 久久久国产一区二区三区| 亚洲伊人久久大香线蕉av| 久久久黄色av| 国产精品自在线| 国产欧美va欧美va香蕉在线| 亚洲v日韩v综合v精品v| 欧美精品videos| 国产精品自拍视频| 国产精品你懂得| 色综合久久中文字幕综合网小说| 精品欧美一区二区三区| 久热精品视频在线| 欧美日韩在线免费观看| 搡老女人一区二区三区视频tv| 91情侣偷在线精品国产| 国产精品久久久久久久久久三级| 国产欧美日韩专区发布| 91在线精品视频| 日韩在线视频观看正片免费网站| 91亚洲国产成人精品性色| 日本高清久久天堂| 欧美激情视频网址| 色多多国产成人永久免费网站| 日韩在线不卡视频| 国产啪精品视频| 久久精品国产电影| 亚洲成人三级在线| 91亚洲精品久久久| 精品伊人久久97| 国产精品视频免费观看www| 欧美一级片在线播放| 精品国产福利在线| 欧美精品亚州精品| 亚洲伊人第一页| 91精品国产综合久久香蕉922| 国产一区二区三区18| 欧美在线一区二区视频| 色偷偷亚洲男人天堂| 亚洲最大成人网色| 日韩欧美在线免费| 日韩高清有码在线| 欧美精品激情视频| 国产欧美最新羞羞视频在线观看| 国产区亚洲区欧美区| 国产视频自拍一区| 欧美黑人极品猛少妇色xxxxx| 亚洲成人激情在线| 欧美老女人性生活| 精品在线小视频| 91在线免费看网站| 久久人人爽人人爽人人片av高请| 久久精品亚洲一区| 亚洲国产又黄又爽女人高潮的| 九色精品美女在线| 2024亚洲男人天堂| 国产精品久久久久久久久免费看| 国产不卡一区二区在线播放| 在线观看成人黄色| 精品偷拍一区二区三区在线看| 青青草原一区二区| 亚洲黄一区二区| 一本大道久久加勒比香蕉| 一区二区亚洲欧洲国产日韩| 久久这里只有精品视频首页| 17婷婷久久www| 色妞欧美日韩在线| 亚洲网站在线播放| 精品国产老师黑色丝袜高跟鞋| 亚洲视屏在线播放| 91日韩在线播放| 亚洲第一色中文字幕| 国产午夜精品一区二区三区| 亚洲欧美资源在线| 日本高清视频精品| 97在线精品国自产拍中文| 日韩高清电影免费观看完整版| 欧美成人第一页| 亚洲va久久久噜噜噜久久天堂| 亚洲国产成人精品女人久久久| 秋霞av国产精品一区| 视频一区视频二区国产精品| 在线日韩日本国产亚洲| 欧美一区二区大胆人体摄影专业网站| 88国产精品欧美一区二区三区| 国产精品国内视频| 亚洲成人精品视频| 国产专区欧美专区| 国产日韩在线播放| 色在人av网站天堂精品| 亚洲精品一区中文字幕乱码| 国产精品青青在线观看爽香蕉| 狠狠色狠狠色综合日日五| 57pao国产精品一区| 欧美一级淫片videoshd| 亚洲国内精品在线| 欧美电影免费观看网站| 97人人做人人爱| 91久久国产精品| 亚洲片av在线| 久久99久久亚洲国产|