專利名稱:基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及的是一種計(jì)算機(jī)技術(shù)領(lǐng)域的系統(tǒng),特別是一種基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng)。
背景技術(shù):
Jini是一種基于Java的分布式計(jì)算技術(shù),利用這種技術(shù)可以很方便的構(gòu)建一個(gè)可擴(kuò)展而且穩(wěn)定的分布式計(jì)算環(huán)境。工作流服務(wù)是由許多工作流服務(wù)單元組成的;工作流服務(wù)單元是指使用Jini技術(shù)實(shí)現(xiàn)工作流系統(tǒng)中的工作流引擎接口,工作流監(jiān)控接口,工作流統(tǒng)計(jì)接口的Jini服務(wù)。目前工作流管理系統(tǒng)的分布可以分為三個(gè)層次1、工作流系統(tǒng)結(jié)構(gòu)的分布,所謂工作流管理系統(tǒng)體系結(jié)構(gòu)的分布是指從系統(tǒng)的層次上將工作流管理系統(tǒng)看成是一組互相協(xié)作的部分構(gòu)成的;2、工作流機(jī)的分布式執(zhí)行,工作流機(jī)是工作流管理系統(tǒng)提供執(zhí)行服務(wù)的核心模塊,它的分布是在系統(tǒng)結(jié)構(gòu)分布的基礎(chǔ)上實(shí)現(xiàn)的更高層次上的分布;3、工作流模型的分布式定義與柔性執(zhí)行,工作流模型的分布是指在一個(gè)分布的環(huán)境下由參與人員協(xié)作完成工作流模型定義,柔性執(zhí)行是指把一部分(或全部)的工作流定義功能加入到運(yùn)行時(shí)的客戶端應(yīng)用中,以便使處于執(zhí)行階段的用戶可以自己定義后續(xù)的活動(dòng),實(shí)現(xiàn)“邊定義-邊執(zhí)行”的工作流運(yùn)行方式。
經(jīng)對(duì)現(xiàn)有技術(shù)的文獻(xiàn)檢索發(fā)現(xiàn),Michael Gillmann等人在《ACM SIGMODInternational Conference》(ACM SIGMOD國際會(huì)議)2002228-239上發(fā)表的“Workflow management with service quality guarantees”(提供服務(wù)質(zhì)量保證的工作流管理系統(tǒng)),該文中提出了通過基于目標(biāo)驅(qū)動(dòng)的自動(dòng)配置工具和一套隨機(jī)模型來構(gòu)建具有服務(wù)質(zhì)量保證的工作管理系統(tǒng),即通過自動(dòng)配置工具里設(shè)定一定的服務(wù)質(zhì)量目標(biāo),該工具就會(huì)根據(jù)內(nèi)建的隨機(jī)模型和算法的出一個(gè)比較合理的分布式工作流配置。但是,這項(xiàng)技術(shù)不足之處當(dāng)用戶設(shè)定好服務(wù)質(zhì)量目標(biāo)通過自動(dòng)配置得到一個(gè)比較合理的分布式工作流配置之后不能夠馬上對(duì)分布式工作流系統(tǒng)做出一個(gè)及時(shí)的調(diào)整,不能使系統(tǒng)動(dòng)態(tài)進(jìn)行調(diào)整以便達(dá)到需要的配置要求。
發(fā)明內(nèi)容
本發(fā)明針對(duì)背景技術(shù)的不足之處,提出一種基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),使其能夠減少由于分布式環(huán)境帶了的部署問題同時(shí)實(shí)現(xiàn)分布式工作流系統(tǒng)的動(dòng)態(tài)調(diào)整,從一定程度上提高了分布式工作流系統(tǒng)的穩(wěn)定性和可靠性。
本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的,本發(fā)明包含三個(gè)核心組件,分別是工作流服務(wù)部署控制器,工作流服務(wù)容器以及工作流服務(wù)單元。這些組件都是運(yùn)行在Jini網(wǎng)絡(luò)下的,組件之間通過組播通告協(xié)議、組播注冊(cè)協(xié)議、單播注冊(cè)協(xié)議和工作流服務(wù)動(dòng)態(tài)部署協(xié)議來實(shí)現(xiàn)通訊并完成整個(gè)自動(dòng)配置過程。本發(fā)明提及的工作流服務(wù)如背景技術(shù)中的工作流機(jī)。
所述的工作流服務(wù)部署控制器是系統(tǒng)的控制端,它使用組播通告協(xié)議聲明自己存在,使用工作流服務(wù)動(dòng)態(tài)部署協(xié)議來完成整個(gè)系統(tǒng)的服務(wù)部署與控制;其中,為了實(shí)現(xiàn)工作流服務(wù)單元的動(dòng)態(tài)部署需要使用一個(gè)工作流服務(wù)動(dòng)態(tài)部署配置文件來描述目前系統(tǒng)中可以動(dòng)態(tài)部署的工作流服務(wù)單元信息。此文件記錄每個(gè)需要部署的服務(wù)的類路徑、啟動(dòng)的類以及用來創(chuàng)建對(duì)象的構(gòu)造函數(shù)等信息。
所述的工作流服務(wù)容器是系統(tǒng)的被控端,它使用組播注冊(cè)協(xié)議和單播注冊(cè)協(xié)議向工作流服務(wù)部署控制器注冊(cè)自己的信息;它主要用來緩存已部署的工作流服務(wù)單元并作為它們的運(yùn)行的環(huán)境為它們運(yùn)行提供需要的資源并對(duì)它們的運(yùn)行進(jìn)行有效的控制。
所述的工作流服務(wù)單元是系統(tǒng)中的移動(dòng)實(shí)體;為了實(shí)現(xiàn)對(duì)工作流服務(wù)單元的管理,此工作流服務(wù)單元必須實(shí)現(xiàn)滿足已定義的生命周期管理接口,接口Java定義如下。
public interface LifeCycleAdmin{public void stop() throws java.rmi.RemoteException;public void start() throws java.rmi.RemoteException;}所述的組播通告協(xié)議,被工作流服務(wù)部署控制器使用聲明自己的存在,當(dāng)已存在的群體中啟動(dòng)一個(gè)新的工作流服務(wù)部署控制器時(shí),組播通告協(xié)議通知相關(guān)的參與者。
組播通告協(xié)議通信流程工作流服務(wù)部署控制器創(chuàng)建一個(gè)組播UDP套接字發(fā)送消息,并創(chuàng)建一個(gè)單播TCP套接字,在其上接收來工作流服務(wù)容器的請(qǐng)求。希望接收到新工作流服務(wù)部署控制器通告的工作流服務(wù)容器,它創(chuàng)建一個(gè)套接字用于監(jiān)聽組播UDP通告。當(dāng)容器接收到控制器的通告時(shí),它可以創(chuàng)建TCP套接字并向控制器監(jiān)聽請(qǐng)求的TCP套接字發(fā)送一個(gè)消息,與此控制器建立聯(lián)系并注冊(cè)該容器的信息。
所述的組播注冊(cè)協(xié)議,被工作流服務(wù)容器使用聲明自己的存在,接收到此組播消息的工作流服務(wù)部署控制器會(huì)自動(dòng)記錄此容器的信息。
組播注冊(cè)協(xié)議通信流程工作流服務(wù)容器創(chuàng)建一個(gè)組播UDP套接字發(fā)送消息來聲明自己的加入,并創(chuàng)建一個(gè)TCP套接字,在其上接收來工作流服務(wù)部署控制器命令請(qǐng)求。希望接收到新工作流服務(wù)容器注冊(cè)通告的工作流服務(wù)部署控制器,它創(chuàng)建一個(gè)套接字用于監(jiān)聽組播UDP注冊(cè)請(qǐng)求。當(dāng)控制器接收到容器的注冊(cè)請(qǐng)求時(shí),它就會(huì)創(chuàng)建TCP套接字并向容器監(jiān)聽請(qǐng)求的TCP套接字發(fā)送一個(gè)注冊(cè)請(qǐng)求響應(yīng),容器就會(huì)發(fā)送注冊(cè)所需信息到控制器完成注冊(cè)過程。
所述的單播注冊(cè)協(xié)議,當(dāng)工作流服務(wù)容器需要向特定的工作流服務(wù)部署控制器注冊(cè)自己信息的時(shí)候,就使用此協(xié)議。
單播注冊(cè)協(xié)議通信流程當(dāng)工作流服務(wù)容器知道所要注冊(cè)的工作流服務(wù)部署控制器時(shí)就會(huì)直接創(chuàng)建一個(gè)TCP套接字并向控制器監(jiān)聽的端口發(fā)送注冊(cè)消息,當(dāng)控制器收到注冊(cè)消息后就會(huì)發(fā)送一個(gè)響應(yīng)消息完成注冊(cè)過程。
所述的工作流服務(wù)動(dòng)態(tài)部署協(xié)議,在分布式環(huán)境下動(dòng)態(tài)的把工作流服務(wù)單元部署到工作流服務(wù)容器中。
工作流服務(wù)動(dòng)態(tài)部署協(xié)議通信流程工作流服務(wù)部署控制器通過創(chuàng)建的TCP套接字向工作流服務(wù)容器監(jiān)聽的TCP套接字發(fā)送命令,當(dāng)容器收到命令的時(shí)候就會(huì)執(zhí)行相應(yīng)的命令并發(fā)送命令響應(yīng)。
其中,工作流服務(wù)動(dòng)態(tài)部署協(xié)議作為實(shí)現(xiàn)工作流服務(wù)動(dòng)態(tài)部署和控制最核心協(xié)議,它包含一個(gè)命令集合,此命令集合主要包含Connect、Deploy、Undeploy、Start和Stop幾個(gè)用來實(shí)現(xiàn)部署與控制的命令。
本發(fā)明充分利用了Jini網(wǎng)絡(luò)中服務(wù)可以動(dòng)態(tài)加入、動(dòng)態(tài)查找以及動(dòng)態(tài)發(fā)現(xiàn)等機(jī)制來實(shí)現(xiàn)分布式工作流系統(tǒng)中的工作流服務(wù)單元的動(dòng)態(tài)部署與服務(wù)的生命周期控制。本發(fā)明方法為分布式工作流系統(tǒng)負(fù)載平衡提供了更好的支持,更加合理的利用分布式工作流系統(tǒng)所分配的資源;當(dāng)系統(tǒng)承受的負(fù)載過大時(shí)可以動(dòng)態(tài)部署新的工作流服務(wù)單元來減輕目前系統(tǒng)的負(fù)荷,當(dāng)系統(tǒng)請(qǐng)求較少時(shí)可以動(dòng)態(tài)的卸載一些工作流服務(wù)單元并釋放掉分配的資源,這樣就能夠保證系統(tǒng)的資源得到合理利用,從一定程度上提高了系統(tǒng)的穩(wěn)定性和可靠性。
圖1本發(fā)明系統(tǒng)結(jié)構(gòu)示意2本發(fā)明組播通告協(xié)議通訊流程3組播注冊(cè)協(xié)議通訊流程4單播注冊(cè)協(xié)議通訊流程圖具體實(shí)施方式
如圖1所示,本發(fā)明包含三個(gè)核心組件,分別是工作流服務(wù)部署控制器,工作流服務(wù)容器以及工作流服務(wù)單元。這些組件都是運(yùn)行在Jini網(wǎng)絡(luò)下的,組件之間主要是通過組播通告協(xié)議、組播注冊(cè)協(xié)議、單播注冊(cè)協(xié)議和工作流服務(wù)動(dòng)態(tài)部署協(xié)議實(shí)現(xiàn)通訊并完成整個(gè)自動(dòng)配置過程的。
所述的工作流服務(wù)部署控制器是系統(tǒng)的控制端,它使用組播通告協(xié)議聲明自己存在,使用工作流服務(wù)動(dòng)態(tài)部署協(xié)議來完成整個(gè)系統(tǒng)的服務(wù)部署與控制;其中,為了實(shí)現(xiàn)工作流服務(wù)單元的動(dòng)態(tài)部署需要使用一個(gè)工作流服務(wù)動(dòng)態(tài)部署配置文件來描述目前系統(tǒng)中可以動(dòng)態(tài)部署的工作流服務(wù)單元信息;工作流服務(wù)動(dòng)態(tài)部署配置文件的XML Schema定義如下<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<xsschema elementFormDefault=″qualified″xmlnsxs=″http//www.w3.org/2001/XMLSchema″>
<xselement name=″class″>
<xssimpleType>
<xsrestriction base=″xsstring″>
<xsenumerationvalue=″cit.workflow.service.impl.WorkflowEngineServiceImpl″/>
<xsenumerationvalue=″cit.workflow.service.impl.WorkflowPublicServiceImpl″/>
</xsrestriction>
</xssimpleType>
</xselement>
<xselement name=″classpath″>
<xssimpleType>
<xsrestriction base=″xsanyURI″>
<xsenumerationvalue=″http//ww9090/commons-collections.jar;http//ww9090/commons-dbcp.jar″/>
<xsenumerationvalue=″http//ww9090/commons-collections.jar;http//ww9090/commons-dbcp.jar;″/>
</xsrestriction>
</xssimpleType>
</xselement>
<xselement name=″deploy″>
<xscomplexType>
<xssequence>
<xselement ref=″policy″/>
<xselement ref=″classpath″/>
<xselement ref=″start″/>
</xssequence>
</xscomplexType>
</xselement>
<xselement name=″information″>
<xscomplexType>
<xssequence>
<xselement ref=″name″/>
<xselement ref=″vendor″/>
</xssequence>
</xscomplexType>
</xselement>
<xselement name=″method″>
<xscomplexType>
<xssequence>
<xselement ref=″params″/>
</xssequence>
<xsattribute name=″type″type=″xsstring″use=″required″/>
<xsattribute name=″name″type=″xsstring″use=″required″/>
</xscomplexType></xselement><xselement name=″name″type=″xsstring″/><xselement name=″param″>
<xscomplexType>
<xssequence>
<xselement ref=″type″/>
<xselement ref=″value″/>
</xssequence>
</xscomplexType></xselement><xselement name=″params″>
<xscomplexType>
<xssequence>
<xselement ref=″param″/>
</xssequence>
</xscomplexType></xselement><xselement name=″policy″type=″xsstring″/><xselement name=″sddp″>
<xscomplexType>
<xssequence>
<xselement ref=″services″/>
</xssequence>
</xscomplexType></xselement><xselement name=″service″>
<xscomplexType>
<xssequence>
<xselement ref=″information″/>
<xselement ref=″type″/>
<xselement ref=″deploy″/>
</xssequence>
</xscomplexType>
</xselement>
<xselement name=″services″>
<xscomplexType>
<xssequence>
<xselement ref=″service″maxOccurs=″unbounded″/>
</xssequence>
</xscomplexType>
</xselement>
<xselement name=″start″>
<xscomplexType>
<xssequence>
<xselement ref=″class″/>
<xselement ref=″method″/>
</xssequence>
</xscomplexType>
</xselement>
<xselement name=″type″>
<xssimpleType>
<xsrestriction base=″xsstring″>
<xsenumeration value=″String[]″/>
<xsenumerationvalue=″cit.workflow.service.WorkflowEngine″/>
<xsenumerationvalue=″cit.workflow.service.WorkflowPublic″/>
</xsrestriction>
</xssimpleType>
</xselement>
<xselement name=″value″>
<xssimpleType>
<xsrestriction base=″xsstring″>
<xsenumerationvalue=″jarhttp://ww9090/workflowengineservice.jar!/config/workflowengineservice.config″/>
<xsenumerationvalue=″jarhttp//ww9090/workflowpublicservice.jar!/config/workflowpublicservice.config″/>
</xsrestriction>
</xssimpleType>
</xselement>
<xselement name=″vendor″type=″xsstring″/>
</xsschema>。
此文件記錄每個(gè)需要部署的服務(wù)單元的類路徑、啟動(dòng)的類以及用來創(chuàng)建對(duì)象的構(gòu)造函數(shù)等信息。
所述的工作流服務(wù)容器是系統(tǒng)的被控端,它使用組播注冊(cè)協(xié)議和單播注冊(cè)協(xié)議向工作流服務(wù)部署控制器注冊(cè)自己的信息;它主要用來緩存已部署的工作流服務(wù)單元并作為它們的運(yùn)行的環(huán)境為它們運(yùn)行提供需要的資源并對(duì)它們的運(yùn)行進(jìn)行有效的控制。
所述的工作流服務(wù)單元是系統(tǒng)中的移動(dòng)實(shí)體;為了實(shí)現(xiàn)對(duì)工作流服務(wù)單元的管理,此工作流服務(wù)單元必須實(shí)現(xiàn)滿足已定義的生命周期管理接口,接口Java定義如下。
public interface LifeCycleAdmin{public void stop() throws java.rmi.RemoteException;public void start() throws java.rmi.RemoteException;}如圖2所示,所述的組播通告協(xié)議,工作流服務(wù)部署控制器使用此協(xié)議聲明自己的存在,當(dāng)已存在的群體中啟動(dòng)一個(gè)新的工作流服務(wù)部署控制器時(shí),其它相關(guān)的參與者(比如工作流服務(wù)容器)都可以通過組播通告協(xié)議被通知。組播通告協(xié)議的通信流程組播通告協(xié)議通信流程為工作流服務(wù)部署控制器創(chuàng)建一個(gè)組播UDP套接字發(fā)送消息,并創(chuàng)建一個(gè)單播TCP套接字,在其上接收來工作流服務(wù)容器的請(qǐng)求。希望接收到新工作流服務(wù)部署控制器通告的工作流服務(wù)容器,它創(chuàng)建一個(gè)套接字用于監(jiān)聽組播UDP通告。當(dāng)容器接收到控制器的通告時(shí),它可以創(chuàng)建TCP套接字并向控制器監(jiān)聽請(qǐng)求的TCP套接字發(fā)送一個(gè)消息,與此控制器建立聯(lián)系并注冊(cè)該容器的信息。
如圖3所示,所述的組播注冊(cè)協(xié)議,工作流服務(wù)容器使用此協(xié)議聲明自己的存在,接收到此組播消息的工作流服務(wù)部署控制器會(huì)自動(dòng)記錄此容器的信息。組播注冊(cè)協(xié)議的通信流程為工作流服務(wù)容器創(chuàng)建一個(gè)組播UDP套接字發(fā)送消息來聲明自己的加入,并創(chuàng)建一個(gè)TCP套接字,在其上接收來工作流服務(wù)部署控制器命令請(qǐng)求。希望接收到新工作流服務(wù)容器注冊(cè)通告的工作流服務(wù)部署控制器,它創(chuàng)建一個(gè)套接字用于監(jiān)聽組播UDP注冊(cè)請(qǐng)求。當(dāng)控制器接收到容器的注冊(cè)請(qǐng)求時(shí),它就會(huì)創(chuàng)建TCP套接字并向容器監(jiān)聽請(qǐng)求的TCP套接字發(fā)送一個(gè)注冊(cè)請(qǐng)求響應(yīng),容器就會(huì)發(fā)送注冊(cè)所需信息到控制器完成注冊(cè)過程。
如圖4所示,所述的單播注冊(cè)協(xié)議,當(dāng)工作流服務(wù)容器需要向特定的工作流服務(wù)部署控制器注冊(cè)自己信息的時(shí)候,就使用此協(xié)議。單播注冊(cè)協(xié)議的通信流程當(dāng)工作流服務(wù)容器知道所要注冊(cè)的工作流服務(wù)部署控制器時(shí)就會(huì)直接創(chuàng)建一個(gè)TCP套接字并向控制器監(jiān)聽的端口發(fā)送注冊(cè)消息,當(dāng)控制器收到注冊(cè)消息后就會(huì)發(fā)送一個(gè)響應(yīng)消息完成注冊(cè)過程。
所述的工作流服務(wù)動(dòng)態(tài)部署協(xié)議,在分布式環(huán)境下動(dòng)態(tài)的把工作流服務(wù)單元部署到工作流服務(wù)容器中。工作流服務(wù)動(dòng)態(tài)部署協(xié)議的通信流程工作流服務(wù)部署控制器通過創(chuàng)建的TCP套接字向工作流服務(wù)容器監(jiān)聽的TCP套接字發(fā)送命令,當(dāng)容器收到命令的時(shí)候就會(huì)執(zhí)行相應(yīng)的命令并發(fā)送命令響應(yīng)。
工作流服務(wù)動(dòng)態(tài)部署協(xié)議作為實(shí)現(xiàn)工作流服務(wù)動(dòng)態(tài)部署和控制最核心協(xié)議,它包含一個(gè)命令集合,此命令集合主要包含Connect、Deploy、Undeploy、Start和Stop幾個(gè)用來實(shí)現(xiàn)部署與控制的命令。命令解釋如下Connect用來測(cè)試工作流服務(wù)容器的可連接性,以便及時(shí)的更新更新工作流服務(wù)部署控制器里容器注冊(cè)信息,減少由于容器不可連接帶來的資源浪費(fèi)與部署失敗。
Deploy用來向工作流服務(wù)容器部署相應(yīng)的工作流服務(wù)單元,如果服務(wù)單元已經(jīng)部署在工作流服務(wù)容器中就會(huì)返回異常代碼和信息給工作流服務(wù)部署控制器。
Undeploy用來從工作流服務(wù)容器卸載已部署的服務(wù)單元,如果該服務(wù)單元處于啟動(dòng)狀態(tài),那么容器會(huì)先停止該服務(wù)單元然后釋放掉分配的資源。
Start用來啟動(dòng)已經(jīng)部署在工作流服務(wù)容器中的服務(wù)單元,如果該服務(wù)單元不存在或已啟動(dòng)就會(huì)放回相應(yīng)的異常代碼和信息給工作流服務(wù)部署控制器。
Stop用來停止工作流服務(wù)容器中已經(jīng)啟動(dòng)的服務(wù)單元。
工作流服務(wù)部署控制器使用此協(xié)議中的這些命令來指示工作流服務(wù)容器完成相應(yīng)的任務(wù),這些命令使工作流服務(wù)部署控制器對(duì)工作流服務(wù)容器擁有完全的控制,因此可以很方便并且靈活的控制工作流服務(wù)單元的部署和生命周期。
以下結(jié)合本發(fā)明的具體內(nèi)容,描述本發(fā)明一個(gè)完整的服務(wù)步驟步驟一啟動(dòng)工作流服務(wù)部署控制器。
1、讀取工作流服務(wù)單元?jiǎng)討B(tài)配置文件并建立可動(dòng)態(tài)部署的工作流服務(wù)單元列表,為動(dòng)態(tài)部署各種工作流服務(wù)單元提供必要信息。
2、啟動(dòng)TCP請(qǐng)求監(jiān)聽線程;此線程負(fù)責(zé)接收工作流服務(wù)容器發(fā)送的注冊(cè)請(qǐng)求并登記工作流單元容器信息。
3、啟動(dòng)UDP組播監(jiān)聽線程;此線程負(fù)責(zé)接收來自工作流服務(wù)容器的UDP注冊(cè)請(qǐng)求,當(dāng)工作流服務(wù)部署控制器接收到UDP注冊(cè)請(qǐng)求時(shí)就會(huì)按照組播注冊(cè)協(xié)議來響應(yīng)此請(qǐng)求。
4、向組內(nèi)成員發(fā)送組播通告消息;如果組內(nèi)存在已經(jīng)啟動(dòng)的工作流服務(wù)容器,那么這個(gè)工作流服務(wù)容器就會(huì)直接建立一個(gè)到該控制器的TCP連接并且發(fā)送一個(gè)TCP注冊(cè)請(qǐng)求給該控制器,告訴它有關(guān)自己的一些信息,比如容器位置、容器當(dāng)前狀態(tài)等等,控制器就會(huì)把這些信息登記下來。
步驟二啟動(dòng)工作流服務(wù)容器。
1、啟動(dòng)UDP組播監(jiān)聽線程;此線程負(fù)責(zé)接收工作流服務(wù)部署控制器發(fā)出組播通告請(qǐng)求,當(dāng)工作流服務(wù)容器接收到組播通告請(qǐng)求時(shí)就會(huì)按照單播注冊(cè)協(xié)議定義,完成工作流服務(wù)容器的注冊(cè)過程。
2、啟動(dòng)TCP請(qǐng)求監(jiān)聽線程;此線程負(fù)責(zé)接收來自工作流服務(wù)部署控制器的命令請(qǐng)求并創(chuàng)建響應(yīng)的線程來處理這個(gè)命令。
3、向組內(nèi)成員發(fā)送組播注冊(cè)請(qǐng)求;如果組內(nèi)存在已經(jīng)啟動(dòng)的工作流服務(wù)部署控制器,它就會(huì)接收到這個(gè)請(qǐng)求并創(chuàng)建TCP套接字并向容器監(jiān)聽請(qǐng)求的TCP套接字發(fā)送一個(gè)注冊(cè)請(qǐng)求響應(yīng),容器就會(huì)通過這個(gè)TCP連接發(fā)送注冊(cè)所需信息到控制器完成注冊(cè)過程。
步驟三動(dòng)態(tài)部署一個(gè)工作流服務(wù)單元。
1、工作流服務(wù)部署控制器創(chuàng)建一個(gè)連接到工作流單元容器監(jiān)聽端口的TCP套接字。
2、發(fā)送Deploy命令以及需要部署的服務(wù)單元的描述信息。
3、工作流服務(wù)容器就會(huì)根據(jù)服務(wù)的描述信息中的類裝載路徑下載入服務(wù)并將其實(shí)例化,然后放入緩存中。
步驟四動(dòng)態(tài)啟動(dòng)一個(gè)工作流服務(wù)單元。
1、工作流服務(wù)部署控制器創(chuàng)建一個(gè)連接到工作流服務(wù)容器監(jiān)聽端口的TCP套接字。
2、發(fā)送Start命令以及需要啟動(dòng)的服務(wù)單元的描述信息。
3、工作流服務(wù)容器根據(jù)描述信息找到相應(yīng)的工作流服務(wù)單元實(shí)例并通過生命周期管理接口的start方法來啟動(dòng)服務(wù)單元。
步驟五動(dòng)態(tài)停止一個(gè)運(yùn)行的工作流服務(wù)單元。
1、工作流服務(wù)部署控制器創(chuàng)建一個(gè)連接到工作流服務(wù)容器監(jiān)聽端口的TCP套接字。
2、發(fā)送Stop命令以及需要停止的服務(wù)單元的描述信息。
3、工作流服務(wù)容器根據(jù)描述信息找到相應(yīng)的工作流服務(wù)單元實(shí)例并通過生命周期管理接口的stop方法來停止服務(wù)單元。
步驟六卸載一個(gè)已經(jīng)部署的工作流服務(wù)單元并釋放分配的資源。
1、工作流服務(wù)部署控制器創(chuàng)建一個(gè)連接到工作流服務(wù)容器監(jiān)聽端口的TCP套接字。
2、發(fā)送Undeploy命令以及需要卸載的服務(wù)單元的描述信息。
3、工作流服務(wù)容器根據(jù)描述信息找到相應(yīng)的工作流服務(wù)單元實(shí)例并將其從緩存刪除釋放緩存資源。
步驟七重復(fù)步驟三~步驟六,完成其它工作流服務(wù)單元的部署與控制。
權(quán)利要求
1.一種基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),包含工作流服務(wù)部署控制器、工作流服務(wù)容器以及工作流服務(wù)單元,其特征在于,工作流服務(wù)部署控制器、工作流服務(wù)容器以及工作流服務(wù)單元都運(yùn)行在Jini網(wǎng)絡(luò)下,相互之間通過組播通告協(xié)議、組播注冊(cè)協(xié)議、單播注冊(cè)協(xié)議和工作流服務(wù)動(dòng)態(tài)部署協(xié)議來實(shí)現(xiàn)通訊并完成整個(gè)自動(dòng)配置過程,具體為所述的工作流服務(wù)部署控制器,是系統(tǒng)的控制端,它使用組播通告協(xié)議聲明自己存在,使用工作流服務(wù)動(dòng)態(tài)部署協(xié)議來完成整個(gè)系統(tǒng)的服務(wù)部署與控制;當(dāng)已存在的群體中啟動(dòng)一個(gè)新的工作流服務(wù)部署控制器時(shí),相關(guān)的參與者通過組播通告協(xié)議被通知;所述的工作流服務(wù)容器,是系統(tǒng)的被控端,它使用組播注冊(cè)協(xié)議和單播注冊(cè)協(xié)議向工作流服務(wù)部署控制器注冊(cè)自己的信息,它主要用來緩存已部署的工作流服務(wù)單元并作為它們的運(yùn)行的環(huán)境為它們運(yùn)行提供需要的資源并對(duì)它們的運(yùn)行進(jìn)行有效的控制;所述的工作流服務(wù)單元,是系統(tǒng)中的移動(dòng)實(shí)體,基于Jini技術(shù)實(shí)現(xiàn)的服務(wù),能夠動(dòng)態(tài)的啟動(dòng)和停止。
2.根據(jù)權(quán)利要求1所述的基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),其特征是,所述的工作流服務(wù)部署控制器,為了實(shí)現(xiàn)工作流服務(wù)單元的動(dòng)態(tài)部署需要使用一個(gè)工作流服務(wù)動(dòng)態(tài)部署配置文件來描述目前系統(tǒng)中動(dòng)態(tài)部署的工作流服務(wù)單元信息,工作流服務(wù)動(dòng)態(tài)部署配置文件XML Schema記錄每個(gè)需要部署的服務(wù)的類路徑、啟動(dòng)的類以及用來創(chuàng)建對(duì)象的構(gòu)造函數(shù)信息。
3.根據(jù)權(quán)利要求1所述的基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),其特征是,所述的工作流服務(wù)單元,必須實(shí)現(xiàn)滿足已定義的生命周期管理接口,接口Java定義如下public interface LifeCycleAdmin{public void stop()throws java.rmi.RemoteException;public void start()throws java.rmi.RemoteException;}。
4.根據(jù)權(quán)利要求1所述的基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),其特征是,所述的組播通告協(xié)議,被工作流服務(wù)部署控制器使用聲明其的存在,當(dāng)已存在的群體中啟動(dòng)一個(gè)新的工作流服務(wù)部署控制器時(shí),組播通告協(xié)議通知相關(guān)的參與者,其通信流程為工作流服務(wù)部署控制器創(chuàng)建一個(gè)組播UDP套接字發(fā)送消息,并創(chuàng)建一個(gè)單播TCP套接字,在其上接收來工作流服務(wù)容器的請(qǐng)求,希望接收到新工作流服務(wù)部署控制器通告的工作流服務(wù)容器,它創(chuàng)建一個(gè)套接字用于監(jiān)聽組播UDP通告,當(dāng)容器接收到控制器的通告時(shí),創(chuàng)建TCP套接字并向控制器監(jiān)聽請(qǐng)求的TCP套接字發(fā)送一個(gè)消息,與此控制器建立聯(lián)系并注冊(cè)該容器的信息。
5.根據(jù)權(quán)利要求1所述的基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),其特征是,所述的組播注冊(cè)協(xié)議,被工作流服務(wù)容器使用聲明其的存在,接收到此組播消息的工作流服務(wù)部署控制器會(huì)自動(dòng)記錄此容器的信息,其通信流程為工作流服務(wù)容器創(chuàng)建一個(gè)組播UDP套接字發(fā)送消息來聲明自己的加入,并創(chuàng)建一個(gè)TCP套接字,在其上接收來工作流服務(wù)部署控制器命令請(qǐng)求,希望接收到新工作流服務(wù)容器注冊(cè)通告的工作流服務(wù)部署控制器,它創(chuàng)建一個(gè)套接字用于監(jiān)聽組播UDP注冊(cè)請(qǐng)求。當(dāng)控制器接收到容器的注冊(cè)請(qǐng)求時(shí),它就會(huì)創(chuàng)建TCP套接字并向容器監(jiān)聽請(qǐng)求的TCP套接字發(fā)送一個(gè)注冊(cè)請(qǐng)求響應(yīng),容器就會(huì)發(fā)送注冊(cè)所需信息到控制器完成注冊(cè)過程。
6.根據(jù)權(quán)利要求1所述的基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),其特征是,所述的單播注冊(cè)協(xié)議,工作流服務(wù)容器通過該協(xié)議向特定的工作流服務(wù)部署控制器注冊(cè)自己信息,其通信流程為當(dāng)工作流服務(wù)容器知道所要注冊(cè)的工作流服務(wù)部署控制器時(shí)就會(huì)直接創(chuàng)建一個(gè)TCP套接字并向控制器監(jiān)聽的端口發(fā)送注冊(cè)消息,當(dāng)控制器收到注冊(cè)消息后就會(huì)發(fā)送一個(gè)響應(yīng)消息完成注冊(cè)過程。
7.根據(jù)權(quán)利要求1所述的基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),其特征是,所述的工作流服務(wù)動(dòng)態(tài)部署協(xié)議,在分布式環(huán)境下動(dòng)態(tài)的把工作流服務(wù)單元部署到工作流服務(wù)容器中,其通信流程為工作流服務(wù)部署控制器通過創(chuàng)建的TCP套接字向工作流服務(wù)容器監(jiān)聽的TCP套接字發(fā)送命令,當(dāng)容器收到命令的時(shí)候就會(huì)執(zhí)行相應(yīng)的命令并發(fā)送命令響應(yīng)。
8.根據(jù)權(quán)利要求1或者7所述的基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),其特征是,所述的工作流服務(wù)動(dòng)態(tài)部署協(xié)議,作為實(shí)現(xiàn)工作流服務(wù)動(dòng)態(tài)部署和控制最核心協(xié)議,它包含一個(gè)命令集合,此命令集合主要包含Connect、Deploy、Undeploy、Start和Stop幾個(gè)用來實(shí)現(xiàn)部署與控制的命令,工作流服務(wù)部署控制器使用此協(xié)議中的這些命令來指示工作流服務(wù)容器完成相應(yīng)的任務(wù),這些命令使工作流服務(wù)部署控制器對(duì)工作流服務(wù)容器擁有完全的控制,因此能很方便并且靈活的控制工作流服務(wù)單元的部署和生命周期。
9.根據(jù)權(quán)利要求8所述的基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),其特征是,所述的命令Connect、Deploy、Undeploy、Start和Stop,是指Connect用來測(cè)試工作流服務(wù)容器的可連接性,以便及時(shí)更新更新工作流服務(wù)部署控制器里容器注冊(cè)信息,減少由于容器不可連接帶來的資源浪費(fèi)與部署失??;Deploy用來向工作流服務(wù)容器部署相應(yīng)的工作流服務(wù)單元,如果服務(wù)單元已經(jīng)部署在工作流服務(wù)容器中就會(huì)返回異常代碼和信息給工作流服務(wù)部署控制器;Undeploy用來從工作流服務(wù)容器卸載已部署的服務(wù)單元,如果服務(wù)單元處于啟動(dòng)狀態(tài),那么容器會(huì)先停止該服務(wù)單元然后釋放掉已分配的資源;Start用來啟動(dòng)已經(jīng)部署在工作流服務(wù)容器中的服務(wù)單元,如果該服務(wù)單元不存在或已啟動(dòng)就會(huì)放回相應(yīng)的異常代碼和信息給工作流服務(wù)部署控制器;Stop用來停止工作流服務(wù)容器中已經(jīng)啟動(dòng)的服務(wù)單元。
全文摘要
一種基于Jini技術(shù)的工作流服務(wù)自動(dòng)配置系統(tǒng),工作流服務(wù)部署控制器,工作流服務(wù)容器以及工作流服務(wù)單元運(yùn)行在Jini網(wǎng)絡(luò)下,通過組播通告協(xié)議、組播注冊(cè)協(xié)議、單播注冊(cè)協(xié)議和工作流服務(wù)動(dòng)態(tài)部署協(xié)議來實(shí)現(xiàn)通訊并完成整個(gè)自動(dòng)配置過程,工作流服務(wù)部署控制器和工作流服務(wù)容器之間通過組播通告協(xié)議、組播注冊(cè)協(xié)議以及單播注冊(cè)協(xié)議來發(fā)現(xiàn)對(duì)方并實(shí)現(xiàn)工作流服務(wù)容器在控制器中的注冊(cè);控制器通過工作流服務(wù)動(dòng)態(tài)部署協(xié)議來實(shí)現(xiàn)與工作流服務(wù)容器的通信,進(jìn)而實(shí)現(xiàn)遠(yuǎn)程的工作流服務(wù)動(dòng)態(tài)部署和生命周期的控制。本發(fā)明充分利用了Jini網(wǎng)絡(luò)中服務(wù)可以動(dòng)態(tài)加入、動(dòng)態(tài)查找以及動(dòng)態(tài)發(fā)現(xiàn)等機(jī)制來實(shí)現(xiàn)分布式工作流系統(tǒng)中的服務(wù)單元的動(dòng)態(tài)部署與服務(wù)單元的生命周期控制。
文檔編號(hào)H04L29/02GK1728705SQ20051002821
公開日2006年2月1日 申請(qǐng)日期2005年7月28日 優(yōu)先權(quán)日2005年7月28日
發(fā)明者曹健, 衛(wèi)偉, 李曉華, 楊萍, 張申生 申請(qǐng)人:上海交通大學(xué)