版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
11簡(jiǎn)介業(yè)務(wù)應(yīng)用的需求總是隨著業(yè)務(wù)環(huán)境的變化趨勢(shì)而不斷地改變。決策很少是一成不變的,并且競(jìng)爭(zhēng)壓力要求業(yè)務(wù)邏輯的設(shè)計(jì)和實(shí)現(xiàn)具有靈活性,以快速地適應(yīng)不斷變化的需求。通常,對(duì)業(yè)務(wù)邏輯的更改必須由開(kāi)發(fā)人員來(lái)完成,然后進(jìn)行多次徹底的測(cè)試,而這將是一個(gè)很耗時(shí)的過(guò)程。在應(yīng)用程序的修改工作完成后,需要將其重新部署到服務(wù)器,需要留出預(yù)定的停機(jī)時(shí)間,以防應(yīng)用程序?qū)τ脩舨豢捎谩?duì)于這個(gè)問(wèn)題,更好的解決方案是通過(guò)應(yīng)用程序之外的一組規(guī)則來(lái)實(shí)現(xiàn)某些業(yè)務(wù)決策。這些規(guī)則并沒(méi)有被編譯到應(yīng)用程序中,而是在運(yùn)行時(shí)讀取并應(yīng)用。通過(guò)這種方式,無(wú)需更改代碼或者停止正在運(yùn)行的應(yīng)用程序就可以改變這些規(guī)則。WebLogicPortal包括一個(gè)基本的規(guī)則引擎,用于使WebLogicPlatform應(yīng)用程序從規(guī)則獲益。盡管該引擎不是功能完備的產(chǎn)品,但我們將展示如何將其與WebLogicIntegrationBusinessProcesses(JPDs)一起使用來(lái)為業(yè)務(wù)邏輯提供一種靈活且動(dòng)態(tài)的實(shí)現(xiàn)機(jī)制,從而無(wú)需只為了修改規(guī)則而重新部署應(yīng)用程序。首先我們來(lái)看一下將在全文中使用的例如應(yīng)用程序,然后介紹如何將規(guī)則引擎注入到WLI流程中以實(shí)現(xiàn)業(yè)務(wù)邏輯。然后,我們將更仔細(xì)地研究這些規(guī)則本身以及如何為業(yè)務(wù)邏輯定義這些規(guī)則,最后將描述在運(yùn)行中的系統(tǒng)中更改業(yè)務(wù)規(guī)則所使用的機(jī)制。例如應(yīng)用程序我們將開(kāi)發(fā)一個(gè)例如交易應(yīng)用程序作為在業(yè)務(wù)流程中使用規(guī)則的例子。該交易應(yīng)用程序是一個(gè)金融交易流程的簡(jiǎn)化版本,該流程使用調(diào)用規(guī)則引擎的JPD業(yè)務(wù)流程而構(gòu)建。該例如應(yīng)用程序采用了不同的有價(jià)證券交易集合,并根據(jù)一組由業(yè)務(wù)定義的規(guī)則將其分組成交易塊以便執(zhí)行,或許是為了減少傭金。當(dāng)然,這里給出的應(yīng)用程序并不完整,但它已經(jīng)足以展示如何在現(xiàn)實(shí)世界應(yīng)用程序中使用規(guī)則引擎。有完整的源代碼可供下載,其中的readme文件提供了構(gòu)建和運(yùn)行該應(yīng)用程序的說(shuō)明。在解釋如何開(kāi)發(fā)這樣的應(yīng)用程序之前,我們先通過(guò)對(duì)門(mén)戶規(guī)則引擎的一些特性的簡(jiǎn)要概括來(lái)了解其工作方式。這里假定讀者熟悉一般的規(guī)則技術(shù)。規(guī)則引擎及其工作方式圖1說(shuō)明了規(guī)則引擎的基本情況。該引擎根據(jù)一組規(guī)則來(lái)處理初始的事實(shí)集,而這些規(guī)則由引擎從外部庫(kù)中獲得。初始事實(shí)用于為該引擎填充工作內(nèi)存。由規(guī)則來(lái)對(duì)工作內(nèi)存中的事實(shí)進(jìn)行評(píng)估,如果滿足某條規(guī)則的條件,則將執(zhí)行對(duì)應(yīng)的動(dòng)作。通常,一個(gè)規(guī)則動(dòng)作將向工作內(nèi)存中添加一條新的事實(shí),并重復(fù)該流程直到應(yīng)用完所有的規(guī)則。然后通過(guò)可選的過(guò)濾器來(lái)選擇特定類的對(duì)象以返回給調(diào)用方??梢酝ㄟ^(guò)Controls界面訪問(wèn)規(guī)則引擎,還可以用它來(lái)設(shè)置屬性(比方規(guī)則集文件的位置)。圖1:該規(guī)則引擎是一個(gè)由控件包裝的EJB。儲(chǔ)存庫(kù)中的規(guī)則反復(fù)地應(yīng)用于工作內(nèi)存中的事實(shí),以獲得新的事實(shí)。在無(wú)法進(jìn)行繼續(xù)推理的情況下,對(duì)工作內(nèi)存進(jìn)行過(guò)濾以返回感興趣的項(xiàng)目。從WLI流程調(diào)用規(guī)則引擎讓我們從被實(shí)現(xiàn)為JPD的交易業(yè)務(wù)流程開(kāi)始,來(lái)看看如何添加對(duì)規(guī)則引擎的調(diào)用。要在WLI流程中添加規(guī)則,可以使用作為WebLogicPortal的一部分而提供的RulesExecutorControl(規(guī)則執(zhí)行器控件)。對(duì)于本例,我們只使用該控件中所提供的方法和特性的一個(gè)子集。關(guān)于規(guī)則控件的附加說(shuō)明文檔可以在參考資料部分找到。此處假定開(kāi)發(fā)人員使用WebLogicWorkshop集成開(kāi)發(fā)環(huán)境來(lái)創(chuàng)建新的流程應(yīng)用程序。然后可在該應(yīng)用程序中創(chuàng)建一個(gè)流程項(xiàng)目。因?yàn)槟J(rèn)情況下門(mén)戶控件在流程項(xiàng)目中不可用,所以需要將這些控件和規(guī)則引擎的EJB導(dǎo)入到應(yīng)用程序。然后,將控件輸入和輸出插入到JPD中。在WLI流程中使用門(mén)戶規(guī)則引擎的基本步驟如下:導(dǎo)入規(guī)則引擎到應(yīng)用程序:在應(yīng)用程序中包含規(guī)則引擎。將p13n_controls庫(kù)添加到應(yīng)用程序。處理輸入和輸出:為輸入和結(jié)果添加變量。創(chuàng)建一個(gè)RulesExecutor控件。在WLI流程中添加一個(gè)ControlSendWithReturn節(jié)點(diǎn)。為創(chuàng)建初始數(shù)據(jù)編寫(xiě)Java代碼。添加一個(gè)流程節(jié)點(diǎn)以對(duì)結(jié)果進(jìn)行迭代。創(chuàng)建規(guī)則集。后面我們將更詳細(xì)地討論其中的每一個(gè)步驟。在應(yīng)用程序中包含規(guī)則引擎規(guī)則引擎包含在下面的文件中:要在應(yīng)用程序中包含該引擎,請(qǐng)右擊Workshop集成開(kāi)發(fā)環(huán)境中的Modules文件夾,并選擇AddModule。導(dǎo)航到該jar文件,并選擇Open。將p13n_controls庫(kù)添加到應(yīng)用程序要使得門(mén)戶規(guī)則控件在應(yīng)用程序中可用,請(qǐng)右擊Workshop集成開(kāi)發(fā)環(huán)境中的Libraries文件夾,并選擇AddLibrary。該控件位于:導(dǎo)航到此文件,單擊Open按鈕。為輸入和結(jié)果添加變量這里使用的RulesExecutor控件方法需要一個(gè)對(duì)象數(shù)組作為輸入并返回一個(gè)結(jié)果的迭代器。在Workshop集成開(kāi)發(fā)環(huán)境中為這些值創(chuàng)建變量,這樣我們就可以在下一步中通過(guò)圖形用戶界面來(lái)創(chuàng)建控件。要完成該任務(wù),請(qǐng)為DataPalette中的變量單擊Add按鈕,鍵入輸入變量的名稱,并鍵入Java類型java.lang.Object[]。使用同樣的方式創(chuàng)建Java類型為java.util.Iterator的輸出變量。創(chuàng)建一個(gè)RulesExecutor控件要?jiǎng)?chuàng)建規(guī)則控件,請(qǐng)單擊DataPalette中控件的Add按鈕。從菜單中選擇PortalControls->RulesExecutor。為控件鍵入名稱,并按下Create按鈕。在WLI流程中添加一個(gè)ControlSendWithReturn節(jié)點(diǎn)將剛剛創(chuàng)建的控件拖放到流程中以創(chuàng)建一個(gè)控件節(jié)點(diǎn)來(lái)實(shí)際調(diào)用規(guī)則引擎。在例如中,我們將使用控件的evaluateRuleSet()方法。從SendData面板中,選擇前面為方法的輸入?yún)?shù)而創(chuàng)建的輸入變量。使用ReceiveData面板選擇返回變量來(lái)獲取規(guī)則執(zhí)行的結(jié)果。在PropertyEditor窗口中為控件屬性鍵入相應(yīng)的值。為創(chuàng)建初始數(shù)據(jù)編寫(xiě)Java代碼在創(chuàng)建了輸入變量后,我們還沒(méi)有對(duì)它賦值,所以需要編寫(xiě)代碼來(lái)完成該任務(wù)。這個(gè)變量是一個(gè)Java對(duì)象數(shù)組,它提供了輸入到規(guī)則條件中的初始事實(shí)??梢詣?chuàng)建一個(gè)新的Perform節(jié)點(diǎn)來(lái)初始化該數(shù)組,或者通過(guò)使用SourceView在ControlSend節(jié)點(diǎn)中添加代碼來(lái)設(shè)置該變量的值。添加一個(gè)流程節(jié)點(diǎn)以對(duì)結(jié)果進(jìn)行迭代RulesExecutor控件的每一個(gè)計(jì)算方法都將返回一個(gè)結(jié)果的迭代器。編寫(xiě)代碼,使用該值實(shí)現(xiàn)對(duì)規(guī)則執(zhí)行結(jié)果的迭代。如果沒(méi)有指定過(guò)濾器類,這個(gè)迭代器將返回規(guī)則引擎工作內(nèi)存中的所有值。其中包括原始輸入以及任何在執(zhí)行滿足條件的規(guī)則的動(dòng)作時(shí)添加到工作內(nèi)存中的值。對(duì)于添加的對(duì)象,迭代器返回一個(gè)Result類的對(duì)象,該類的getObject()方法可以返回在規(guī)則動(dòng)作中所添加的實(shí)際對(duì)象。創(chuàng)建規(guī)則集使用XML編輯器,在/META-INF/data目錄中創(chuàng)建一個(gè)擴(kuò)展名為.rls的文件。規(guī)則通常添加到子目錄rulesets中。業(yè)務(wù)邏輯規(guī)則我們剛剛展示了如何在業(yè)務(wù)流程中插入規(guī)則引擎。現(xiàn)在讓我們來(lái)看看如何利用該規(guī)則引擎以及如何編寫(xiě)映射到業(yè)務(wù)規(guī)則的規(guī)則。規(guī)則包括兩個(gè)部分:應(yīng)用該規(guī)則時(shí)必須為真的條件,以及當(dāng)條件滿足時(shí)將執(zhí)行的動(dòng)作。因此,要在應(yīng)用程序中使用規(guī)則,設(shè)計(jì)人員必須首先定義哪些對(duì)象和屬性在測(cè)試規(guī)則條件時(shí)對(duì)規(guī)則編寫(xiě)者是可見(jiàn)的。規(guī)則引擎允許在一個(gè)條件中調(diào)用任意多個(gè)方法。這種構(gòu)造方式便于定義JavaBean作為組成初始事實(shí)集合的對(duì)象,規(guī)則引擎使用這些初始事實(shí)來(lái)進(jìn)行推理??梢允褂胋ean的get方法來(lái)獲得條件測(cè)試的值。規(guī)則所引用的Java對(duì)象需要從創(chuàng)建它的WLI流程以及從規(guī)則引擎本身中都可見(jiàn)。這就避免了這些對(duì)象與流程JPD位于同一包中,更確切地說(shuō),它們應(yīng)該被創(chuàng)建于作為同一應(yīng)用程序的一部分的Java項(xiàng)目中。然后,這些對(duì)象可以通過(guò)package.class標(biāo)記在規(guī)則文件(.rls)和流程JPD中引用。在我們的交易例如中,將把不同的交易分組以便可以成塊執(zhí)行。為實(shí)現(xiàn)該目標(biāo),我們定義兩個(gè)bean來(lái)表示相關(guān)的對(duì)象。第一個(gè)是Tradebean,它表示單個(gè)的交易訂單。這個(gè)bean的屬性表示交易的份額、股份數(shù)目以及所期望的價(jià)格等。任何對(duì)于決定交易所屬的塊來(lái)說(shuō)可能有用的值,都應(yīng)該作為這個(gè)具有公有g(shù)et方法的bean的屬性,以便能夠在規(guī)則中使用它。第二個(gè)bean是Blockbean,通過(guò)它可以存儲(chǔ)所有根據(jù)某個(gè)屬性集聚合在一起的不同交易。這個(gè)bean的屬性包括規(guī)則中任何可用于判定塊大得足以執(zhí)行訂單的的信息。這些屬性可以是平均價(jià)格、交易的總美元數(shù)或總的份額數(shù)等等。為了在我們的應(yīng)用程序中實(shí)現(xiàn)塊功能,首先使用規(guī)則來(lái)定義某項(xiàng)交易是否只需要執(zhí)行其自身就足夠了(也就是說(shuō),它是僅包含單個(gè)交易的塊),或者如果不是這樣的話,那么應(yīng)該使用什么屬性將其與其他交易聚集以形成一個(gè)塊。在一項(xiàng)交易聚集到適當(dāng)?shù)膲K中后,就會(huì)第二次調(diào)用規(guī)則引擎來(lái)判斷該塊是否完成。例如,假設(shè)我們想要得到這樣的規(guī)則:規(guī)則1:任何5,000股及以上的單項(xiàng)交易應(yīng)該作為一個(gè)塊并予以執(zhí)行。規(guī)則2:由同一個(gè)投資管理者定購(gòu)的具有相同標(biāo)記的交易應(yīng)該聚集在一起。規(guī)則3:總價(jià)值超過(guò),000的塊應(yīng)該予以執(zhí)行。調(diào)用與規(guī)則條件中的對(duì)象相關(guān)聯(lián)的方法很容易,如下面的例如所示,這是規(guī)則1的條件:<cr:conditions><greater-than-or-equal-to><instance-method><variable><type-alias>Beans.Trade</type-alias></variable><name>getQuantity</name><!--getQuantity(andanyotherbeanproperty)takesnoarguments.Ifitdid,theywouldgohere<arguments>...</arguments>--></instance-method><literal:integer>5000</literal:integer></greater-than-or-equal-to></cr:conditions>在這個(gè)例如中,如果在我們的事實(shí)中有一個(gè)Trade對(duì)象,那么規(guī)則引擎就會(huì)調(diào)用它的getQuantity()方法并且將結(jié)果與整型5000進(jìn)行比擬。如果它大于或等于5000,則該條件為真。規(guī)則的第二部分是條件滿足時(shí)執(zhí)行的動(dòng)作的列表。最常見(jiàn)的動(dòng)作是:創(chuàng)建一個(gè)新對(duì)象,把它添加到規(guī)則引擎用來(lái)評(píng)估條件的事實(shí)集中。規(guī)則引擎繼續(xù)對(duì)規(guī)則進(jìn)行迭代,直到無(wú)法從事實(shí)中得出更多的推理;向動(dòng)作添加新對(duì)象會(huì)導(dǎo)致另一輪的條件評(píng)估循環(huán)。正如我們將要看到的那樣,可以創(chuàng)建任意類型的對(duì)象,并定義對(duì)應(yīng)用程序具有特定意義的各種類型。這里的技巧是,應(yīng)用程序設(shè)計(jì)者可以定義一組足夠豐富的動(dòng)作,以包含那些可由規(guī)則編寫(xiě)者調(diào)用以滿足各種業(yè)務(wù)需求的任務(wù)。在我們的交易應(yīng)用程序例如中,所有動(dòng)作都會(huì)創(chuàng)建將添加到由規(guī)則引擎使用的工作集中的新對(duì)象。有些規(guī)則向該集合中添加簡(jiǎn)單的String對(duì)象。這些對(duì)象表示了從原始事實(shí)中演繹出來(lái)的中間事實(shí),它們可以在規(guī)則引擎中得到進(jìn)一步的推理,但流程JPD不會(huì)以任何形式解釋它們。其他的規(guī)則將創(chuàng)建Beans.Action類的對(duì)象。這些對(duì)象包括當(dāng)規(guī)則條件滿足時(shí)流程將執(zhí)行的實(shí)際命令。流程JPD和支持類將實(shí)施已知的動(dòng)作命令來(lái)聚集交易并執(zhí)行塊交易。在這個(gè)簡(jiǎn)單的例如中,實(shí)際上只有兩個(gè)已知的命令:創(chuàng)建(并執(zhí)行)訂單、使用指定的屬性聚集一項(xiàng)交易。前面規(guī)則2的動(dòng)作是使用屬性symbol和manager來(lái)進(jìn)行聚集,該動(dòng)作如下:<cr:actions><new-instance><type-alias>Beans.Action</type-alias><arguments><literal:string>symbol,manager</literal:string></arguments></new-instance></cr:actions>響應(yīng)該動(dòng)作,流程JPD及其支持類為當(dāng)前交易查詢symbol和投資manager,找出具有相同的symbol和投資manager的未執(zhí)行交易,并將這些交易聚集到相同的塊。在完成一項(xiàng)交易的聚集后,將從第二個(gè)RulesExecutor控件再次調(diào)用規(guī)則引擎,以評(píng)估規(guī)則,決定是否應(yīng)該執(zhí)行產(chǎn)生的塊交易。根據(jù)業(yè)務(wù)規(guī)則3,該規(guī)則如下:<cr:conditions><greater-than><instance-method><variable><type-alias>Beans.Block</type-alias></variable><name>getAmount</name></instance-method><literal:float></literal:float></greater-than></cr:conditions><cr:actions><new-instance><type-alias>Beans.Action</type-alias><arguments><literal:string>create</literal:string></arguments></new-instance></cr:actions>這一次,我們分析Beans.Block對(duì)象,獲取amount屬性并與閾值進(jìn)行比擬。如果該條件滿足,則使用create命令向工作集中添加一個(gè)Beans.Action對(duì)象,這是通知流程執(zhí)行該塊訂單的信號(hào)。讓我們仔細(xì)分析一下流程JPD。下面有用于調(diào)用規(guī)則引擎的ControlSend節(jié)點(diǎn)的代碼。正如我們可以看到的,該節(jié)點(diǎn)使用一個(gè)RulesExecutor控件來(lái)評(píng)估規(guī)則集,該控件返回一個(gè)迭代器。通過(guò)其屬性(沒(méi)有給出),控件將過(guò)濾結(jié)果,僅返回Beans.Action類的對(duì)象。通過(guò)這些對(duì)象,代碼將提取動(dòng)作命令并執(zhí)行所請(qǐng)求的動(dòng)作。正如前面所提到的,如果動(dòng)作是聚集該交易,則流程將使用更新后的塊作為輸入,對(duì)規(guī)則引擎開(kāi)始第二次調(diào)用。通過(guò)執(zhí)行適當(dāng)?shù)膭?dòng)作,對(duì)結(jié)果進(jìn)行第二次迭代循環(huán)。publicvoidrulesExecutorControlEvaluateRuleSet()throwsException{//ExecutetheRulesusingfactsastheinput//#START:CODEGENERATED-PROTECTEDSECTION-youcansafely//Addcodeabovethiscommentinthismethod.#////Inputtransform//Returnmethodcallthis.results=rulesExecutorControl.evaluateRuleSet(this.facts);//Outputtransform//Outputassignments//#END:CODEGENERATED-PROTECTEDSECTION-youcansafely//Addcodebelowthiscommentinthismethod.#///*Iterateovertheresultsofrulesexecution.ThisassumesthatresultsarefilteredtoreturnonlyitemsoftheBeans.Actionclass.ThecommandpropertyfromtheActionisexpectedtobeeitherthestring"create,"inwhichcaseaBlocktradecanbeexecutedfromthesinglediscreteTrade,oritisexpectedtobealistofattributesdescribingtheBlockthatthisTradeshouldbeincorporatedinto.*/while(results.hasNext()){Stringaction=((Action)results.next()).getCommand();if(action.equals("create"))(newBlock(trade)).execute();//single-tradeelse{//AggregatetradeintoanintermediateBlocktrade.aggregate(blockStorage,action);/*Calltherulesengineasecondtime,thistimeusingtheresultingBlockastheonlyinput.ThisistodetermineiftheresultingBlocknowmeetsthecriteriatoexecutetheorder.Again,resultsareassumedtobefilteredbythecontroltoreturnonlytheActions.*/Blockblock=trade.getBlock();ObjectblockFacts[]=newObject[1];blockFacts[0]=block;IteratorblockResults=blockRulesCntl.evaluateRuleSet(blockFacts);while(blockResults.hasNext()){action=((Action)blockResults.next()).getCommand();if(action.equals("create"))block.execute();}}}}動(dòng)態(tài)規(guī)則WebLogicPortal的特性之一是Datasync功能,通過(guò)它可以將修改后的數(shù)據(jù)重新部署到集群中的門(mén)戶應(yīng)用程序中。因?yàn)殚T(mén)戶規(guī)則引擎從Datasync存儲(chǔ)區(qū)中獲得其規(guī)則文件,所以應(yīng)用程序的業(yè)務(wù)規(guī)則可以在運(yùn)行的系統(tǒng)中進(jìn)行更改,而無(wú)需停止應(yīng)用程序。關(guān)于Datasync以及用于更新數(shù)據(jù)的DatasyncWeb應(yīng)用程序的其他信息,請(qǐng)參閱WebLogicPortal文檔。默認(rèn)情況下,DatasyncWeb應(yīng)用程序?qū)⒉渴鹪诔R?guī)門(mén)戶應(yīng)用程序中。然而,我們的例如應(yīng)用程序是一個(gè)WLI流程應(yīng)用程序,因此必須在其中手動(dòng)地包含Datasync。要在Workshop集成開(kāi)發(fā)環(huán)境中完成這些工作,請(qǐng)右擊Modules文件夾,并選擇AddModule。然后,選擇下面的文件:在集群中,Datasync應(yīng)用程序應(yīng)該僅部署到管理服務(wù)器。為了說(shuō)明如何在運(yùn)行中的應(yīng)用程序中更改規(guī)則,例如應(yīng)用程序中包括了兩個(gè)不同的規(guī)則文件,這兩個(gè)文件中包括了用于將交易聚集成塊的可選規(guī)則。前面已經(jīng)描述了默認(rèn)規(guī)則(定義于traderules.rls文件中),第二個(gè)集合(在altrules.rls中)定義如下規(guī)則:按照標(biāo)記將所有的交易聚集成塊。執(zhí)行包含3,000或更多股的塊。要看到動(dòng)態(tài)規(guī)則的執(zhí)行,首先使用所提供的測(cè)試數(shù)據(jù)運(yùn)行例如應(yīng)用程序。無(wú)需停止服務(wù)器或者重新部署應(yīng)用程序,直接將原始規(guī)則保存到一個(gè)新文件中,并將替代的規(guī)則文件從:/META-INF/data/rulesets/altrules.rls拷貝到:再次運(yùn)行例如數(shù)據(jù),這時(shí)會(huì)發(fā)現(xiàn)產(chǎn)生了不同的訂單。注意,在例如域中不需要重新運(yùn)行DatasyncWeb應(yīng)用程序來(lái)更新規(guī)則。這是因?yàn)槔缙脚_(tái)域以開(kāi)發(fā)模式運(yùn)行。在這種模式下,Datasync自動(dòng)輪詢/META-INF/data目錄及其子目錄以搜索更改,更改過(guò)的文件可以自動(dòng)地重新部署到應(yīng)用程序。在生產(chǎn)域中,需要使用Web應(yīng)用程序來(lái)實(shí)現(xiàn)數(shù)據(jù)的重新部署。推薦的步驟是,首先為所有更新過(guò)的文件創(chuàng)建一個(gè)jar文件,jar文件的根目錄應(yīng)該是data。然后,使用DatasyncWeb應(yīng)用程序的BootstrapData功能來(lái)重新部署包含了新規(guī)則的jar文件。下載您可以下載本文中使用的例如程序的源代碼:(2MB)結(jié)束語(yǔ)在與WLI流程應(yīng)用程序一起使用時(shí),PortalRulesEngine是實(shí)現(xiàn)業(yè)務(wù)邏輯的強(qiáng)大工具。它很容易合并到WLI流程中,并且可以使用JavaBean來(lái)評(píng)估規(guī)則條件,或者擴(kuò)展作為規(guī)則評(píng)估結(jié)果而執(zhí)行的動(dòng)作。最后,Datasync特性所提供的動(dòng)態(tài)更新能力使得業(yè)務(wù)邏輯更靈活,并能夠在不改變Java代碼的前提下適應(yīng)不斷變化的需求,所以不需要重新部署應(yīng)用程序。
咖啡店創(chuàng)業(yè)計(jì)劃書(shū)第一部分:背景在中國(guó),人們?cè)絹?lái)越愛(ài)喝咖啡。隨之而來(lái)的咖啡文化充滿生活的每個(gè)時(shí)刻。無(wú)論在家里、還是在辦公室或各種社交場(chǎng)合,人們都在品著咖啡??Х戎饾u與時(shí)尚、現(xiàn)代生活聯(lián)系在一齊。遍布各地的咖啡屋成為人們交談、聽(tīng)音樂(lè)、休息的好地方,咖啡豐富著我們的生活,也縮短了你我之間的距離,咖啡逐漸發(fā)展為一種文化。隨著咖啡這一有著悠久歷史飲品的廣為人知,咖啡正在被越來(lái)越多的中國(guó)人所理解。第二部分:項(xiàng)目介紹第三部分:創(chuàng)業(yè)優(yōu)勢(shì)目前大學(xué)校園的這片市場(chǎng)還是空白,競(jìng)爭(zhēng)壓力小。而且前期投資也不是很高,此刻國(guó)家鼓勵(lì)大學(xué)生畢業(yè)后自主創(chuàng)業(yè),有一系列的優(yōu)惠政策以及貸款支持。再者大學(xué)生往往對(duì)未來(lái)充滿期望,他們有著年輕的血液、蓬勃的朝氣,以及初生牛犢不怕虎的精神,而這些都是一個(gè)創(chuàng)業(yè)者就應(yīng)具備的素質(zhì)。大學(xué)生在學(xué)校里學(xué)到了很多理論性的東西,有著較高層次的技術(shù)優(yōu)勢(shì),現(xiàn)代大學(xué)生有創(chuàng)新精神,有對(duì)傳統(tǒng)觀念和傳統(tǒng)行業(yè)挑戰(zhàn)的信心和欲望,而這種創(chuàng)新精神也往往造就了大學(xué)生創(chuàng)業(yè)的動(dòng)力源泉,成為成功創(chuàng)業(yè)的精神基礎(chǔ)。大學(xué)生創(chuàng)業(yè)的最大好處在于能提高自己的潛力、增長(zhǎng)經(jīng)驗(yàn),以及學(xué)以致用;最大的誘人之處是透過(guò)成功創(chuàng)業(yè),能夠?qū)崿F(xiàn)自己的理想,證明自己的價(jià)值。第四部分:預(yù)算1、咖啡店店面費(fèi)用咖啡店店面是租賃建筑物。與建筑物業(yè)主經(jīng)過(guò)協(xié)商,以合同形式達(dá)成房屋租賃協(xié)議。協(xié)議資料包括房屋地址、面積、結(jié)構(gòu)、使用年限、租賃費(fèi)用、支付費(fèi)用方法等。租賃的優(yōu)點(diǎn)是投資少、回收期限短。預(yù)算10-15平米店面,啟動(dòng)費(fèi)用大約在9-12萬(wàn)元。2、裝修設(shè)計(jì)費(fèi)用咖啡店的滿座率、桌面的周轉(zhuǎn)率以及氣候、節(jié)日等因素對(duì)收益影響較大。咖啡館的消費(fèi)卻相對(duì)較高,主要針對(duì)的也是學(xué)生人群,咖啡店布局、格調(diào)及采用何種材料和咖啡店效果圖、平面圖、施工圖的設(shè)計(jì)費(fèi)用,大約6000元左右3、裝修、裝飾費(fèi)用具體費(fèi)用包括以下幾種。(1)外墻裝飾費(fèi)用。包括招牌、墻面、裝飾費(fèi)用。(2)店內(nèi)裝修費(fèi)用。包括天花板、油漆、裝飾費(fèi)用,木工、等費(fèi)用。(3)其他裝修材料的費(fèi)用。玻璃、地板、燈具、人工費(fèi)用也應(yīng)計(jì)算在內(nèi)。整體預(yù)算按標(biāo)準(zhǔn)裝修費(fèi)用為360元/平米,裝修費(fèi)用共360*15=5400元。4、設(shè)備設(shè)施購(gòu)買(mǎi)費(fèi)用具體設(shè)備主要有以下種類。(1)沙發(fā)、桌、椅、貨架。共計(jì)2250元(2)音響系統(tǒng)。共計(jì)450(3)吧臺(tái)所用的烹飪?cè)O(shè)備、儲(chǔ)存設(shè)備、洗滌設(shè)備、加工保溫設(shè)備。共計(jì)600(4)產(chǎn)品制造使用所需的吧臺(tái)、咖啡杯、沖茶器、各種小碟等。共計(jì)300凈水機(jī),采用美的品牌,這種凈水器每一天能生產(chǎn)12l純凈水,每一天銷售咖啡及其他飲料100至200杯,價(jià)格大約在人民幣1200元上下。咖啡機(jī),咖啡機(jī)選取的是電控半自動(dòng)咖啡機(jī),咖啡機(jī)的報(bào)價(jià)此刻就應(yīng)在人民幣350元左右,加上另外的附件也不會(huì)超過(guò)1200元。磨豆機(jī),價(jià)格在330―480元之間。冰砂機(jī),價(jià)格大約是400元一臺(tái),有點(diǎn)要說(shuō)明的是,最好是買(mǎi)兩臺(tái),不然夏天也許會(huì)不夠用。制冰機(jī),從制冰量上來(lái)說(shuō),一般是要留有富余??钪票鶛C(jī)每一天的制冰量是12kg。價(jià)格稍高550元,質(zhì)量較好,所以能夠用很多年,這么算來(lái)也是比較合算的。5、首次備貨費(fèi)用包括購(gòu)買(mǎi)常用物品及低值易耗品,吧臺(tái)用各種咖啡豆、奶、茶、水果、冰淇淋等的費(fèi)用。大約1000元6、開(kāi)業(yè)費(fèi)用開(kāi)業(yè)費(fèi)用主要包括以下幾種。(1)營(yíng)業(yè)執(zhí)照辦理費(fèi)、登記費(fèi)、保險(xiǎn)費(fèi);預(yù)計(jì)3000元(2)營(yíng)銷廣告費(fèi)用;預(yù)計(jì)450元7、周轉(zhuǎn)金開(kāi)業(yè)初期,咖啡店要準(zhǔn)備必須量的流動(dòng)資金,主要用于咖啡店開(kāi)業(yè)初期的正常運(yùn)營(yíng)。預(yù)計(jì)2000元共計(jì): 120000+6000+5400+2250+450+600+300+1200+1200+480+400+550+1000+3000+450+2000=145280元第五部分:發(fā)展計(jì)劃1、營(yíng)業(yè)額計(jì)劃那里的營(yíng)業(yè)額是指咖啡店日常營(yíng)業(yè)收入的多少。在擬定營(yíng)業(yè)額目標(biāo)時(shí),必須要依據(jù)目前市場(chǎng)的狀況,再思考到咖啡店的經(jīng)營(yíng)方向以及當(dāng)前的物價(jià)情形,予以綜合衡量。按照目前流動(dòng)人口以及人們對(duì)咖啡的喜好預(yù)計(jì)每一天的營(yíng)業(yè)額為400-800,根據(jù)淡旺季的不同可能上下浮動(dòng)2、采購(gòu)計(jì)劃依據(jù)擬訂的商品計(jì)劃,實(shí)際展開(kāi)采購(gòu)作業(yè)時(shí),為使采購(gòu)資金得到有效運(yùn)用以及商品構(gòu)成達(dá)成平衡,務(wù)必針對(duì)設(shè)定的商品資料排定采購(gòu)計(jì)劃。透過(guò)營(yíng)業(yè)額計(jì)劃、商品計(jì)劃與采購(gòu)計(jì)劃的確立,我們不難了解,一家咖啡店為了營(yíng)業(yè)目標(biāo)的達(dá)成,同時(shí)有效地完成商品構(gòu)成與靈活地運(yùn)用采購(gòu)資金,各項(xiàng)基本的計(jì)劃是不可或缺的。當(dāng)一家咖啡店設(shè)定了營(yíng)業(yè)計(jì)劃、商品計(jì)劃及采購(gòu)計(jì)劃之后,即可依照設(shè)定的采購(gòu)金額進(jìn)行商品的采購(gòu)。經(jīng)過(guò)進(jìn)貨手續(xù)檢驗(yàn)、標(biāo)價(jià)之后,即可寫(xiě)在菜單上。之后務(wù)必思考的事情,就是如何有效地將這些商品銷售出去。3、人員計(jì)劃為了到達(dá)設(shè)定的經(jīng)營(yíng)目標(biāo),經(jīng)營(yíng)者務(wù)必對(duì)人員的任用與工作的分派有一個(gè)明確的計(jì)劃。有效利用人力資源,開(kāi)展人員培訓(xùn),都是我們務(wù)必思考的。4、經(jīng)費(fèi)計(jì)劃經(jīng)營(yíng)經(jīng)費(fèi)的分派是管理的重點(diǎn)工作。通常能夠?qū)⒖Х鹊杲?jīng)營(yíng)經(jīng)費(fèi)分為人事類費(fèi)用(薪資、伙食費(fèi)、獎(jiǎng)金等)、設(shè)備類費(fèi)用(修繕費(fèi)、折舊、租金等)、維持類費(fèi)用(水電費(fèi)、消耗品費(fèi)、事務(wù)費(fèi)、雜費(fèi)等)和營(yíng)業(yè)類費(fèi)用(廣告宣傳費(fèi)、包裝費(fèi)、營(yíng)業(yè)稅等)。還能夠依其性質(zhì)劃分成固定費(fèi)用與變動(dòng)費(fèi)用。我們要針對(duì)過(guò)去的實(shí)際業(yè)績(jī)?cè)O(shè)定可能增加的經(jīng)費(fèi)幅度。5、財(cái)務(wù)計(jì)劃財(cái)務(wù)計(jì)劃中的損益計(jì)劃最能反映全店的經(jīng)營(yíng)成果。咖啡店經(jīng)營(yíng)者在營(yíng)運(yùn)資金的收支上要進(jìn)行控制,以便做到經(jīng)營(yíng)資金合理的調(diào)派與運(yùn)用??傊陨纤械牧?xiàng)基本計(jì)劃(營(yíng)業(yè)額、商品采購(gòu)、銷售促進(jìn)、人員、經(jīng)費(fèi)、財(cái)務(wù))是咖啡店管理不可或缺的。當(dāng)然,有一些咖啡店為求管理上更深入,也能夠
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 木通食品添加劑研究-深度研究
- 攝影師經(jīng)紀(jì)行業(yè)發(fā)展趨勢(shì)-深度研究
- 產(chǎn)地溯源系統(tǒng)-深度研究
- 微生物組學(xué)與健康-深度研究
- 2025年廣西建設(shè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年常考版參考題庫(kù)含答案解析
- 2025年廣西交通職業(yè)技術(shù)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 多能源互補(bǔ)優(yōu)化-深度研究
- 2025年廣東舞蹈戲劇職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 基于坡縷石分散性及電負(fù)性調(diào)控納米復(fù)合膜結(jié)構(gòu)和性能的研究
- 二年級(jí)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)1000題匯編集錦
- 2025年山東浪潮集團(tuán)限公司招聘25人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年財(cái)政部會(huì)計(jì)法律法規(guī)答題活動(dòng)題目及答案一
- 2025年江西省港口集團(tuán)招聘筆試參考題庫(kù)含答案解析
- (2024年)中國(guó)傳統(tǒng)文化介紹課件
- 液化氣安全檢查及整改方案
- 《冠心病》課件(完整版)
- 2024年云網(wǎng)安全應(yīng)知應(yīng)會(huì)考試題庫(kù)
- 公園保潔服務(wù)投標(biāo)方案
- 光伏電站項(xiàng)目合作開(kāi)發(fā)合同協(xié)議書(shū)三方版
- 2024年秋季新滬教版九年級(jí)上冊(cè)化學(xué)課件 第2章 空氣與水資源第1節(jié) 空氣的組成
- 香港中文大學(xué)博士英文復(fù)試模板
評(píng)論
0/150
提交評(píng)論