當前位置:首頁 » 數據倉庫 » 框架的規則引擎配置怎麼查看
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

框架的規則引擎配置怎麼查看

發布時間: 2022-04-20 04:39:15

A. 決策引擎與規則引擎有什麼區別

區別:

1、運行方式不同
規則引擎是需要電子商城的實際業務的運用人員進行相關的調整和設置;

決策引擎雖然能夠根據實際的業務進行相關的人工干預,但是其實現是系統自動化的。

2、用戶不同

規則引擎是針對的是電子商城的某一個或者多個客戶群;

決策引擎則是精準到單個用戶的偏好。

3、意義不同

規則引擎是一個工具,本身是不帶規則的,規則需要人為輸入,可單獨將規則從系統剝離出來放到規則引擎平台單獨進行執行管理。具有一定智能化的使用價值,可以按照需求來進行規則的配置、執行、管理,不同的行業都可以配置出屬於自己不同的規則平台。

決策引擎,就是已經包含了很多的規則、決策條件,具備了對規則的決策能力,如風控決策引擎,就是在金融行業的風險控制環節進行決策的。

B. 規則引擎如何連接Oracle規則引擎除了主流的資料庫,還支持其他資料庫嗎

旗正規則引擎通過資料庫配置器(DataBuilder)來管理資料庫,無論是Oracle,還是其他主流的數據都支持,操作方式是一樣的。旗正規則引擎的資料庫配置器是用於編輯資料庫結構信息以及管理資料庫表數據,並且可以執行SQL 語句,主要功能如下。

1)資料庫生成表結構信息:

主要生成資料庫配置文件(.conf文件),用於規則編輯器調用資料庫操作代碼.

2)添加功能:

添加表,添加視圖,添加存儲過程,以及添加查詢

3)處理表結構信息:

導入表結構信息,更新表結構信息,刪除表結構信息

4)編輯表數據。

編輯表中數據,更改表中欄位顯示名稱,更該表欄位類型

5)執行 SQL語句。

主要滿足對表中數據進行查詢,插入,更新,刪除等資料庫操作。

連接Oracle如下所示

1、打開資料庫配置器,選擇菜單欄---》新建,然後選擇:從Oracle資料庫導入

C. 如何在工作流等開發平台中集成規則引擎

的壞話的蘇愛華對撒會的哈歲

D. drools的規則實例到底指的是什麼

InfoQ發布了一個關於規則引擎的介紹Real-World Rule Engines,原文

ONJava上也有兩篇文章:

Give Your Business Logic a Framework with Drools

Using Drools in Your Enterprise Java Application

下面總結一下其中的精華:

大多數web和企業Java應用可以分成三個部分:一個和用戶交互的前台, 一個和後台系統,例如資料庫交互的服務層,以及他們中間的業務邏輯。 現在使用框架構建前台和後台系統已經成為普遍共識(例如, Struts, Cocoon, Spring, Hibernate, JDO, 和 Entity Beans), 但卻沒有一個標準的方法來構建業務邏輯。一些框架,例如 EJB 和 Spring 只在一個高層實現業務邏輯,但對於我們組織邏輯代碼沒有任何幫助,所以,為什麼沒有一個框架來替換冗繁,易錯的if...then語句呢,這個框架應該和其它前台或後台框架一樣,易於配置,具有可讀性和重用性。下面我們將介紹Drools 規則引擎,這個來解決我們問題的框架。

下面是一個典型的Java業務邏輯的代碼

