`
jacky6024
  • 浏览: 81126 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

《深入浅出jBPM》一书中第7章与第9章相关工程的源码

阅读更多
《深入浅出jBPM》一书中第7章与第9章相关工程的源码。本书由人民邮电出版社出版。

第7章介绍的报销及采购流程的完整工程及其源代码: jbpm-web-test.rar

第9章企业级应用里涉及到的工程及相关EJB的源代码:jbpm-ent-test.ear.rar
分享到:
评论
151 楼 jacky6024 2010-04-19  
sofeik 写道
你好 我通过报销流程对jpmn有了一个初步的认识了 但是有一点仍不是很明了
//流程对象
ContextInstance ci = pi.getContextInstance();
ci.setVariable("issueperson", issueperson);
//应该是task对象 不知道和上一个对象有何联系
TaskInstance ti = pi.getTaskMgmtInstance().createStartTaskInstance();

在填写报销单时                ci.setVariable("issueperson", issueperson);
但在经理审批时可以取到变量    String issueperson = ti.getVariable("issueperson").toString(); 
不是很清楚

ContextInstance是一个流程上下文对象,它贯穿整个流程实例,对于流程变量而言,前面的节点当中向ContextInstance添加了变量,在后面的节点就可以从中取到。
150 楼 sofeik 2010-04-11  
你好 我通过报销流程对jpmn有了一个初步的认识了 但是有一点仍不是很明了
//流程对象
ContextInstance ci = pi.getContextInstance();
ci.setVariable("issueperson", issueperson);
//应该是task对象 不知道和上一个对象有何联系
TaskInstance ti = pi.getTaskMgmtInstance().createStartTaskInstance();

在填写报销单时                ci.setVariable("issueperson", issueperson);
但在经理审批时可以取到变量    String issueperson = ti.getVariable("issueperson").toString(); 
不是很清楚
149 楼 sofeik 2010-04-05  
不好意思 问题已解决 原来是要先创建表 然后再发布
148 楼 sofeik 2010-04-05  
你好 jacky6024 在7章根据步骤实现流程发布时 我是通过流程发布器发布+Servlet的形式 但是老报错 一直没解决 请问是什么原因 我用的是mysql数据库 打开时没有任何表 其他步骤都是正常的 就最后一步有问题 日志如下:
org.jbpm.JbpmException: couldn't find process definition 'qingjia'
at org.jbpm.db.GraphSession.findLatestProcessDefinition(GraphSession.java:158)
at org.jbpm.db.GraphSession.deployProcessDefinition(GraphSession.java:67)
at org.jbpm.JbpmContext.deployProcessDefinition(JbpmContext.java:173)
at org.jbpm.web.ProcessUploadServlet.handleRequest(ProcessUploadServlet.java:93)
at org.jbpm.web.ProcessUploadServlet.service(ProcessUploadServlet.java:58)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:811)
at org.jbpm.db.GraphSession.findLatestProcessDefinition(GraphSession.java:154)
... 19 more
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'jbpm3_test.jbpm_processdefinition' doesn't exist
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1448)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
... 28 more
147 楼 huihawk 2010-03-13  
详细检查了下采购流程的配置,发邮件部分现在是可以了,谢谢啊。首先是配置问题,修改了jbpm.cfg.xml这个配置文件(高老师在前面写过),然后是重写org.jbpm.mail包里面的Mail文件,修改成需要认证的方式(前面也有写过)。
146 楼 huihawk 2010-03-12  
谢谢重新检查了下,配置可以了。但是在采购流程里面的email配置令我糊涂。描述如下:
  我在NotifyPurchaseAction。java中重新手工添加了,邮箱验证功能,代码:
       String smtpServer = JbpmConfiguration.Configs.getString("jbpm.mail.smtp.host");
    //mailServerProperties.put( "mail.smtp.auth ","true");
    mailServerProperties.put("mail.transport.protocol", "smtp");
    mailServerProperties.put("mail.smtp.auth", "true");
    mailServerProperties.put("mail.smtp.host", smtpServer);
    System.out.println("smtpServer: "+smtpServer);
    MailAuthenticator mailAuthenticator = new MailAuthenticator("306017334","*******");
    Session session = Session.getDefaultInstance(mailServerProperties, mailAuthenticator);
    session.setDebug(true);

但是我发现在填写申请采购,提交后,怎么会弹出mail的异常信息:

填写采购申请
16:04:28,343 [http-8080-2] WARN  StatefulPersistenceContext : Narrowing proxy to class org.jbpm.graph.node.TaskNode - this operation breaks ==
16:04:28,453 [http-8080-2] ERROR GraphElement : action threw exception: couldn't send email
org.jbpm.JbpmException: couldn't send email
at org.jbpm.mail.Mail.send(Mail.java:208)
at org.jbpm.mail.Mail.send(Mail.java:160)
at org.jbpm.mail.Mail.execute(Mail.java:81)
at org.jbpm.graph.def.Action.execute(Action.java:122)

这个节点根本就们有actionhandler的处理啊,这个email的异常信息,是那里谈出来的?
谢谢
145 楼 jacky6024 2010-03-12  
huihawk  您好,你提供的异常难以判断,请您确认关于Job的配置是否正确,谢谢。
144 楼 huihawk 2010-03-12  
高老师:
    看了书中那个采购的例子:发现假如监听器后服务器报错,请教下是什么原因。谢谢!
<listener>
<listener-class>org.jbpm.web.JobExecutorLauncher</listener-class>
</listener>

异常:
严重: Exception sending context initialized event to listener instance of class org.jbpm.web.JobExecutorLauncher
java.lang.NullPointerException
at org.jbpm.web.JobExecutorLauncher.contextInitialized(JobExecutorLauncher.java:18)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1116)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1214)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
at java.lang.Thread.run(Thread.java:619)
2010-3-12 10:51:02 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
143 楼 wyasd456 2010-02-06  
《深入浅出jBPM》 电子书,下载地址:
http://download.csdn.net/source/2051386
142 楼 jinjiankang 2010-02-03  
jtest2003 写道
靠!这个垃圾又来骗钱啦。

初学者们,不要相信这个垃圾作者。如果你真得想学JBPM,建议你看网上的电子文档即可。这个垃圾作者的书,不值一看。
[size=large]
[/size]


我觉得你有点“文人相轻”了。不管书写的好坏,作者对传播jBPM还是有贡献的。楼主本可以删除你的评论,但他没有。从这一点可以看出,他比你的修养高。

我们都虚心一点。看完书,可能没有打到水,但我们的“竹筐”还是被洗涤的新了一些。
141 楼 judykula 2010-01-19  
judykula 写道
您好 高杰,最近买一本你的书,觉得入门来说很好,但我写的一个程序有个问题:
JbpmContext jbpmContext = jbpmConfiguration.getInstance().createJbpmContext();

GraphSession graphSession = jbpmContext.getGraphSession();

ProcessDefinition pd = graphSession.findLatestProcessDefinition("simple");

ProcessInstance pi = pd.createProcessInstance();

//传递 流程 开启者
pi.getContextInstance().setVariable("initiator", user);
pi.getContextInstance().setVariable("pid", pi.getId());

pi.signal();

//保存流程
jbpmContext.save(pi);

jbpmContext.close();

System.out.println("============================");
System.out.println("=========启动完成============");
System.out.println("============================");

return pi.getId();

走到jbpmContext.save(pi);时程序就没反应了,请问为什么,这是页面给的信息:
org.jbpm.graph.def.DelegationException
org.jbpm.taskmgmt.exe.TaskMgmtInstance.performAssignment(TaskMgmtInstance.java:259)
org.jbpm.taskmgmt.exe.TaskInstance.assign(TaskInstance.java:198)

解决了,谢谢你的书
140 楼 judykula 2010-01-19  
您好 高杰,最近买一本你的书,觉得入门来说很好,但我写的一个程序有个问题:
JbpmContext jbpmContext = jbpmConfiguration.getInstance().createJbpmContext();

GraphSession graphSession = jbpmContext.getGraphSession();

ProcessDefinition pd = graphSession.findLatestProcessDefinition("simple");

ProcessInstance pi = pd.createProcessInstance();

//传递 流程 开启者
pi.getContextInstance().setVariable("initiator", user);
pi.getContextInstance().setVariable("pid", pi.getId());

pi.signal();

//保存流程
jbpmContext.save(pi);

jbpmContext.close();

System.out.println("============================");
System.out.println("=========启动完成============");
System.out.println("============================");

return pi.getId();

走到jbpmContext.save(pi);时程序就没反应了,请问为什么,这是页面给的信息:
org.jbpm.graph.def.DelegationException
org.jbpm.taskmgmt.exe.TaskMgmtInstance.performAssignment(TaskMgmtInstance.java:259)
org.jbpm.taskmgmt.exe.TaskInstance.assign(TaskInstance.java:198)
139 楼 jacky6024 2010-01-19  
qiqi1982mm  您好,在jBPM3.x当中,与Spring结合这块,我也没什么的好办法,之前,我们的项目当中都是将业务数据的DataSource与jBPM3.xDataSource分开,Transaction控制我们采用JTA实现,这样虽然是不同的数据源,但因为有了JTA所以事务方面也可以得到保证。
138 楼 qiqi1982mm 2010-01-18  
qiqi1982mm 写道
老师你好,请教一个任务调度器的问题,任务调度器无论如何不成功,原因不明
我在web.xml中配置了
<listener>
<listener-class>org.jbpm.web.JobExecutorLauncher</listener-class>
</listener>

  但当工程运行时,可以看到jbpm_job表里面生成了job,但job都没有运行

  只有当我写一个main方法,在main方法中运行程序JbpmConfiguration.getJobExecutor().start()时,并运行main方法,这些job才能执行
   我的服务器用的是tomcat,百思不得其解
   谢谢


===============================================================================
老师你好,这个问题已经解决了,原因是这样的,
我的程序配置是spring+hibernate+jbpm
1.jbpm3.2.3有一个自带的hibernate.cfg.xml文件,里面有数据库的链接信息,我在xml文件中将这些信息屏蔽了,因为我在程序启动时,利用spring,往jbpmConfiguration里面注入了一个数据库链接信息
2.但job的异步线程启动时,它还是会去读hibernate.cfg.xml文件里的数据库链接信息,所以没有执行job,因为我的hibernate.cfg.xml文件里的数据库链接信息已经没有了
3.现在问题暂时得到了解决,就是我在hibernat.cfg.xml里配置数据库链接信息,也利用spring,往jbomConfiguration里面注入数据库链接信息,job可以执行
4.但现在程序里有两个数据库链接,也不是一个特别好的解决方法
5.不知此问题有没有两全其美的解决方法

137 楼 irriskww 2010-01-15  
这本书虽然贵,但楼主这么耐心的给大家解决问题值得称赞,这本书我看了两周,发现有些问题,自己解决了半天才能搞定。来这一看好多大家也都遇到了,高老师都给细心的分析解决。支持!
136 楼 jacky6024 2010-01-14  
qiqi1982mm  您好,我也不知道为什么不执行,请留心看一下您的控制台有没有异常之类的消息抛出,同时在web.xml当中,加载顺序是:context-param -> listener -> filter -> servlet ,请确认您的listener的位置是否正确,谢谢。
135 楼 qiqi1982mm 2010-01-14  
老师你好,请教一个任务调度器的问题,任务调度器无论如何不成功,原因不明
我在web.xml中配置了
<listener>
<listener-class>org.jbpm.web.JobExecutorLauncher</listener-class>
</listener>

  但当工程运行时,可以看到jbpm_job表里面生成了job,但job都没有运行

  只有当我写一个main方法,在main方法中运行程序JbpmConfiguration.getJobExecutor().start()时,并运行main方法,这些job才能执行
   我的服务器用的是tomcat,百思不得其解
   谢谢
134 楼 jacky6024 2010-01-12  
alfan001  您好,针对jBPM流程引擎的并发操作,实际上是对流程数据库的操作,所以很大程度上来说其性能取决于流程数据库的性能。
这两天我们刚对jBPM4进行了50个并发的压力测试,从结果来看还是令人满意的,压力基本上都是在数据库服务端。
133 楼 jtest2003 2010-01-11  
靠!这个垃圾又来骗钱啦。

初学者们,不要相信这个垃圾作者。如果你真得想学JBPM,建议你看网上的电子文档即可。这个垃圾作者的书,不值一看。
[size=large]
[/size]
132 楼 alfan001 2010-01-11  
想请问高老师,jBPM的并行处理能力如何,能否用来开发有十几万用户的大型工作流系统?也就是说jBPM能否支持大批量用户同时发起工作流程实例,或是数量巨大的流程实例同时运行?谢谢

相关推荐

    深入浅出JBPM最新源码第七章-报销实例

    【深入浅出JBPM最新源码第七章-报销实例】是一个关于企业流程管理(Business Process Management,简称BPM)的实战教程,主要聚焦在JBPM框架的使用上,结合了myeclipse集成开发环境、SQL数据库、Tomcat6.0应用服务器...

    深入浅出jBPM 5,6章

    《深入浅出jBPM 5,6章》是一本专为理解jBPM这一流程管理系统而精心编写的书籍。jBPM是一个开源的工作流管理系统,它提供了业务流程建模、执行、监控和优化的全面解决方案。这本书的第5章和第6章尤其关键,它们涵盖...

    jbpm深入浅出第7章实例代码

    本资源“jbpm深入浅出第7章实例代码”聚焦于通过jbpm实现工作流的实战演练,旨在帮助读者更深入地理解和掌握jbpm的使用。 jbpm的工作流程管理包括了流程定义、流程执行、流程监控等多个方面。第7章可能涉及的内容...

    深入浅出 jBPM 电子书, ,综合大量例子和资料

    深入浅出jBPM 电子文档,内容包括:面向图的程序设计,流程建模,节点——Node 职责,task-node节点,state节点类型,decision节点类型.等等,.还 综合大量例子和资料 , 是 学习 JBPM 必读首选! 希望这部书,大家能...

    《深入浅出jBPM》第3章

    《深入浅出jBPM》中文版由jBPM方面的专家高杰根据自己的经验编写,是一本实用的jBPM教程。全书分两个部分,第一部分详细讲 解jBPM 3.2,第二部分介绍jBPM 4。作者从初学者的角度由浅入深地介绍jBPM的基本知识、使用...

    深入浅出_jBPM_电子书

    深入浅出 jBPM 电子书,很适合初学者学习的一个开发文档

    《深入浅出jBPM》第2章(2)

    《深入浅出jBPM》中文版由jBPM方面的专家高杰根据自己的经验编写,是一本实用的jBPM教程。全书分两个部分,第一部分详细讲 解jBPM 3.2,第二部分介绍jBPM 4。作者从初学者的角度由浅入深地介绍jBPM的基本知识、使用...

    《深入浅出jBPM》第2章(1)

    《深入浅出jBPM》中文版由jBPM方面的专家高杰根据自己的经验编写,是一本实用的jBPM教程。全书分两个部分,第一部分详细讲 解jBPM 3.2,第二部分介绍jBPM 4。作者从初学者的角度由浅入深地介绍jBPM的基本知识、使用...

    深入浅出jBPM.1-6章测试代码_jbpm-test.rar

    《深入浅出jBPM:1-6章测试代码详解》 jBPM,全称为Java Business Process Management,是一款开源的工作流管理系统,用于处理业务流程的建模、部署、执行和监控。它提供了灵活的工作流定义,支持BPMN 2.0标准,...

    深入浅出JBPM

    **深入浅出JBPM** JBPM,全称Java Business Process Management,是一款开源的工作流管理系统,由JBoss组织开发,现在是Red Hat公司的产品。它提供了一整套解决方案,用于设计、执行、监控和优化业务流程。JBPM的...

    深入浅出jBPM完整版part1

    第 1 章 helloworld..............................................2 1.1 下载开发套件.............................................2 1.2 安装流程设计器 .........................................7 1.3 jBPM...

    深入浅出jBPM完整版.part4

    《深入浅出jBPM》深入浅出,示例丰富,实用性强,适合有一定Java基础的读者阅读。

    深入浅出jBPM电子书

    深入浅出jBPM电子书,JBOSS jBPM是一个灵活的、可扩展的工作流管理系统。JBOSS jBPM拥有直观的流程语言,用任务、异步的等待状态、定时器、自动化动作…等来表示业务流程图,把这些操作绑定在一起,JBOSS jBPM就拥有...

    深入浅出JBPM 采购实例

    【深入浅出JBPM 采购实例】是一个基于Myeclipse8.5、Tomcat6.0和JBPM3.2.3的实践教程,旨在帮助读者理解并掌握工作流管理系统JBPM在采购流程中的应用。在这个实例中,作者省略了邮件功能,因为JBPM3.2.3版本不包含...

    深入浅出jbpm系统开发

    【深入浅出jbpm系统开发】是一本专为jbpm工作流引擎初学者设计的入门指南,旨在帮助读者快速理解和掌握这一强大的开源工作流引擎。jbpm作为一个流行且功能丰富的工具,广泛应用于企业流程自动化、任务管理和决策支持...

    jbpm源码阅读之一

    压缩包中的文件 "Java23种设计模式(总结).doc" 显然是一个关于Java设计模式的文档,这与jbpm源码阅读紧密相关。设计模式是软件工程中的最佳实践,对于理解任何复杂系统的源码都是非常有帮助的。jbpm作为一个成熟的...

Global site tag (gtag.js) - Google Analytics