吐泡泡的龍

          2006年9月18日

          我的Shark使用經驗(3)

          ????? 今天要介紹的是基于web的shark。不知道為什么字體都是斜體。索性不配圖了。本項目代碼部分源自Geeta Ramani的Struts in Shark。
          ????? 先來個How to:
          ????? 1.?在jbuilder 2006中新建一個web項目,包含struts最新版的庫。我起的名字叫TestingShark,路徑在
          D:\jproject\TestingShark。可別放中文目錄下,不然可能報錯。
          ????? 2.把你安裝好的shark打開,進入lib文件夾,找到里面所有shark開頭的jar文件,都復制到D:\jproject\TestingShark\TestingShark\WEB-INF\lib中。當然,你也可以把里面所有的jar文件都copy過去,里面好東西不少,commons,axis,xalan,jawe包應有盡有。不要考文件夾,只用考jar包。統計了
          一下shark開頭的有53項。不要忘記sqlserver的3個驅動文件。
          ??????3.開始寫代碼。Action~!
          ????? 按照昨天說的,shark要運行起來先要把package就是xpdl給load進來。如何在web上實現?
          先看看shark API中的org.enhydra.shark.api.client.wfservice 之Interface PackageAdministration。關于包的所有操作都有了。
          ???? StrustsinShark項目中建立了一個JSPAdminUtilities類,里面有一些封裝好的操作。
          package com.xxxx.shark.util.jsp;

          import java.io.File;
          import java.io.FileDescriptor;
          import java.io.FileNotFoundException;
          import java.io.FileOutputStream;
          import java.io.IOException;
          import java.util.Iterator;
          import java.util.List;
          import java.util.Map;
          import java.util.Set;
          import java.util.Vector;

          import org.enhydra.shark.Shark;
          ......
          import org.enhydra.shark.api.client.wfservice.PackageAdministration;
          import org.enhydra.shark.api.client.wfservice.RepositoryMgr;
          ......
          方法 String??PackageLoad(String xpdlName)
          /**
          ? * 取得xpdl文件,xpdl文件必須在Shark服務端的Rs..external目錄下,不然就要輸入路徑。
          ? *
          ? * @param? xpdlName?????????? Description of the Parameter
          ? * @return??????????????????? Description of the Return Value
          ? * @exception? BaseException? Description of the Exception
          ? */
          ?public String packageLoad(String xpdlName) throws BaseException {
          //包實例化需要從shark.getInstance()進入,這步非常的重要。

          ??PackageAdministration pa = Shark.getInstance().getAdminInterface().getPackageAdministration();
          //為什么要用RepositoryMgr?因為要取得package?id 來驗證此包是否已經裝載過。
          ??RepositoryMgr rm = Shark.getInstance().getRepositoryManager();
          ??String pkgId = rm.getPackageId(xpdlName);
          //如果沒有裝載包,就下手吧。
          ??if (!pa.isPackageOpened(pkgId)) {
          ???try {
          ????pa.openPackage(xpdlName);
          ???}
          ???catch (Throwable e) {
          ????e.printStackTrace();
          ????throw new BaseException(e);
          ???}
          ??}
          ??return rm.getPackageId(xpdlName);
          ?}

          方法? boolean packageDownload(String pkgId, String completeFilePath)
          ?/**
          ???? * 從數據庫中下載XPDL文件到指定目錄(Table XPDLS and XPDLData)
          ???? * @param pkgId id of pkg you want to download
          ???? * @param completeFilePath where you want the file downloaded
          ???? * @throws BaseException, FileNotFoundException, IOException
          ???? */
          ?public boolean packageDownload(String pkgId, String completeFilePath) throws BaseException, FileNotFoundException, IOException {
          ??PackageAdministration pa = Shark.getInstance().getAdminInterface().getPackageAdministration();
          ???RepositoryMgr rm = Shark.getInstance().getRepositoryManager();
          ??//String pkgId = rm.getPackageId(xpdlName);
          ??//String pkgId = "WellnessDemo";
          ??String currVersion = pa.getCurrentPackageVersion(pkgId);
          ??byte[] contents = pa.getPackageContent(pkgId, currVersion);
          ??//FileOutputStream fos = new FileOutputStream("C:\\xpdls\\WellnessDemo.xpdl");
          ??FileOutputStream fos = new FileOutputStream(completeFilePath);
          ??fos.write(contents);
          ??//return "theXpdl";
          ??FileDescriptor theFd = fos.getFD();
          ??return true;
          ?}

          ???????????這段大家自己看看API理解吧。Shark的API是非常方便的。輸出使用FileOutputStream。這里
          在頁面上我是這樣寫的。把一些屬性放到map中然后做為request傳遞。早知道就用packageDownload了。
          ????????????? HashMap[] hm=(HashMap[])request.getAttribute("packages");
          ????????? for(int i=0;i<hm.length;i++)
          ?????????????????????????? {

          ?????????????????????? ??field_1=(String)hm[i].get("packageId");
          ??????????????????????? ?field_2=hm[i].get("isPackageOpened").toString();
          ??????????????????????????????????????? byte[] b= (byte[])hm[i].get("packageContent");
          ??????????????????????????????????????? FileOutputStream fs = new FileOutputStream("c:\\"+field_1+".xml");
          ??????????????????????????????????????? fs.write(b);
          ??????????????????????????????????????? fs.close();
          ????????????????????????????}
          ???????????? 做為xml保存,使用dom來修改,放棄jawe的swing界面,在頁面上修改流程。。。這是不得以而
          為之的辦法。
          ????? That's all for today~

          posted @ 2006-09-20 21:16 泡泡龍龍 閱讀(1681) | 評論 (2)編輯 收藏

          我的Shark使用經驗(2)

          ????? 接著昨天的來吧。??昨天說道xpdl文件作為package的形式裝載入shark之中。一個xpdl文件中是由
          ? 角色(role)來分配任務的,如下圖所示
          o_Snap3.jpg

          這里面有三個角色,報銷人,部門經理,財務。
          ??????? 來到shark中,選擇user management這個tab,進入第一個sub tab?--Account。在這里添加用戶吧,點擊下方的"new"按鈕,彈出對話框。這里我們只用填寫"user name"和"password"項即可。"group
          name"項若填寫,就是新建一個group,用戶作為一個group user存在。若不填寫,用戶僅做為一個single
          user存在。(group是存放用戶的集合,在用戶和角色的映射中可以直接當作用戶來映射,相當于把
          集合中的全部用戶都映射到同一角色。)
          ???????? 說到映射,shark是相當靈活的。點擊user management中的第三個sub tab --Mapping。現在里面什么都沒有。點擊下方的"Add"按鈕。彈出一個對話框。左側的是"Role List",右側是"User List"。當然,我們先要把package加載進去后,角色列表才出的來哦。User List中有我們剛才加入的用戶。如果剛才創建了group的話,group也做為一個user存在。選擇一個角色和用戶,點擊下方的"Apply"按鈕,就成功創建了一條映射。我們可以把一個角色映射到多個用戶上(等效于映射到一個group上,用戶很多的時候就創建group吧。)。也可以把多個角色映射到一個用戶上。完成后關閉對話框。現在Mapping這個tab中就有我們剛才添加的映射了。
          ????? 最后我們來到Worklist?management這個tab。在select user這個下拉框中選擇第一步的role對應的角色。不好表述,就是做第一條流程的用戶了。選中后就出現一條待辦工作。如下圖
          o_Snap4.jpg
          ???????
          ???????? Oh yeah!我們還是先用這個用戶登陸吧。來到這個tab,當點選前方checkbox后,用戶的worklist狀態就由open.not_start.not_running改變成為running了。后面的計時器(Duration)也開始計時。點擊下方的"update variable(s)"來完成表單,最后點擊"Complete"提交。一件待辦工作就完成了,下個用戶再登陸重復這個步驟即可。
          ??????? 這個界面還有個"Reassign"按鈕,相當于"公文轉發",把自己手上的事情交給另一個用戶來辦。
          只要不點擊"complete",一個步驟可以反復assign到多個用戶,當然,這些用戶必須先映射到相同的role
          上才行。細節就不多說了,大家自己試試吧。
          ????? swing界面比較簡陋,但是基本功能都有,明天我們來構建web系統。


          ?? 為什么都是斜體字?誰能告訴我??

          posted @ 2006-09-19 11:12 泡泡龍龍 閱讀(1263) | 評論 (1)編輯 收藏

          我的Shark使用經驗(1)

          ???? ?安裝好了Shark,大家可以先玩一玩Shark的Swing界面。進入Shark的安裝目錄中的bin文件夾,
          運行runAll.bat。立馬跳出兩個Dos窗口,一個Shark Server,顯示的是SharkEngineManager的日志。
          用戶登陸后在此窗口可以看到自己的操作記錄。一個Shark Admin窗口,里面顯示的信息就不是
          那么多了。不管這些,在隨后出現的Swing登陸界面中輸入用戶名admin,密碼enhydra,rp好的話
          就登陸到主界面了。rp不好的會出現一個提示--Server is busy。重新關掉這些窗口,重新
          運行runAll.bat吧。
          ????? 進入后先點擊Repository management這個tab,里面有一些xpdl文件,這些是shark在啟動時就裝載
          的位于%Shark-root%\repository\external之中的東東了。想要使用自己在jawe中編輯好的流程就點擊
          下方的upload自己加吧。加入xpdl后進入下一個tab--package management。這里面現在什么都沒有,點擊下方的load按鈕,出現select package對話框,現在里面應該有你加入的xpdl文件了,選中
          后再點擊對話框中的load。關閉對話框后一個xpdl流程圖就是一個package就算成功加載了。如圖
          里面的id和name都是在jawe中畫圖時定義的。

          ???隨后進入process instantiation?management。在左側的目錄樹中進入最底層,出現兩個process。
          一個是unknown,很奇怪,但是這個process是不能清除的,難道是控制流程的流程?先不管了。
          選中那個你自己定義的流程,點擊下方的Instantiate按鈕,一條流程就啟動了。明天繼續。
          ????

          posted @ 2006-09-18 22:43 泡泡龍龍 閱讀(1169) | 評論 (0)編輯 收藏

          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導航

          統計

          常用鏈接

          留言簿(6)

          我參與的團隊

          隨筆檔案

          文章分類

          文章檔案

          相冊

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 隆林| 玉屏| 离岛区| 霍邱县| 靖安县| 石狮市| 灵台县| 临澧县| 邹平县| 丰宁| 平南县| 和林格尔县| 永宁县| 砀山县| 荥经县| 丰原市| 阳谷县| 祁东县| 嵊州市| 安陆市| 兰考县| 从江县| 凤山县| 石门县| 甘南县| 桦川县| 阳城县| 哈巴河县| 手游| 南乐县| 库尔勒市| 营山县| 西畴县| 桑植县| 甘泉县| 莱阳市| 高陵县| 高碑店市| 盈江县| 定结县| 孝昌县|