if ((user.isMemberOf(AdministratorGroup)
&& user.isMemberOf(teleworkerGroup))
|| user.isSuperUser(){

// more checks for specific cases
if((expenseRequest.code().equals("B203")
||(expenseRequest.code().equals("A903")
&&(totalExpenses<200)
&&(bossSignOff> totalExpenses))
&&(deptBudget.notExceeded)) {
//issue payments
} else if {
//check lots of other conditions
}
} else {
// even more business logic
}

這是大多數程序員寫業務邏輯的方法,但是有以下的問題:

如果用戶有另一個選項,例如("C987") ,那麼需要修改上面的代碼,當代碼很長的時候,修改代碼是難於維護的
我們如何保證代碼的正確性,這個代碼只有程序員能夠看到,真正的使用者,業務人員無法看到這個代碼
很多應用程序有相同的業務邏輯,如果某個業務改變了,如何保證其他業務邏輯的一致性
業務邏輯能否不合java語言綁定?
業務邏輯能否用其他的腳本語言。
Java下的規則引擎標准就是JSR94,它的實現主要有Jess Jena Drools

Drools中,一個典型的業務邏輯的配置,如下

<?xml version="1.0"?>
<rule-set name="BusinessRulesSample"
xmlns=""
xmlns:java=""
xmlns:xs
=""
xs:schemaLocation
=" rules.xsd
java.xsd">
<!-- Import the Java Objects that we refer
to in our rules -->
<java:import>
java.lang.Object
</java:import>
<java:import>
java.lang.String
</java:import>
<java:import>
net.firstpartners.rp.StockOffer
</java:import>
<!-- A Java (Utility) function we reference
in our rules-->
<java:functions>
public void printStock(
net.firstpartners.rp.StockOffer stock)
{
System.out.println("Name:"
+stock.getStockName()
+" Price: "+stock.getStockPrice()
+" BUY:"
+stock.getRecommendPurchase());
}
</java:functions>
<rule-set>
<!-- Ensure stock price is not too high-->
<rule name="Stock Price Low Enough">
<!-- Params to pass to business rule -->
<parameter identifier="stockOffer">
<class>StockOffer</class>
</parameter>
<!-- Conditions or 'Left Hand Side'
(LHS) that must be met for
business rule to fire -->
<!-- note markup -->
<java:condition>
stockOffer.getRecommendPurchase() == null
</java:condition>
<java:condition>
stockOffer.getStockPrice() < 100
</java:condition>
<!-- What happens when the business
rule is activated -->
<java:consequence>
stockOffer.setRecommendPurchase(
StockOffer.YES);
printStock(stockOffer);
</java:consequence>
</rule>
</rule-set>

一條規則就是rule-set中的rule,如果有很多規則,就要寫很多的rule。

上面規則的意思是判斷股票價格是否小於100,如果100這個標准改變了,那麼只要修改這個規則文件,而不用去修改源代碼了

E. Java規則引擎如何集成

Java 規則引擎是一種嵌入在 Java 程序中的組件,它的任務是把當前提交給引擎的 Java 數據對象 ( 原料 ) 與載入在引擎中的業務規則( app )進行測試和比對,激活那些符合當前數據狀態下的業務規則,根據業務規則中聲明的執行邏輯,觸發應用程序中對應的操作。

引言:
目前, Java 社區推動並發展了一種引人注目的新技術 ——Java 規則引擎( Rule Engine )。利用它就可以在應用系統中分離商業決策者的商業決策邏輯和應用開發者的技術決策,並把這些商業決策放在中心資料庫或其他統一的地方,讓它們能在運行時可以動態地管理和修改,從而為企業保持靈活性和競爭力提供有效的技術支持。

規則引擎的原理
1 、基於規則的專家系統( RBES )簡介
Java 規則引擎起源於基於規則的專家系統,而基於規則的專家系統又是專家系統的其中一個分支。專家系統屬於人工智慧的范疇,它模仿人類的推理方式,使用試探性的方法進行推理,並使用人類能理解的術語解釋和證明它的推理結論。為了更深入地了解 Java 規則引擎,下面簡要地介紹基於規則的專家系統。 RBES 包括三部分:Rule Base ( knowledge base )、 Working Memory ( fact base )和 Inference Engine 。它們的結構如下系統所示:

圖 1 基於規則的專家系統構成
如圖 1 所示,推理引擎包括三部分:模式匹配器( Pattern Matcher )、議程( Agenda )和執行引擎(Execution Engine )。推理引擎通過決定哪些規則滿足事實或目標,並授予規則優先順序,滿足事實或目標的規則被加入議程。模式匹配器決定選擇執行哪個規則,何時執行規則;議程管理模式匹配器挑選出來的規則的執行次序;執行引擎負責執行規則和其他動作。

和人類的思維相對應,推理引擎存在兩者推理方式:演繹法( Forward-Chaining )和歸納法( Backward-Chaining )。演繹法從一個初始的事實出發,不斷地應用規則得出結論(或執行指定的動作)。而歸納法則是根據假設,不斷地尋找符合假設的事實。 Rete 演算法是目前效率最高的一個 Forward-Chaining 推理演算法,許多 Java 規則引擎都是基於 Rete 演算法來進行推理計算的。
推理引擎的推理步驟如下:
(1) 將初始數據( fact )輸入 Working Memory 。
(2) 使用 PatternMatcher 比較規則庫( rule base )中的規則( rule )和數據( fact )。
(3) 如果執行規則存在沖突( conflict ),即同時激活了多個規則,將沖突的規則放入沖突集合。
(4) 解決沖突,將激活的規則按順序放入 Agenda 。
(5) 使用執行引擎執行 Agenda 中的規則。重復步驟 2 至 5 ,直到執行完畢所有 Agenda 中的規則。
上述即是規則引擎的原始架構, Java 規則引擎就是從這一原始架構演變而來的。

2 、規則引擎相關構件
規則引擎是一種根據規則中包含的指定過濾條件,判斷其能否匹配運行時刻的實時條件來執行規則中所規定的動作的引擎。與規則引擎相關的有四個基本概念,為更好地理解規則引擎的工作原理,下面將對這些概念進行逐一介紹。
1) 信息元( InformationUnit )
信息元是規則引擎的基本建築塊,它是一個包含了特定事件的所有信息的對象。這些信息包括:消息、產生事件的應用程序標識、事件產生事件、信息元類型、相關規則集、通用方法、通用屬性以及一些系統相關信息等等。
2) 信息服務( InformationServices )
信息服務產生信息元對象。每個信息服務產生它自己類型相對應的信息元對象。即特定信息服務根據信息元所產生每個信息元對象有相同的格式,但可以有不同的屬性和規則集。需要注意的是,在一台機器上可以運行許多不同的信息服務,還可以運行同一信息服務的不同實例。但無論如何,每個信息服務只產生它自己類型相對應的信息元。
3) 規則集( Rule Set )
顧名思義,規則集就是許多規則的集合。每條規則包 含一個條件過濾器 和多個動作 。一個條件過濾器可以包含多個過濾條件。條件過濾器是多個布爾表達式的組合,其組合結果仍然是一個布爾類型的。在程序運行時, 動作將會在條件過濾器值為 true 的情況下執行。除了一般的執行動作,還有三類比較特別的動作,它們分別是:放棄動作( Discard Action )、包含動作( Include Action )和使信息元對象內容持久化的動作。前兩種動作類型的區別將在 2.3 規則引擎工作機制小節介紹。
4) 隊列管理器( QueueManager )
隊列管理器用來管理來自不同信息服務的信息元對象的隊列。
下面將研究規則引擎的這些相關構件是如何協同工作的。
如圖 2 所示,處理過程分為四個階段進行:信息服務接受事件並將其轉化為信息元,然後這些信息元被傳給隊列管理器,最後規則引擎接收這些信息元並應用它們自身攜帶的規則加以執行,直到隊列管理器中不再有信息元。

