吐泡泡的龙

2006年9月20日

我的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 泡泡龙龙 阅读(1552) | 评论 (2)编辑 收藏

2006年9月19日

我的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 泡泡龙龙 阅读(1127) | 评论 (1)编辑 收藏

2006年9月18日

我的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 泡泡龙龙 阅读(1045) | 评论 (0)编辑 收藏

2006年9月14日

Enhydra Shark的安装和配置

  1. 下载shark
    http://shark.objectweb.org/ 下载shark的源码和安装程序。(我下载的是shark1.0.1,现在已有shark1.1)
  2. 安装shark
    直接点击shark-1.0-1.setup.exe。假设安装到D:\Shark-1.0。
  3. 与数据的连接(以sqlserver2000为例)
    (1) 将数据库的驱动程序包拷贝到D:\Shark-1.0\lib\contrib下
    (2) 修改安装目录下的configure.properties
     修改下列值:
     db_loader_job=msql
     db_user=sa
     db_passwd=你的数据库密码
     db_ext_dirs=数据库的驱动程序包目录即D:/Shark-1.1/lib/contrib.
    (3) 修改安装目录下的configure.xml
    将文件中所有的hsql替换为msql,就可以了。还有其他的方法,我感觉这种方法简单
    (4) 建立数据名为shark的空数据库
    (5) 运行configure.bat
    到此shark和sqlserver的连接配置完毕,按doc下QuickStartExample文档说明,运行例子,在数据库就可看到数据。

posted @ 2006-09-14 20:47 泡泡龙龙 阅读(1456) | 评论 (0)编辑 收藏

仅列出标题  
<2018年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(6)

我参与的团队

随笔档案

文章分类

文章档案

相册

搜索

最新评论

阅读排行榜

评论排行榜