子在川上曰

  逝者如斯夫不舍昼夜
随笔 - 71, 文章 - 0, 评论 - 915, 引用 - 0
数据加载中……

jBPM开发入门指南(5)

前篇说起要讲在JBPM中实现用户权限,但这段时间比较忙,一直拖着。这里先把jbpm自带的websale例子放上来,大伙先将就看看。这个例子我已经把它抽取了出去,网页部份丢弃了。在看的时候主要看WebsaleTest.java,看看它的用户权限是怎么用的。

几个重点:
(1) jBPM没有角色的概念!!! 很多人把ActorID理解成角色,那是相当错误的。jBPM只有参与者的概念,也就是ActorID,它可以是用户ID,也可以是角色ID,也可以什么都不是。你要自己去把用户角色等东东和ActorID映射起来。不过一般我们把ActorID设置成角色,但jbpm websale却是设置成用户的。
(2)用户信息的入口是JbpmContext,里面有一个setActorID方法。你用户登录时候,把一些用户信息set进去。
(3)泳道概念:你去看看UML中的带泳道的活动图,那就是象一个游泳池里的泳道一样。


安装提示:
 <classpathentry kind="con" path="JBPM/jBPM 3.1.2"/>
.classpath的这一句很可能和你电脑的设置不符,这是jbpm插件的一个设置,指向jbpm的HOME目录,以便找到jbpm的jar包。你按照你电脑上的设置相应修改一下这一行。


websale的eclipse项目ZIP包:http://www.blogjava.net/Files/chengang/chen-jbpm_websale.zip

posted on 2006-09-16 19:09 陈刚 阅读(33599) 评论(22)  编辑  收藏 所属分类: jBPM

评论

# re: jBPM开发入门指南(5)   回复  更多评论   

哈哈。。看看哈~~
2006-09-18 09:06 | ktm

# re: jBPM开发入门指南(5)   回复  更多评论   

说实在的,这些都没有太大用,我看JBPM都能看到这些内容,关键是具体跟业务,具体组织架构联系在一起时怎么处理,有些系统是完全基于工作流系统(连表单也是工作流产生),业务附属于工作流,但大的业务系统不可能这么作的,工作流应该为业务服务,这是我的愚见,也是我的困惑!
2006-09-22 11:11 | ivor

# re: jBPM开发入门指南(5)   回复  更多评论   

陈大哥, 问个问题,我看了你的这几篇入门指南之后,照你的步骤运行了一下,大致都还算顺利.但是每次在调用JbpmContext.close();方法的时候,总是会抛出异常:
NewPooledConnection : A Throwable occurred while trying to reset the typeMap property of our Connection to Collections.EMPTY_MAP!
java.sql.SQLException: The Connection.setTypeMap(Map) method is not implemented.
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.notImplemented(ConnectionJDBC2.java:1519)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.setTypeMap(ConnectionJDBC2.java:2123)
是什么原因呢,是jtds包的版本不对吗?
2006-09-27 17:49 | xiaoshi

# re: jBPM开发入门指南(5)   回复  更多评论   

另外,我看了下ConnectionJDBC2.java里面的代码,其中setTypeMap方法如下:
public void setTypeMap(Map map) throws SQLException {
checkOpen();
notImplemented("Connection.setTypeMap(Map)");
}
它里面调用了notImplemented方法,而notImplemented方法是这样的:
/**
* Reports that user tried to call a method which has not been implemented.
*
* @param method the method name to report in the error message
* @throws SQLException always, with the not implemented message
*/
static void notImplemented(String method) throws SQLException {
throw new SQLException(
Messages.get("error.generic.notimp", method), "HYC00");
}
看注释的意思是调用了一个还没有实现的方法,为什么会出现这种情况呢??
从JbpmContext.close()方法,调用栈如下:
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.notImplemented(ConnectionJDBC2.java:1519)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.setTypeMap(ConnectionJDBC2.java:2123)
at com.mchange.v2.c3p0.impl.NewPooledConnection.reset(NewPooledConnection.java:290)
at com.mchange.v2.c3p0.impl.NewPooledConnection.markClosedProxyConnection(NewPooledConnection.java:247)
at com.mchange.v2.c3p0.impl.NewProxyConnection.close(NewProxyConnection.java:1148)
at org.hibernate.connection.C3P0ConnectionProvider.closeConnection(C3P0ConnectionProvider.java:42)
at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:343)
at org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:298)
at org.hibernate.jdbc.ConnectionManager.afterTransaction(ConnectionManager.java:187)
at org.hibernate.jdbc.JDBCContext.afterTransactionCompletion(JDBCContext.java:213)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:119)
at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:162)
at org.jbpm.svc.Services.close(Services.java:211)
at org.jbpm.JbpmContext.close(JbpmContext.java:139)
调用到最后,总会调用到ConnectionJDBC2.notImplemented来, 难道是某些包版本不对?
2006-09-27 17:56 | xiaoshi