圖 2 處理過程協作圖
3 、規則引擎的工作機制
下面專門研究規則引擎的內部處理過程。如圖 3 所示,規則引擎從隊列管理器中依次接收信息元,然後依規則的定義順序檢查信息元所帶規則集中的規則(規則已經排隊就緒等待信息元的到來)。如圖所示,規則引擎檢查第一個規則並對其條件過濾器求值,如果值為假,所有與此規則相關的動作皆被忽略並繼續執行下一條規則。如果第二條規則的過濾器值為真,所有與此規則相關的動作皆依定義順序執行,執行完畢繼續下一條規則。該信息元中的所有規則執行完畢後,信息元將被銷毀 ,然後從隊列管理器接收下一個信息元。在這個過程中並未考慮兩個特殊動作:放棄動作( Discard Action )和包含動作( Include Action )。放棄動作如果被執行,將會跳過其所在信息元中接下來的所有規則,並銷毀所在信息元,規則引擎繼續接收隊列管理器中的下一個信息元 ( 就是短路了 ) 。包含動作其實就是動作中包含其它現存規則集的動作。包含動作如果被執行,規則引擎將暫停並進入被包含的規則集,執行完畢後,規則引擎還會返回原來暫停的地方繼續執行。這一過程將遞歸進行。

圖 3 規則引擎工作機制
Java 規則引擎的工作機制與上述規則引擎機制十分類似,只不過對上述概念進行了重新包裝組合。 Java 規則引擎對提交給引擎的 Java 數據對象進行檢索,根據這些對象的當前屬性值和它們之間的關系,從載入到引擎的規則集中發現符合條件的規則,創建這些規則的執行實例。這些實例將在引擎接到執行指令時、依照某種優先序依次執行。一般來講, Java 規則引擎內部由下面幾個部分構成:
工作內存( Working Memory )即工作區,用於存放被引擎引用的數據對象集合;
規則執行隊列,用於存放被激活的規則執行實例 ;
靜態規則區,用於存放所有被載入的業務規則,這些規則將按照某種數據結構組織,
當工作區中的數據發生改變後,引擎需要迅速根據工作區中的對象現狀,調整規則執行隊列中的規則執行實例。Java 規則引擎的結構示意圖如圖 4 所示。

圖 4 Java 規則引擎工作機制
當引擎執行時,會根據規則執行隊列中的優先順序逐條執行規則執行實例,由於規則的執行部分可能會改變工作區的數據對象,從而會使隊列中的某些規則執行實例因為條件改變而失效,必須從隊列中撤銷,也可能會激活原來不滿足條件的規則,生成新的規則執行實例進入隊列。於是就產生了一種 「 動態 」 的規則執行鏈,形成規則的推理機制。這種規則的 「 鏈式 」 反應完全是由工作區中的數據驅動的。
任何一個規則引擎都需要很好地解決規則的推理機制 和規則條件匹配的效率問題 。規則條件匹配的效率決定了引擎的性能,引擎需要迅速測試工作區中的數據對象,從載入的規則集中發現符合條件的規則,生成規則執行實例。1982 年美國卡耐基 • 梅隆大學的 Charles L. Forgy 發明了一種叫 Rete 演算法,很好地解決了這方面的問題。目前世界頂尖的商用業務規則引擎產品基本上都使用 Rete 演算法。

F. 如何查看javaweb使用的框架

最簡單的方法,你看用了什麼配置文件,一般情況下,框架的集成都需要加一些配置文件,像spring框架就會有spring.xml等一系列文件,mybatis框架就會有很多*.xml文件,看看用了什麼配置文件,就知道用什麼框架了。

G. java規則引擎---Jess

該爾傑斯開發環境( JessDE )提供的一套插件為流行的開源的IDE Eclipse的;特別是,這些都是Eclipse的插件版本為3.1或更高版本。請注意,只有JessDE作品的充分「的Eclipse SDK的」 -規模較小的「平台運行二進制」是不夠的。

要安裝JessDE ,只需退出Eclipse的,解壓縮所有文件Jess71p2/eclipse進入最高級別的Eclipse的安裝目錄。確認目錄命名為「 plugins/gov.sandia.jess_7.1.0 」存在,在你的Eclipse的安裝目錄,然後重新啟動Eclipse的。 //////

這段翻譯的結果,不是你的SDK 不是 full "Eclipse SDK"

