流程引擎執(zhí)行java代碼 流程引擎工作原理

簡述JAVA程序的編輯編譯和運行過程

第一步(編譯): 創(chuàng)建完源文件之后,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然后引用,否則直接引用,這個有點象make。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)包頭免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報“cant find symbol”的錯誤。

第二步(運行):java類運行的過程大概可分為兩個過程:1、類的加載 2、類的執(zhí)行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去加載該類。也就是說,JVM并不是在一開始就把一個程序就所有的類都加載到內(nèi)存中,而是到不得不用的時候才把它加載進來,而且只加載一次。

特別說明:java類中所有public和protected的實例方法都采用動態(tài)綁定機制,所有私有方法、靜態(tài)方法、構(gòu)造器及初始化方法clinit都是采用靜態(tài)綁定機制。而使用動態(tài)綁定機制的時候會用到方法表,靜態(tài)綁定時并不會用到。

擴展資料:

Java整個編譯以及運行的過程相當繁瑣,本文通過一個簡單的程序來簡單的說明整個流程。

Java代碼編譯:是由Java源碼編譯器來完成;

Java字節(jié)碼的執(zhí)行:是由JVM執(zhí)行引擎來完成

Java程序從源文件創(chuàng)建到程序運行要經(jīng)過兩大步驟:

1、源文件由編譯器編譯成字節(jié)碼(ByteCode)

2、字節(jié)碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經(jīng)過JVM的解釋運行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。

intellij idea怎么寫java程序

1、選擇“Create New Project”

2、選擇Java,然后點擊Next

3、點擊Next

4、填寫項目名,然后點擊Finish

5、在“src”目錄上右擊,選擇“New”-“Java Class”

6、填寫類名,然后點擊OK

7、程序?qū)懲旰簏c擊綠色的箭頭

8、選擇第一項

9、完成。程序的輸出顯示在屏幕下方

規(guī)則引擎 java 怎么執(zhí)行動作

Java 規(guī)則引擎是一種嵌入在 Java 程序中的組件,它的任務(wù)是把當前提交給引擎的 Java 數(shù)據(jù)對象 ( 原料 ) 與加載在引擎中的業(yè)務(wù)規(guī)則( app )進行測試和比對,激活那些符合當前數(shù)據(jù)狀態(tài)下的業(yè)務(wù)規(guī)則,根據(jù)業(yè)務(wù)規(guī)則中聲明的執(zhí)行邏輯,觸發(fā)應(yīng)用程序中對應(yīng)的操作。

引言:

目前, Java 社區(qū)推動并發(fā)展了一種引人注目的新技術(shù) ——Java 規(guī)則引擎( Rule Engine )。利用它就可以在應(yīng)用系統(tǒng)中分離商業(yè)決策者的商業(yè)決策邏輯和應(yīng)用開發(fā)者的技術(shù)決策,并把這些商業(yè)決策放在中心數(shù)據(jù)庫或其他統(tǒng)一的地方,讓它們能在運行時可以動態(tài)地管理和修改,從而為企業(yè)保持靈活性和競爭力提供有效的技術(shù)支持。

規(guī)則引擎的原理

1 、基于規(guī)則的專家系統(tǒng)( RBES )簡介

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

圖 1 基于規(guī)則的專家系統(tǒng)構(gòu)成

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

和人類的思維相對應(yīng),推理引擎存在兩者推理方式:演繹法( Forward-Chaining )和歸納法( Backward-Chaining )。演繹法從一個初始的事實出發(fā),不斷地應(yīng)用規(guī)則得出結(jié)論(或執(zhí)行指定的動作)。而歸納法則是根據(jù)假設(shè),不斷地尋找符合假設(shè)的事實。 Rete 算法是目前效率最高的一個 Forward-Chaining 推理算法,許多 Java 規(guī)則引擎都是基于 Rete 算法來進行推理計算的。

推理引擎的推理步驟如下:

(1) 將初始數(shù)據(jù)( fact )輸入 Working Memory 。