# re: jBPM开发入门指南(5)   回复  更多评论   

流程中如果有action和assignment,其所对应的class会使用jbpm的ProcessClassLoader来加载,根据上一篇提到的,如果在class A 中引用了 class B, 则B会使用加载class A的加载器来加载B,而不是Thread.currentThread().getContextClassLoader()来加载.这样,如果在action的class中使用我们自己的类,则这些类还是会使用jbpm的ProcessClassLoader来加载,而不是Thread.currentThread().getContextClassLoader(),这样如果没有把这些类和jbpm的流程定义一起部署,运行时很有可能会找不到这些类,特别是,如果我们自己的代码里面如果又引用了其他的资源,比如spring,hibernate之类的,如果把这些连同jbpm流程定义一起部署,感觉有些不爽.比如说,在web应用开发中,一般会把我们自己开发的jar放到WEB-INF/lib目录下,这样运行时会由org.apache.catalina.WebappClassLoader 来加载.但是如果按照jbpm的弄法,由它来加载我们所写的类,则它不会从WEB-INF/lib去加载类,这似乎不是我们所想要的.

所以我最后考虑了一下,将其ProcessClassLoader的findClass方法改写了,不知会不会引起什么bug,望有高人指点一二,代码如下:

public Class findClass(String name) throws ClassNotFoundException {
Class clazz = null;

ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
clazz = classLoader.loadClass(name);

return clazz;
}


这样我们自己写的类放在WEB-INF/lib目录下,运行时会由org.apache.catalina.WebappClassLoader 来加载进来,这样似乎是我们所想要达到的目的.

2006-11-26 21:15 | guanqi

# 关于weblogic上配置jbpm问题  回复  更多评论   

大哥你好,你在weblogic814配置过jbpm3.1吗,我怎么配都不行,主要错误如下,能我一点指导吗,先谢了。
org.hibernate.HibernateException: Errors in named queries: GraphSession.findAllProcessDefinitionVersions, SchedulerSession.findTimersByName, MessagingSession.resumeMessagesForToken, GraphSession.selectLogsForTokens, GraphSession.findTokensForProcessInstance, TaskMgmtSession.findTaskInstancesByIds, MessagingSession.findMessages, SchedulerSession.findSuspendedTimers, LoggingSession.findLogsByToken, MessagingSession.suspendMessagesForToken, TaskMgmtSession.findTaskInstancesByActorId, SchedulerSession.resumeTimersForToken, TaskMgmtSession.findPooledTaskInstancesByActorId, TaskMgmtSession.findTaskInstancesByTokenId, SchedulerSession.suspendTimersForToken, GraphSession.findAllProcessInstancesForADefinition, GraphSession.findProcessDefinitionByNameAndVersion, MessagingSession.findErrorMessages, SchedulerSession.deleteTimersForProcessInstance, TaskMgmtSession.findPooledTaskInstancesByActorIds, SchedulerSession.findFailedTimers, GraphSession.findLatestProcessDefinitionQuery, SchedulerSession.findTimersByDueDate, TaskMgmtSession.findTaskInstancesByActorIds, GraphSession.findAllProcessDefinitions
at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:338)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1154)
at org.jbpm.persistence.db.DbPersistenceServiceFactory.getSessionFactory(DbPersistenceServiceFactory.java:90)
at org.jbpm.persistence.db.DbPersistenceService.getSessionFactory(DbPersistenceService.java:74)
at org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:79)
at org.jbpm.persistence.db.DbPersistenceService.getGraphSession(DbPersistenceService.java:216)
at org.jbpm.JbpmContext.getGraphSession(JbpmContext.java:427)

2006-12-28 14:26 | poplar

# re: jBPM开发入门指南(5)   回复  更多评论   

说实在的,这些都没有太大用,我看JBPM都能看到这些内容,关键是具体跟业务,具体组织架构联系在一起时怎么处理,有些系统是完全基于工作流系统(连表单也是工作流产生),业务附属于工作流,但大的业务系统不可能这么作的,工作流应该为业务服务,这是我的愚见,也是我的困惑! 经典!!!!!!!!!!!
2007-01-12 10:30 | odexuce

# re: jBPM开发入门指南(5)   回复  更多评论   

这个例子我已经把它抽取了出去,网页部份丢弃了。在看的时候主要看WebsaleTest.java??????