Jess 7.0p1——Java平台規則引擎(一) 2008-07-12 22:21
分類:JESS 字型大小: 大大 中中 小小 1.入門

1.1.需求

Jess是一個用java語言編寫的程序庫。因此要使用Jess你需要Java虛擬機(JVM)。你可以從 Sun Microsystems上免費得到一個非常適合用於Windows, Linux,Solaris上的JVM。Jess 7是兼容所有版本的Java,從開始的JDK 1.4到現在的最新版本JDK1.5。版本更老的編號為4.x的Jess兼容JDK 1.0, 5.x版本兼容的是JDK1.1,Jess 6工作在JDK1.2及以上版本。

在使用Jess前請先確認JVM是否正確安裝並能正常工作。

使用JessDE集成開發環境,你需要Eclipse SDK的3.1版或更新版本,這個可以從http://www.eclipse.org獲得。安裝JessDE前請確認Eclipse是已經安裝並能正常工作。

Jess類庫為另一種語言擔任譯員,這種語言我在本文檔中稱為Jess語言。Jess語言是一種高度專業化的Lisp形式語言。

我會認為讀者你是將使用這兩種或其中一種語言的一個程序員。並且所有的讀者都至少有起碼Java基礎。另外你必須有一個Java運行系統和知道如何以一個簡單的方法使用這個系統。你應該知道如何用它來:

· 運行一個Java應用程序

· 處理如CLASSPATH變數的配置問題

· 編譯Java源文件集(可選)

如果你沒有對Java的環境有基本的熟悉,那麼我建議你購買了關於java的基礎的書籍。對與各種平台的Java軟體以及豐富的教程和文檔可以免費從http://java.sun.com上獲得。

對於那些將要使用jess語言編寫程序的讀者,我假定你們已經熟悉了一般程序編寫的原理。我會說明整個Jess語言,所以熟悉Lisp是不需要(雖然熟悉是有些用的)。此外,在可能范圍內,我將努力說明基於規則系統的最重要的概念,因為它們適用於Jess。再次,我將假定讀者對這些概念有了一定的熟悉程度和了解更多。如果不熟悉基於規則系統,你也許應當考慮購買一本關於這一主題的書籍。

許多讀者都希望提高Jess的能力,無論是通過向Jess語言加入的命令(用JAVA語言寫)或以Java應用的方式嵌入Jess庫。另外一些人會想用Jess語言的Java集成能力來從Jess語言程序調用Java函數。在本文檔專門針對這類讀者的一些章節中,我將承擔適度Java編程的知識。我不會教Java語言任何方面的知識,有興趣的讀者可到您當地的書店參閱相關書籍。

這個文檔包含了一個目錄,在很多書上這些主題也都被列舉出來。

1.2.准備

1.2.1.安裝包的組成

Jess提供一個可用於所有支持平台的單獨的.zip壓縮包。這個單獨的文件壓縮包包含在Windows,UNIX,或Macintosh系統上使用Jess的所有你需要(除了JVM你必須自己安裝)的資源。當Jess是解壓後,你應該有一個命名為jess71a2 /的目錄。在這個目錄路徑有下列文件和子目錄:

README
快速開始指導.

LICENSE
關於Jess使用的您的權利信息.

bin
一個包含Windows 批處理文件(jess.bat)和一個UNIX腳本(Jess)的目錄,你可以使用它們啟動Jess命令提示符.

lib
該目錄含有作為一個Java檔案文件的Jess本身。注意,這不是一個「點擊」存檔文件,你不可以通過雙擊它運行Jess。這是要注意的。在這個目錄的jsr94.jar包中又包含了符合JSR - 94 (javax.rules)的API。

docs/
這是一個文檔,以「index.html」為首頁的Jess手冊。.

examples/jess
一個包含使用Jess語言編寫的小程序的目錄.

examples/xml
一個包含使用JessML, Jess's XML規則語言編寫的小程序的目錄.

eclipse
JessDE, 是Jess集成開發環境, 提供支持Eclipse 3.0的插件集。看這里的安裝說明。

src (Optional)
如果這個目錄存在,它包含全部的Jess規則引擎和開發環境的源代碼,包括一個構建它的Ant腳本。

1.2.2.命令行界面

Jess有一個交互的命令行界面。分布包括兩個你能運行Jess命令提示符的腳本:其中一個用於Windows,另一個用於UNIX。它們兩個都在bin/ directory目錄下。運行適合你系統的那一個,然後你應該看到以下的界面:

C:\Jess71a2> bin\jess.bat

Jess, the Rule Engine for the Java Platform

Copyright (C) 2006 Sandia Corporation

Jess Version Jess71a2 9/5/2006

Jess>

這就是Jess的命令。嘗試計算一個前綴數學表達式"(+ 2 2)"。不要忘記那些括弧!

Jess> (+ 2 2)

4

Jess計算了此函數,並列印結果。在這份文檔的下一章,我們會發現Jess規則語言本身的語法。

通過Jess命令行執行Jess代碼編寫的文件,可以使用批處理命令:

Jess> (batch "examples/jess/sticks.clp")

Who moves first (Computer: c Human: h)?

在前面的例子應注意到,在Jess>提示符後鍵入命令,Jess將在下一行響應命令。我將在整個這本文檔中遵循本約定。

