在org.jbpm.webapp.tag.ProcessImageTag看到这个代码:
result[0] = Integer.valueOf(node.attribute("x").getValue()).intValue();
看着不怎么舒服,其实有个更简洁的途径:
result[0] = Integer.parseInt(node.attribute("x").getValue());
这个是好久以前就知道的,现在看到代码就突然想起来了,先记一下,嘿
2006-05-16
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的时候,预先查下数据库,看有没定义这个用户的可以执行,行就通过(本来就应该是这么回事儿嘛,有什么简陋的丫):
找了半天,原来授权部分还没实现,只有个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的在流程定义的时候就已经确定了,按照图论......
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内,这样可以使性能得到最优化,因为数据传输不再需要通过网络.但是这也限制了它不能通过外部程序访问.
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作个工作流图.
回去再看一下MySQL里面就有数据了,大概就是这么回事吧.还有个问题没解决就是在执行过程中会有WARN 说
22:16:21,638 [main] WARN EhCacheProvider : Could not find configuration [org.jbpm.graph.def.Node]; using defaults.
等等一大堆的找不到configuration,不知道它是不是在找用户自定义的configuration?
环境就是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?
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是只某个人能执行还是一些角色都可以执行。
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是只某个人能执行还是一些角色都可以执行。
Subscribe to:
Posts (Atom)