好像人家源代码包里 本来就有这个 单元测试 不用你去 抽取吧?????
2007-03-20 13:55 | Silence

# re: jBPM开发入门指南(5) [未登录]  回复  更多评论   

说实在的,这些都没有太大用,我看JBPM都能看到这些内容,关键是具体跟业务,具体组织架构联系在一起时怎么处理,有些系统是完全基于工作流系统(连表单也是工作流产生),业务附属于工作流,但大的业务系统不可能这么作的,工作流应该为业务服务,这是我的愚见,也是我的困惑! 经典
2007-05-24 10:48 | zz

# re: jBPM开发入门指南(5)   回复  更多评论   

说实在的,这些都没有太大用,我看JBPM都能看到这些内容,关键是具体跟业务,具体组织架构联系在一起时怎么处理,有些系统是完全基于工作流系统(连表单也是工作流产生),业务附属于工作流,但大的业务系统不可能这么作的,工作流应该为业务服务,这是我的愚见,也是我的困惑! 经典
确实没啥用。不知道陈刚大哥能不能给个实际应用的案例,而不是这些demo,太没价值了。
2007-07-04 15:30 | flash

# re: jBPM开发入门指南(5)   回复  更多评论   

你好陈刚老师。我一直在学习jbpm技术。现在我已经能写一个简单的工作流程了。但是我还是不会用fork和join怎么使用。你能给我讲解下他们的使用么?谢谢。也希望老师能给我些指点,接下来我该怎么学习?谢谢!!
2008-01-27 08:56 | wangyoulin006

# re: jBPM开发入门指南(5) [未登录]  回复  更多评论   

关于这个例子的介绍文字太少了点吧,环境也没写。配置起来还报错,弄了半天。
而且连跑的是哪个流程都不知道,leavel1,leavel2,leavel3,试了1不可以
2008-04-07 15:25 | leon

# re: jBPM开发入门指南(5) [未登录]  回复  更多评论   

有没有和具体的开发全过程啊,最好写一个jbpm和tomcat开发实例,包括环境配置和数据库配置的,谢谢了!
2008-08-11 16:38 | sky

# re: jBPM开发入门指南(5) [未登录]  回复  更多评论   

JBPM与Ibatis结合么样弄啊?
2009-01-11 18:26 | Simple

# re: jBPM开发入门指南(5)   回复  更多评论   

您好,我遇到一个问题,不知道您能不能帮助我一下,呵呵
一个主流程下有多个子流程,至少5个,而每个子流程都是一样的流程定义,就是有多个部门分别去执行子流程,最后再汇总到主流程,这样的结构应该怎么定义流程呢?而每个子流程又是很大的,总不能将这些一模一样的子流程都定义在主流程中把?有没有那种类似会签的结构?哎,很困扰我啊,这个星期必须搞定,刚参加工作压力挺大的
2009-03-11 12:48 | 李慧芬

# re: jBPM开发入门指南(5)   回复  更多评论   

很经典,谢谢
2009-03-23 18:41 | rianpeny

# re: jBPM开发入门指南(5)   回复  更多评论   

李慧芬 同学,用Fork和join节点呀
2009-04-14 17:51 | unamed

# re: jBPM开发入门指南(5)   回复  更多评论   

初学,谢谢,敬礼,
2009-06-26 09:04 | qimiao

# re: jBPM开发入门指南(5) [未登录]  回复  更多评论   

结构清析,是个入门的东东吧。
2009-06-29 19:14 | x

# re: jBPM开发入门指南(5)   回复  更多评论   

那个在jpdl.xml文件中,我要请假,前面的空格给去了,运行时就不对,我又给加了空格,但是再运行还是不行,最后在Test里把空格给去掉了。
把这个走了一遍,花费了好一会儿,我想找个web开发的例子,没有找到。想做个跟那个server一样的例子。在网上大部分都是java的开发包,还是那种我不熟悉的格式。

把那个ehcache.1.1.jar包给换成ehcache1.2.3.jar包就没出错了。终于连上
mysql了。你做没没做web的例子,给传个?
2009-08-15 17:34 | zw

# re: jBPM开发入门指南(5)   回复  更多评论   

你好,我有一个问题,我想用jpbm流程进行编排,但是中间的活动要用到一些原来c程序中的发出的socket消息,我有什么办法实现呢
2011-08-23 15:07 | llcf

# re: jBPM开发入门指南(5)   回复  更多评论   

@xiaoshi
驱动问题,用MICROSOFT的就没有此问题
2011-09-01 17:06 |

只有注册用户登录后才能发表评论。


网站导航: