2006-05-16

Integer.parseInt()

在org.jbpm.webapp.tag.ProcessImageTag看到这个代码:
result[0] = Integer.valueOf(node.attribute("x").getValue()).intValue();
看着不怎么舒服,其实有个更简洁的途径:
result[0] = Integer.parseInt(node.attribute("x").getValue());
这个是好久以前就知道的,现在看到代码就突然想起来了,先记一下,嘿

2006-05-11

jbpm里的Authorization

Chapter 17. Security:"Authorization is optional, and there is no authorization implementation yet. "
找了半天,原来授权部分还没实现,只有个identity包,是实现认证部分的,记得在jbpm.cfg.xml里有个服务好像叫"authentication",得去看看那个starter-kit里是如何进行授权的了,应该是很简陋的那种吧,比如执行某个task的时候,预先查下数据库,看有没定义这个用户的可以执行,行就通过(本来就应该是这么回事儿嘛,有什么简陋的丫):

Token 的概念

Token
Token这个概念,现在有点糊涂了,按胡工说的,就是标识流程所处的状态,而我理解的是流程当前流到节点的标识,嗯,差不多的概念。。。
哦,找到了,在javadoc里:
represents one path of execution and maintains a pointer to a node in the ProcessDefinition. Most common way to get a hold of the token objects is with ProcessInstance.getRootToken() or ProcessInstance.findToken(String).
意思就是说一个token代表一条执行路径而且维护一个指针用来标识一个节点(就是我所理解的那层意思,不过我没理解到“代表一条执行路径”).这么说的话token的在流程定义的时候就已经确定了,按照图论......

2006-05-10

知道怎么访问hsqldb的数据文件了

首先下载hsqldb.然后把要查看的数据文件(总共五个)copy到hsqldb_home/demo目录下,然后运行runManager.bat,然后在出现的选择框里选stand alone模式,在url里象这么写:
jdbc:hsqldb:file:d:/java/hsqldb/demo/localDB
其中的"d:/java/hsqldb/demo/localDB"就是文件的全路径.最后把用户名密码输入就OK了.

stand alone 模式的意思是hsqldb运行在应用程序所再JVM内,这样可以使性能得到最优化,因为数据传输不再需要通过网络.但是这也限制了它不能通过外部程序访问.

2006-05-09

将JBPM数据库改为MySQL

其实挺简单的,不知道开始的时候不行,后来看自己代码太乱整理了一下然后就好了,奇怪了 @_@ :

环境就是jbpm的GPD, 新建立个工程后会自动产生一些结构性的文件和目录,把src/config.files下的hibernate.cfg.xml作下修改,大致就类似这个:
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/jbpm
hibernate.connection.username=root
hibernate.connection.password=rootpassword
然后就是设置数据库了,得先找到ddl的脚本,我查了半天,最后终于在jbpm-starter-kit-3.1里找到了,是在/jbpm-db/build/mysql/目录下面的,有个mysql.create.sql,执行它,打开MySQL看就会看到一大堆的表,嗯,这部分工作就算完成了.
然后就是写TestCase,在这之前随便用Designer作个工作流图.

public class JayTestProcess extends TestCase
{
public void testSimplePersistence()
{
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
ProcessDefinition definition = ProcessDefinition.parseXmlResource("qqq.par/processdefinition.xml");

//do deploy process definition to database :
try
{
jbpmContext.deployProcessDefinition(definition);
}finally
{
jbpmContext.close();
}
}
}

回去再看一下MySQL里面就有数据了,大概就是这么回事吧.还有个问题没解决就是在执行过程中会有WARN 说
22:16:21,638 [main] WARN EhCacheProvider : Could not find configuration [org.jbpm.graph.def.Node]; using defaults.
等等一大堆的找不到configuration,不知道它是不是在找用户自定义的configuration?

.sql脚本文件的执行

shell> mysql -h host -u user -p <>

Enter password: ********

哦,挺简单的嘛,以前怎么就不想去查捏

Task的访问权限

user就是单一用户,而actor是指角色。
Task的执行通过assignment来实现:
public interface AssignmentHandler extends Serializable
{
void assign( Assignable assignable, ExecutionContext executionContext );
}

其中的Assignable就是拥有此任务执行权限的人或角色的列表:
public interface Assignable
{
public void setActorId(String actorId);
public void setPooledActors(String[] pooledActors);
}
你可以通过二个函数来声明这个task是只某个人能执行还是一些角色都可以执行。