直接從操作系統提示符執行這樣的Jess程序,你可以把程序的名字作為Jess腳本的一個參數,這樣就可以啟動:

C:\Jess71a2> bin\jess.bat examples\jess\sticks.clp

Jess, the Rule Engine for the Java Platform

Copyright (C) 2006 Sandia Corporation

Jess Version Jess71a2 8/28/2006

Who moves first (Computer: c Human: h)?

jess.console類是一個簡單的jess命令行界面的圖形版。你在窗口的底部輸入一個命令,結果就會出現在滾動窗口之上。試著從Jess71a2路徑下鍵入下面命令:

C:\Jess71a2> java -classpath lib\jess.jar jess.Console

1.2.3.Java程序設計語言與Jess

要在你的Java程序中把Jess做為庫使用,文件jess.jar(在lib目錄下)必須是以一個標準的擴展名安裝在類路徑之下,或者對你的開發工具配置後能夠識別它。做好這些工作的細節是隨系統和環境而定的,但在設置一個類路徑時通常涉及修改環境變數,並且安裝一個標準的擴展名,簡單來說就是復制jess.jar到你的$(JAVA_HOME)/jre/lib/ext路徑下。可查閱Java文檔或介紹Java的文本以了解更多的細節。

1.2.4.Jess例子程序

有一些簡單的例子程序(在examples/jess和examples/xml目錄下),您可以用這些程序測試你的Jess是否已經安裝正確。這些程序包括fullmab.clp,zebra.clp和wordgame.clp。fullmab.clp是關於猴子與香蕉問題的經典版本。要從命令行運行它,只需要輸入:

C:\Jess71a2> bin\jess examples\jess\fullmab.clp

和要運行的問題,就會在屏幕上輸出結果。任何Jess代碼的文件都可以以這種方式運行。像使用批處理函數一樣在命令行給一個Jess文件名就可以運行了。因此,一般你只需要保證文件是以:

Jess> (reset)

(run)

結束或根本沒有規則將運行。zebra.clp和wordgame.clp程序是兩個典型的例子,它們是用來展示Jess如何處理復雜情況的程序。這些例子都產生大量的局部模式匹配,因此它們運行非常慢而且使用了大量的內存。另外的例子包括sticks.clp (互動游戲)和frame.clp (一個使用jess的java集成能力建立圖形界面的演示)。

XML的例子在單獨的子目錄下,每個子目錄中都包含有運行例子說明的自述文件。

2.Jess開發環境

Jess 7包括一個基於Eclipse的開發環境。這個開發環境有一個編輯器,一個調試器和一個Rete網路視圖。在將來發布的版本中將包含更多組件(規則瀏覽器和其它工具)。

2.1.安裝JessDE

Jess開發環境(JessDE)是作為一個插件集支持流行的開源的集成開發環境Eclipse;該插件支持Eclipse 3.1及其更新版本。應該注意的是JessDE僅僅工作在完全的" Eclipse SDK "上——較小的"二進制運行平台"是不能運行的。

安裝JessDE,首先要退出Eclipse,然後從Jess71a2/eclipse解壓縮所有文件到頂層的Eclipse的安裝路徑。確認在你的eclipse安裝目錄有一個名為" plugins/gov.sandia.jess_7.0.0 "的目錄存在,然後重新啟動Eclipse。

注意!如果你只是從以前的版本的JessDE更新,你必須在Eclipse的命令行使用"-clean "命令開關,強制更新緩存中有關JessDE插件的信息。如果你不這樣做,很多的JessDE的選項可能被禁用,安裝後你只需要這樣做一次。

2.1.1.驗證你的安裝

在「Help」菜單下選擇「about Eclipse SDK」。在" about Eclipse SDK "主窗口有一個有Jess標志的按鈕。單擊「Plug-in Details」,如果JessDE已安裝妥當,你將發現三個或四個Jess相關插件在列表上——在我的Eclipse中,它們出現在底部。

然後使用「New Project」向導建立一個Java工程。在新的工程中創建一個新文件並命名為「hello.clp」。這個文件會在一個Jess的編輯器中打開,這個編輯器有一個帶紅色「J」字的銀色小球的圖標。輸入一些Jess代碼,如下:

(printout t "Hello, World" crlf)

你應該看到合適的語法被高亮顯示。如果看到,祝賀你!工作一切正常!閱讀更多JessDE其他功能的信息。

2.1.2.更多的細節

JessDE編輯器在你的Jess文件中能夠標示出語法錯誤和警告。你很可能希望這些標記能出現在Eclipse的「Problems」視圖中,盡管在默認情況下它們可能沒有顯示出來。安裝完成JessDE後,重新啟動Eclipse,在Problems的視圖,在標題欄點擊「Filters」的圖標,然後選擇標著" Jess Problem "(如果沒有被選中的話)多選項。你的Problems視圖應該馬上就會顯示Jess錯誤和警告。

要使用Rete網路視圖,你需要安裝Eclipse圖形編輯框架(GEF)。你可以從Eclipse工程項目頁面得到GEF,或通過Eclipse的內置式更新管理器安裝它。然後打開這一視圖,在「Jess Debugger」組之下Eclipse的「Show view」對話框找到它。那麼在Jess編輯窗口中當游標停在某一內部規則時,Rete網路視圖將會為這項規則顯示出編譯的網路。

2.2.使用JessDE

2.2.1.Jess語言編輯器

JessDE編輯器可以編輯「.clp」格式的文件。在默認情況下你建立的任何 「.clp」格式的文件都將使用JessDE編輯器打開。沒有單獨Jess的視圖,或是Jess項目類型;我們期望大多數人都將使用JessDE工具來寫Jess/Java混合應用組成的Jess程序,因此JessDE工具將用在Java項目的文件中。在Jess語言代碼中JessDE使用你的Java項目的類路徑以解決Java中類名稱問題——例如,調用defclass函數。

編輯器有您期望的一個現代程序編輯器所應具有的全部功能。

可定製的語法變色

你可以使用Eclipse全局參數對話框中的「Jess Editor」表來改變默認的顏色。

提供模板,槽和函數名的幫助內容

在許多不同地方使用JessDE編輯器你可引用Eclipse的" Content Assist "功能;JessDE將使輸入Jess代碼變得更容易。在輸入時可以使用快捷鍵Alt-' / '彈出選擇列表清單。

自動修復代碼的「Quick fix」助手

這個功能默認使用Ctrl-1快捷鍵,快速匹配能立即知道怎樣定義未定義的deftemplates,並為現有的deftemplates(如果它們在相同的文件里被定義)增加新的槽。

實時錯誤檢測標記和錯誤高亮顯示

當你輸入有錯誤和警告時將被高亮顯示

代碼自動格式化

當你輸入時代碼自動縮進。你可以從"Source"菜單下選擇"Format"命令來格式化一個全部的緩沖區

使用大綱視圖快速導航

Eclipse大綱視圖列出了所有在緩沖區中定義的結構;你可以點擊其中任何一個就能夠迅速定位到它

圓括弧匹配和自動插入

當你輸入一個'('或』」』符號,JessDE就會插入匹配的符號。當你的游標移動到下一個圓括弧時,JessDE會顯示與之相匹配的圓括弧。

通過懸停獲得Jess函數和結構在線幫助

快速訪問Jess手冊中每一個函數和結構類型的描述。

支持deftemplates 和 deffunctions的懸停幫助

如果你將你的滑鼠移動到一個deftemplate或deffunction的名字上,任何代碼處,JessDE都將顯示一個關於這個模板或函數信息的"tooltip"。

Jess程序的運行和調試命令

你可以使用正常Eclipse 的" Run... "菜單或由右擊導航項或在編輯窗口運行或調試Jess程序。

2.2.2.文件之間的關聯

有時候一個*.clp文件依靠其他的*.clp文件中的代碼先被閱讀執行。例如,rules.clp 也許需要templates.clp中的定義。沒有這些定義,rules.clp將會出現語法錯誤。為了解決這個問題,你可以使用require*函數。"require*"讓你清楚的聲明這些關聯。

如果一個文件rules.clp依靠在Java中執行的Jess命令,你可以僅僅為了這個目標創建一個特殊的文件處理這個問題(你也許稱之為ruledepends.clp),這個特殊的文件包括了編輯器中使rule.clp文件能夠正確解析的所有聲明。如果你添加"(require* ruledepends)"到rules.clp中,僅當這個外部文件存在的話才會解析,因為它有可能正在開發中。當你部署代碼時,你不需要部署ruledepends.clp,只要rules.clp能夠從Java代碼中取得所需聲明。

"require"機制代替了JessDE的早期版本中的"Source dependencies"屬性表,"Source dependencies"屬性表已不再被支持。

2.2.3.Rete網路視圖

使用JessDE的"Rete Network View"你可以即時看到一個衍生自任何規則的Rete網的圖形展示。當這個視圖是打開時(你可以使用Eclipse中的"Windows | View | Other..."對話框打開它),它會顯示基於編輯器插字元所在規則的Rete網路,你可以用這個實時看到修改規則所對應的Rete網路變化。圖表的布局方式是遠勝於你能從Jess視圖命令中得到的----因為這樣沒有重疊和交叉線,而且每一列的高度都可變。

2.2.4.Jess調試器

JessDE調試器可以讓你調試一個在.clp文件中定義的Jess程序。它具有您期望的圖形調試器所具有的所有功能:你可以暫停和恢復程序,或以步進方式執行。當程序停止時,執行堆棧的內容將會顯示出來,這樣你就可以檢查在每個堆棧結構中定義的變數。選擇的堆棧結構也可以導航到被執行的源碼處。在編輯器窗口的左手邊緣處,你可以通過右鍵單擊某一規則在任何.clp文件中設置(或清除)斷點。斷點僅能設在函數(內置或用戶自定義)中,所以你不能在defrule 或者deftemplate結構中打斷程序執行。然而,你能夠在一個調用規則 的左邊或右手邊的函數中暫停。

3.Jess 語言基礎

大多數時間你是在使用Jess語言編寫Jess規則。如果你從來沒有使用過Lisp,第一次使用Jess規則語言也許看起來就有點奇怪了,但它並不需要太長時間來學習。回報也是豐厚的,你將使用非常少的代碼表達復雜的邏輯關系。

在這一章,我們將看到Jess語言的基礎語法。在後面的章節中,我們再來學習怎樣定義像事實與規則這樣的高級概念,但現在我們將學習最基礎的。

在本語言指導中,我將使用一個非正規的符號來描述語法。在< >中的基本串是必須提供的數據類型,在方括弧中([])的內容是可選的,以 + 結束表示可以出現一次或多次,以 * 結束表示可以出現零次或更多。一般來說, Jess的輸入格式是自由的。換行不具有特殊的含義,僅被處理為空格,而異常將被標識。

3.1.符號

符號是Jess語言的一個核心概念。符號是非常類似於其他語言中的標識符。Jess符號包括字母,數字和下面的標點符號:$*=+/<>_?#.。一個符號不能以數字開始,可以以一些特殊的標點符號開始(這些字元作為操作員當出現在符號開始時有著特殊的意義)

Jess符號對於大小寫敏感。foo,FOO,和Foo是不同的符號。

最佳的符號是由字母,數字,下劃線和破折號組成。破折號是傳統的分隔符。如下所示為合法的符號:

foo first-value contestant#1 _abc

Jess中有三種特殊的符號。零,和java中的空值有點類似;真和假是Jess中的布爾類型的值。

3.2.數字

Jess分別使用Java函數parseInt(java.lang.String), parseLong(java.lang.String)和parseDouble(java.lang.String)來解析整型,長整型和浮點型數字。參考本文檔中關於這些方法精確的語法描述。如下為合法的數字:

3 4. 5.643 5654L 6.0E4 1D

3.3.字元串

Jess中的字元串是用雙引呈來標識的(").。反斜線能夠區分嵌入的引號。注意Jess的字元串和Java的字元串在一些重要的地方是不一樣的。首先,不會認識轉義序列。比如說你不能用一個"\n"字元串來換行。另一方面,真正的換行可以通過雙引號中的字元串來實現。他們是字元串的一部分。如下為合法的字元串:

"foo" "Hello, World" "\"Nonsense,\" he said firmly." "Hello,

There"

最後一個字元串相當於Java中的字元串"Hello,\nThere".。

3.4.列表

Jess中的另一個基礎語法元素是列表。列表是由圓括弧和空,符號,數字,字元串和其他列表組成。如下所示為合法的列表:

(+ 3 2) (a b c) ("Hello, World") () (deftemplate foo (slot bar))

Jess中列表的第一個元素(Lisp中稱為列表的car)通常被稱列表的頭。

3.5.注釋

Jess支持兩種類型的程序注釋。Lisp風格的行注釋和C風格的塊注釋。行注釋是以分號開頭,延伸到文本中本行的最後。這里有一個行注釋的例子:

; This is a list

(a b c)

塊注釋就和他們在C語言中的用法一樣:他們以兩個特徵符"/*"開始,以"*/"結束。塊注釋不能嵌套。

/*

Here is an example of a list (commented out):

(a b c)

*/

注釋可以在Jess程序的任何地方出現,包括模板和規則的結構里。

3.6.函數調用

和Lisp一樣,Jess中的所有代碼(控制結構,分配,程序調用)都是以函數調用的方式進行的。沒有操作器,一切都是函數調用。然而,有些函數的名字使它們看起來像是Java操作器,在這種情況下,它們就和它們的Java 副本工作的非常相似。

Jess中的函數調用可以理解為簡單的列表。函數調用採用前綴表示,如果一個列表的頭部是一個已經存在的函數的符號,那麼它就可以稱為是一個函數調用。舉例來說,用+函數來算2和3相加的表達式應該寫為(+ 2 3)。在計算時,這個表達式的結果是數字5(不是一個僅包含數字5的列表!)。通常來說,在合適的時候表達式都被看作是這樣並通過上下文求值。你可以在Jess>提示符後鍵入表達式。Jess計算表達式並列印出結果:

Jess> (+ 2 3)

5

Jess> (+ (+ 2 3) (* 3 3))

14

注意你可以嵌套調用函數;外部函數是形成內部函數調用計算的因素。

Jess自身帶有大量的內置函數,它們可以用來做一切事情,如數學計算,程序控制和字元處理,讓你能夠使用Java的API函數。當然你也可以在Jess語言或者是Java語言中定義自己的函數。

其中一個最經常用的函數是printout,它是用來發送文本到Jess的標准輸出窗口,或者是輸出到一個文件中。完善的解釋你必須等待,但是現在,你所要了解的都包含在下面這個例子中:

Jess> (printout t "The answer is " 42 "!" crlf)

The answer is 42!

另一個常用的函數是batch,它是用來計算一個包含Jess代碼文件的。要運行Jess源文件examples/jess/hello.clp,你可以鍵入:

ess> (batch "examples/jess/hello.clp")

Hello, world!

Jess自帶的其他的所有函數的詳細說明都在Jess function guide.。

3.7.變數

Jess中程序變數是以問號開始的標識符。問號也是變數名的一部分。名字可以包括字母,數字,破折號,下劃線,分號和星號的任何組合。

一個變數可以看作是一個簡單的符號,數字,字元串或者是一個列表。你可以用bind函數來為變數指定一個值。

Jess> (bind ?x "The value")

"The value"

變數在第一次使用前不需要聲明(全局變數除外)。

想在Jess提示符後看到變數 的值,你只需要鍵入變數的名字:

Jess> (bind ?a 123)

123

Jess> ?a

123

3.7.1.全局變數(默認全局)
你在Jess提示符後或者任何Jess語言程序頂層創建的所有變數, 當重置命令運行的時候都將被清除。這樣就使它們稍嫌短暫,對於暫時性變數它們很好用,在標准理解的前提下不是永久全局變數。要創建不被reset銷毀的全局變數,你可以用全局結構:

(defglobal [?<global-name> = <value>]+)

全局變數的名稱必須是以星號開頭以星號結束。合法的全局變數如下:

?*a* ?*all-values* ?*counter*

當全局變數建立以後,它會被初始化賦值。當reset命令隨後執行的時候,這個變數可能會用相同的值重新設置,當然這取決於reset-globals的屬性設置。有一個稱為set-reset-globals的函數可以用來設置這個屬性。如例所示:

Jess> (defglobal ?*x* = 3)

TRUE

Jess> ?*x*

3

Jess> (bind ?*x* 4)

4

Jess> ?*x*

4

Jess> (reset)

TRUE

Jess> ?*x*

3

Jess> (bind ?*x* 4)

4

Jess> (set-reset-globals nil)

FALSE

Jess> (reset)

TRUE

Jess> ?*x*

4

您可以閱讀Jess function guide.中有關set-reset-globals和相關的get-reset-globals函數的信息。

3.8.控制流

Java中控制流(分支和循環,異常處理等)都是由一些特殊的語法和關鍵字如if,while,for,和try等來引導的。在Jess中,就如我們前面說過的,所有的一切都是函數調用,控制流也不例外。因此,Jess包含有那些名為if,while,for,和try以及foreach等函數。這些函數就和Java體系中相同名稱的結構工作起來類似。

3.8.1.簡單循環

例如,如下 是Jess中的一個「while」循環示例:

Jess> (bind ?i 3)

3

Jess> (while (> ?i 0)

(printout t ?i crlf)

(-- ?i))

3

2

1

FALSE

While循環的第一個參數是一個布爾表達式。While函數計算它的第一個參數,如果它為真,就計算它所有其他的參數。它一直進行這個過程直到它的線一個參數值為假。一個while循環總是返回FALSE.

Jess中內置有一些其他的循環函數。詳情參看Jess function index.中關於for和foreach的有關描述。Jess中有一個break函數,可以有來跳出循環,也可以很早的從一個規則的右手邊返回

//原文地址http://javawei.blog.163.com/blog/static/587005262008612102128488/

H. java項目中怎樣看使用的是什麼框架啊

1、首先使用開發工具打開以前練手的項目,如下圖所示。

I. 可以和你討論規則引擎的開發嗎

可能很多人還不了解規則引擎是什麼東西,或者不知道規則引擎究竟有什麼用。我們都知道工作流引擎,也聽說過JBoss下面有個Drools,或者我們知道 weblogic或者Oracle也有自己的Business Rule,我們可能還聽說過ILOG被IBM收購了,如果我們研究微軟的WWF,可能也知道其中有RuleSet等內容。國內的一些web快速開發平台,也提到了規則引擎。
在我們的印象中,我們感覺規則引擎就是解決業務邏輯層的實現問題的。因此我們理所當然的覺得工作流中的某個節點的邏輯處理,應該可以用規則引擎來解決,那麼工作流本身的邏輯也應該可以由規則引擎來解決。另外我們也會覺得,平時項目當中的業務邏輯應該都可以用規則引擎來解決。
但是當我們在使用上述這些規則引擎,卻發現很難和我們實際應用的業務邏輯層的業務邏輯實現相對應。
我們以JBoss的Drools為例,由於其規則引擎使用了匹配規則的方式來進行,因此在應用這些規則引擎時。首先需要將我們具體應用中的業務邏輯做抽象,抽象成一條條規則之後,再打包成一個規則包。一個規則包相當於一個智能塊。當數據傳遞給這個智能塊後,系統會以匹配的方式應用滿足條件的邏輯處理。
當採用這種方式時,應該說邏輯更抽象了,在一個更高的層次加以抽象化的定義。但是也使得規則引擎的應用得到了很大的限制。
首先這種抽象本身需要一個復雜的分析過程,這需要有很強的分析設計能力。另外我們平時具體應用中的業務邏輯層,大量的邏輯都是對實際數據的處理,很多時候還是一個批量數據的處理,甚至有些邏輯需要的參數我們並不能定義在規則中,而是在資料庫表中進行配置。因此我們常見的業務邏輯層的開發,並不能先設計出一個數據模型,然後再在此基礎上抽象邏輯。
因此我們發現Drools等規則引擎很難用,根本不是我們所需要的那樣。
我們研究規則引擎也有一段時間了。有時候我們發現自己做的規則引擎並不是一個規則引擎。因為我們和像Drools這些規則引擎有很大的差別。但我們確實解決了業務邏輯層的業務邏輯配置問題。應該說我們的更實用一些。但是我們卻沒法去實現JSR94標准。我們不光處理業務邏輯,還把所有業務邏輯層需要處理的操作全部採用規則配置的形式,包括資料庫處理邏輯等。