(2) 使用 PatternMatcher 比較規(guī)則庫( rule base )中的規(guī)則( rule )和數(shù)據(jù)( fact )。

(3) 如果執(zhí)行規(guī)則存在沖突( conflict ),即同時激活了多個規(guī)則,將沖突的規(guī)則放入沖突集合。

(4) 解決沖突,將激活的規(guī)則按順序放入 Agenda 。

(5) 使用執(zhí)行引擎執(zhí)行 Agenda 中的規(guī)則。重復(fù)步驟 2 至 5 ,直到執(zhí)行完畢所有 Agenda 中的規(guī)則。

上述即是規(guī)則引擎的原始架構(gòu), Java 規(guī)則引擎就是從這一原始架構(gòu)演變而來的。

2 、規(guī)則引擎相關(guān)構(gòu)件

規(guī)則引擎是一種根據(jù)規(guī)則中包含的指定過濾條件,判斷其能否匹配運行時刻的實時條件來執(zhí)行規(guī)則中所規(guī)定的動作的引擎。與規(guī)則引擎相關(guān)的有四個基本概念,為更好地理解規(guī)則引擎的工作原理,下面將對這些概念進行逐一介紹。

1) 信息元( InformationUnit )

信息元是規(guī)則引擎的基本建筑塊,它是一個包含了特定事件的所有信息的對象。這些信息包括:消息、產(chǎn)生事件的應(yīng)用程序標識、事件產(chǎn)生事件、信息元類型、相關(guān)規(guī)則集、通用方法、通用屬性以及一些系統(tǒng)相關(guān)信息等等。

2) 信息服務(wù)( InformationServices )

信息服務(wù)產(chǎn)生信息元對象。每個信息服務(wù)產(chǎn)生它自己類型相對應(yīng)的信息元對象。即特定信息服務(wù)根據(jù)信息元所產(chǎn)生每個信息元對象有相同的格式,但可以有不同的屬性和規(guī)則集。需要注意的是,在一臺機器上可以運行許多不同的信息服務(wù),還可以運行同一信息服務(wù)的不同實例。但無論如何,每個信息服務(wù)只產(chǎn)生它自己類型相對應(yīng)的信息元。

3) 規(guī)則集( Rule Set )

顧名思義,規(guī)則集就是許多規(guī)則的集合。每條規(guī)則包 含一個條件過濾器 和多個動作 。一個條件過濾器可以包含多個過濾條件。條件過濾器是多個布爾表達式的組合,其組合結(jié)果仍然是一個布爾類型的。在程序運行時, 動作將會在條件過濾器值為 true 的情況下執(zhí)行。除了一般的執(zhí)行動作,還有三類比較特別的動作,它們分別是:放棄動作( Discard Action )、包含動作( Include Action )和使信息元對象內(nèi)容持久化的動作。前兩種動作類型的區(qū)別將在 2.3 規(guī)則引擎工作機制小節(jié)介紹。

4) 隊列管理器( QueueManager )

隊列管理器用來管理來自不同信息服務(wù)的信息元對象的隊列。

下面將研究規(guī)則引擎的這些相關(guān)構(gòu)件是如何協(xié)同工作的。

如圖 2 所示,處理過程分為四個階段進行:信息服務(wù)接受事件并將其轉(zhuǎn)化為信息元,然后這些信息元被傳給隊列管理器,最后規(guī)則引擎接收這些信息元并應(yīng)用它們自身攜帶的規(guī)則加以執(zhí)行,直到隊列管理器中不再有信息元。

圖 2 處理過程協(xié)作圖

3 、規(guī)則引擎的工作機制

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

圖 3 規(guī)則引擎工作機制

