吐泡泡的龍

          2006年9月20日

          我的Shark使用經(jīng)驗(3)

          ????? 今天要介紹的是基于web的shark。不知道為什么字體都是斜體。索性不配圖了。本項目代碼部分源自Geeta Ramani的Struts in Shark。
          ????? 先來個How to:
          ????? 1.?在jbuilder 2006中新建一個web項目,包含struts最新版的庫。我起的名字叫TestingShark,路徑在
          D:\jproject\TestingShark。可別放中文目錄下,不然可能報錯。
          ????? 2.把你安裝好的shark打開,進入lib文件夾,找到里面所有shark開頭的jar文件,都復(fù)制到D:\jproject\TestingShark\TestingShark\WEB-INF\lib中。當(dāng)然,你也可以把里面所有的jar文件都copy過去,里面好東西不少,commons,axis,xalan,jawe包應(yīng)有盡有。不要考文件夾,只用考jar包。統(tǒng)計了
          一下shark開頭的有53項。不要忘記sqlserver的3個驅(qū)動文件。
          ??????3.開始寫代碼。Action~!
          ????? 按照昨天說的,shark要運行起來先要把package就是xpdl給load進來。如何在web上實現(xiàn)?
          先看看shark API中的org.enhydra.shark.api.client.wfservice 之Interface PackageAdministration。關(guān)于包的所有操作都有了。
          ???? 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服務(wù)端的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 來驗證此包是否已經(jīng)裝載過。
          ??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)
          ?/**
          ???? * 從數(shù)據(jù)庫中下載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)編輯 收藏

          2006年9月19日

          我的Shark使用經(jīng)驗(2)

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

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


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

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

          2006年9月18日

          我的Shark使用經(jīng)驗(1)

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

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

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

          2006年9月14日

          Enhydra Shark的安裝和配置

          1. 下載shark
            http://shark.objectweb.org/ 下載shark的源碼和安裝程序。(我下載的是shark1.0.1,現(xiàn)在已有shark1.1)
          2. 安裝shark
            直接點擊shark-1.0-1.setup.exe。假設(shè)安裝到D:\Shark-1.0。
          3. 與數(shù)據(jù)的連接(以sqlserver2000為例)
            (1) 將數(shù)據(jù)庫的驅(qū)動程序包拷貝到D:\Shark-1.0\lib\contrib下
            (2) 修改安裝目錄下的configure.properties
            ?修改下列值:
            ?db_loader_job=msql
            ?db_user=sa
            ?db_passwd=你的數(shù)據(jù)庫密碼
            ?db_ext_dirs=數(shù)據(jù)庫的驅(qū)動程序包目錄即D:/Shark-1.1/lib/contrib.
            (3) 修改安裝目錄下的configure.xml
            將文件中所有的hsql替換為msql,就可以了。還有其他的方法,我感覺這種方法簡單
            (4) 建立數(shù)據(jù)名為shark的空數(shù)據(jù)庫
            (5) 運行configure.bat
            到此shark和sqlserver的連接配置完畢,按doc下QuickStartExample文檔說明,運行例子,在數(shù)據(jù)庫就可看到數(shù)據(jù)。

          posted @ 2006-09-14 20:47 泡泡龍龍 閱讀(1639) | 評論 (0)編輯 收藏

          僅列出標(biāo)題  
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(6)

          我參與的團隊

          隨筆檔案

          文章分類

          文章檔案

          相冊

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 邹平县| 深泽县| 怀来县| 磐安县| 浮山县| 沙雅县| 施秉县| 瑞安市| 青川县| 桦川县| 库车县| 洞口县| 施秉县| 收藏| 右玉县| 固镇县| 兴山县| 铜梁县| 五台县| 任丘市| 新沂市| 民县| 绥化市| 历史| 集安市| 浦东新区| 太康县| 万源市| 青州市| 克什克腾旗| 齐齐哈尔市| 吉林市| 绿春县| 灌阳县| 海丰县| 东台市| 霍城县| 拉萨市| 专栏| 文登市| 洛川县|