Drools——編寫和執行規則(一)

學習任何新得事物最好的方式就是去嘗試。因此,在本章節,我們開始切入編寫和執行我們第一個規則。我們將會涵蓋大多數關於規則語言重要的點,如何高效的編寫對你領域有意義的規則。這個章節將會使用前一章介紹的eShop的模型來演示一系列規則應用的場景。

在我們開始編寫之前,在這章的前半部分,你會學到如何安裝使用Drools所需要的所有的標準工具和這本書提供的示例。你將會從頭開始創建項目,因此,你會用到本章作爲從頭開始創建應用的參考。第二半部分,我們會涵蓋DRL語言的介紹,當你使用規則或其他知識斷言(比如業務流)時建議你如何組織項目。

對上面簡單介紹下,本章節將涵蓋一下主題:

  • 安裝環境
  • 創建第一個Drools項目
  • 編寫和執行第一個規則
  • 討論DRL規則語言
  • 組織項目

安裝環境

爲了開始使用規則,我們需要考慮這些問題。首先我們將會依賴Maven來爲我們的項目提供結構。如果你對它不熟悉,我強烈建議你瞭解下Maven, 因爲Drools和JPMN大多數基礎設施是依賴的Maven的。因此,當你明白它是如何使用的,你會感覺到非常的舒服。如果你是Maven的新手,我建議你看下Maven工程的站點鏈接

https://maven.apache.org/guides/getting-started/index.html

對於Drools來講它不是一定需要的,但是還是建議使用它。大多數工程工具和其他模塊的集成,依賴Maven服務器作爲項目結構、項目生命週期和依賴管理的標準。

開始之前,我們需要確認以下軟件是否在電腦上已經安裝完畢:

  • jdk1.8,注意Drools並不需要jdk1.8,但是書中的示例是需要使用它的。爲了避免在示例中遇到問題,我們建議你使用這個版本
  • 使用Maven3.1.*對我們的項目進行編譯、構建、測試
  • 源碼管理上使用GIT1.9.*或更高的版本

我們將會使用git獲取託管在Bitbucket倉庫中的示例工程,如果你對git不熟悉,我建議您好好看一下git的官方文檔。

http://git-scm.com/docs

爲了可以在本地環境中獲取一份複製的示例工程,我們將會在終端執行命令去克隆在遠程倉庫中的示例。

git clone https://bitbucket.org/drools-6-developer-guide/drools6-dev-guide.git

執行的時候依託於你的操作系統,你需要使用git客戶端與遠程倉庫進行交互。這裏是git項目提供的列表,你可以隨意選擇適合你操作系統的方案

http://git-scm.com/downloads/guis

現在,你的本地環境已經有了這本書的所有的示例副本。確認下所有的事情現在都已經安裝,去drools6-dev-guide/文件夾下,執行mvn clean install。這個命令是告訴maven從工程中清除掉所有之前編譯的類、打包的資源文件,並開始一個新的編譯進程。爲了可以成功編譯,maven需要確認該工程需要的第三方依賴。對我們而言,drools也是第三方庫,如果本地沒有的話,我們將需要從通過maven進行下載。而且,它不光可以編譯Java class,還可以執行工程中定義的所有的測試類,並且如果所有測試都成功的話,還能對工程進行打包。

在你的本地環境第一次執行的時候,這個進程會進行下載,編譯並執行所有的測試。這是主要是由於這是第一次下載,除非你是用SNAPTHOTS,這隻會發生在你第一次執行命令時。注意,託管示例的倉庫沒有承載任何第三方庫,甚至也沒有Drools。

現在我們知道JDK和Maven的正確的工作方式,我們準備去創建我們第一個Drools工程把。

創建第一個Drools工程

正如前面的章節提及的那樣,我們使用Maven提供給我們的工程結構。針對這個,Maven提供了骨架的概念,骨架就是我們用來引導工程的模板。大部分IDE爲了創建和初始化工程都提供了讓我們使用骨架的方式。請檢查你的IDES是否已經下載了你需要的Maven插件或已經綁定了Maven。如果你想使用命令行來實現這個這個操作,你可以執行下面的命令:

mvn -B archetype:generate 
 -DarchetypeGroupId=org.apache.maven.archetypes 
 -DgroupId=org.drools.devguide
 -DartifactId=myfirst-drools-project

建議你在文件夾drools6-dev-guide/chapter-02/下執行這個命令。這會讓Maven繼承定義在其父工程drools6-dev-guide/pom.xml中的所有配置。如果你這麼做了,你的工程將會知道本書中所有其他示例中Drools的版本,這樣就會避免你在下面的章節中再定義其他的Drools版本。

注意,你可以改變groupId的值,它表示你應用所屬的邏輯組,還有artifactId,它表示你特定的Maven模板的名字。這個命令會讓你在文件夾 myfirst-drools-project下創建一個工程。

一旦我們執行了這個命令,一個新的工程結構就已經爲我們準備好了。這個結構就像下面圖中表示的差不多

 

 

下面是一些非常重要的事情:

pom.xml:它包含了工程的定義和一級依賴。強烈建議你打開這個文件並好好看看它。你需要去了解如何改變pom文件來導入新的依賴或改變工程配置。

  • src/main/java:它包含了所有需要編譯的Java類。
  • src/test/java:它包含了所有需要編譯的測試類,並在測試期間執行。
  • src/main/resources:它包含了所有不需要編譯的靜態資源文件,因此它需要獨立於Java類打包。
  • src/test/resources:它包含了所有不需要編譯的靜態測試資源文件,因此我們的測試類需要它。

這個基礎結構服務作爲任何一個Java工程的起點,無論你在工程裏使用什麼框架。爲了能在工程中使用Drools,我們需要在pom.xml中定義框架的依賴。爲了使用Drools,我們需要在工程中添加下面的依賴(在dependencies標籤中)。

<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.drools.devguide</groupId>
		<artifactId>chapter-02</artifactId>
		<version>1.0</version>
	</parent>
	<artifactId>myfirst-drools-project</artifactId>

	<dependencies>
		<dependency>
			<groupId>org.kie</groupId>
			<artifactId>kie-api</artifactId>
		</dependency>
		<dependency>
			<groupId>org.drools</groupId>
			<artifactId>drools-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.drools</groupId>
			<artifactId>drools-compiler</artifactId>
		</dependency>
	</dependencies>
</project>

第一個kie-api包含了由Drools、JBPM和OptaPlanner組成的KIE平臺暴漏的所有接口。下一個我們包含了org.drools:drools-core租組件,它包含了規則引擎的實現。最後我們包含了 org.drools:drools-compiler組件,它包含了將寫在不同資源下(txt、表格、自定義類型等)要規則翻譯成可執行規則的算法。這個組件是必須的,因爲我們需要編譯在工程中的規則。我們可以將規則編譯從規則執行中區分開,以從工程中移除該依賴。因此爲了簡單起見,我們將會在相同的工程中編譯我們的規則。

爲了針對我們的領域開始編寫規則,我們將要向它添加一個依賴。如下所示,這個依賴定義了本書示例中提供的領域模型。

<dependencies>
 (... Drools dependencies here … )
 <dependency>
 <groupId>org.drools.devguide</groupId>
 <artifactId>model</artifactId>
 </dependency>
</dependencies>

正如我們將要在下一章節看到的那樣,通過這種方法,我們可以添加我們想要的很多依賴,並且可以直接使用第三方庫提供的類。爲了完成我們工程的配置,這是最後一件需要做的事情,在文件夾中chapter-02/myfirst-drools-project/src/
main/resources/META-INF/中定義的名字爲kmodule.xml的文件。這個文件將會用來配置如何加載定義在使用drools的工程中的規則。現在來說,因爲我們將要使用的所有的默認的配置,kmodule.xml中的內容是非常簡單。下面就是一個空的kmodule.xml文件的示例。

<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://jboss.org/kie/6.0.0/kmodule">
</kmodule>

我們將會在第三章看到如何自定義該文件更細粒度的設置。當我們自動初始化規則引擎的session來斷定需要加載的內容時,這個文件將會被搜取。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章