Java 規(guī)則引擎的工作機制與上述規(guī)則引擎機制十分類似,只不過對上述概念進行了重新包裝組合。 Java 規(guī)則引擎對提交給引擎的 Java 數(shù)據(jù)對象進行檢索,根據(jù)這些對象的當前屬性值和它們之間的關(guān)系,從加載到引擎的規(guī)則集中發(fā)現(xiàn)符合條件的規(guī)則,創(chuàng)建這些規(guī)則的執(zhí)行實例。這些實例將在引擎接到執(zhí)行指令時、依照某種優(yōu)先序依次執(zhí)行。一般來講, Java 規(guī)則引擎內(nèi)部由下面幾個部分構(gòu)成:

工作內(nèi)存( Working Memory )即工作區(qū),用于存放被引擎引用的數(shù)據(jù)對象集合;

規(guī)則執(zhí)行隊列,用于存放被激活的規(guī)則執(zhí)行實例 ;

靜態(tài)規(guī)則區(qū),用于存放所有被加載的業(yè)務(wù)規(guī)則,這些規(guī)則將按照某種數(shù)據(jù)結(jié)構(gòu)組織,

當工作區(qū)中的數(shù)據(jù)發(fā)生改變后,引擎需要迅速根據(jù)工作區(qū)中的對象現(xiàn)狀,調(diào)整規(guī)則執(zhí)行隊列中的規(guī)則執(zhí)行實例。Java 規(guī)則引擎的結(jié)構(gòu)示意圖如圖 4 所示。

圖 4 Java 規(guī)則引擎工作機制

當引擎執(zhí)行時,會根據(jù)規(guī)則執(zhí)行隊列中的優(yōu)先順序逐條執(zhí)行規(guī)則執(zhí)行實例,由于規(guī)則的執(zhí)行部分可能會改變工作區(qū)的數(shù)據(jù)對象,從而會使隊列中的某些規(guī)則執(zhí)行實例因為條件改變而失效,必須從隊列中撤銷,也可能會激活原來不滿足條件的規(guī)則,生成新的規(guī)則執(zhí)行實例進入隊列。于是就產(chǎn)生了一種 “ 動態(tài) ” 的規(guī)則執(zhí)行鏈,形成規(guī)則的推理機制。這種規(guī)則的 “ 鏈式 ” 反應(yīng)完全是由工作區(qū)中的數(shù)據(jù)驅(qū)動的。

任何一個規(guī)則引擎都需要很好地解決規(guī)則的推理機制 和規(guī)則條件匹配的效率問題 。規(guī)則條件匹配的效率決定了引擎的性能,引擎需要迅速測試工作區(qū)中的數(shù)據(jù)對象,從加載的規(guī)則集中發(fā)現(xiàn)符合條件的規(guī)則,生成規(guī)則執(zhí)行實例。1982 年美國卡耐基 ? 梅隆大學(xué)的 Charles L. Forgy 發(fā)明了一種叫 Rete 算法,很好地解決了這方面的問題。目前世界頂尖的商用業(yè)務(wù)規(guī)則引擎產(chǎn)品基本上都使用 Rete 算法。

java 工作流引擎有什么用

java 工作流引擎適用于多個行業(yè)領(lǐng)域及需求場景,利用低代碼開發(fā)平臺可高效提供需求建模、系統(tǒng)設(shè)計、開發(fā)部署、仿真測試、運行維護和版本更新的軟件開發(fā)全生命周期支持!

還可快速構(gòu)建OA協(xié)同、公文督辦、KM文庫、項目管理、采購管理、生產(chǎn)管理、供應(yīng)鏈管理、營銷管理等一些列職能類和業(yè)務(wù)類管理系統(tǒng)并提供PC與移動多應(yīng)用端入口。

提供BPM流程管控、數(shù)據(jù)跨平臺采集和報表展示、原系統(tǒng)流程補強、OA升級/替換、統(tǒng)一門戶、移動辦公、多租戶SaaS應(yīng)用和智能硬件對接等解決方案。

本文標題:流程引擎執(zhí)行java代碼 流程引擎工作原理
網(wǎng)頁網(wǎng)址:http://www.muchs.cn/article18/doeojgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗域名注冊、網(wǎng)站維護、網(wǎng)站導(dǎo)航、手機網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化