错误代码为:
org.jbpm.api.JbpmException: couldn't extract bytes out of blob
at org.jbpm.pvm.internal.lob.BlobStrategyBlob.get(BlobStrategyBlob.java:27)
at org.jbpm.pvm.internal.lob.Lob.extractBytes(Lob.java:102)
at org.jbpm.pvm.internal.repository.DeploymentImpl.getBytes(DeploymentImpl.java:182)
at org.jbpm.pvm.internal.repository.RepositorySessionImpl.getBytes(RepositorySessionImpl.java:143)
at org.jbpm.pvm.internal.cmd.GetResourceAsStreamCmd.execute(GetResourceAsStreamCmd.java:45)
at org.jbpm.pvm.internal.cmd.GetResourceAsStreamCmd.execute(GetResourceAsStreamCmd.java:31)
at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
at org.jbpm.pvm.internal.tx.SpringCommandCallback.doInTransaction(SpringCommandCallback.java:45)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:128)
at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:55)
at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:55)
at org.jbpm.pvm.internal.repository.RepositoryServiceImpl.getResourceAsStream(RepositoryServiceImpl.java:81)
at com.tepper.wfe.action.DrawGraphAction.drawActive(DrawGraphAction.java:90)
at com.tepper.wfe.action.DrawGraphAction.execute(DrawGraphAction.java:50)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.tepper.common.SessionFilter.doFilter(SessionFilter.java:60)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
debug后找到这里:
public byte[] get(Lob lob) {
if (lob.cachedBytes!=null) {
return lob.cachedBytes;
}
java.sql.Blob sqlBlob = lob.blob;
if (sqlBlob!=null) {
try {
return sqlBlob.getBytes(1, (int) sqlBlob.length());
} catch (SQLException e) {
throw new JbpmException("couldn't extract bytes out of blob", e);
}
}
return null;
}
这里调用的是hibernate的代码,然后使用LOB定位器,如果是新的部署,是会返回byte[]!
从现有的部署中我们来开启一个流程,他的调用是这样的:
log.trace("loading deployment "+deploymentId+" from db");
DeploymentImpl deployment = (DeploymentImpl) session.load(DeploymentImpl.class, Long.parseLong(deploymentId));
deployerManager.deploy(deployment);
object = repositoryCache.get(deploymentId, objectName);
if (object==null) {
throw new JbpmException("deployment "+deploymentId+" doesn't contain object "+objectName);
}
这段代码是从数据库加载,而它不会加载BLOB数据 和用LOB定位器代替;然后, deployerManager.deploy(deployment); LOB定位器将调用来获取数据, 由于ResultSet已经关闭,异常发生!
解决方法是:
把<prop key="hibernate.connection.release_mode">auto</prop>此属性去掉!
hibernate.connection.release_mode的用途是:指定Hibernate在何时释放JDBC连接. 默认情况下,直到Session被显式关闭或被断开连接时,才会释放JDBC连接. 对于应用程序服务器的JTA数据源, 你应当使用after_statement, 这样在每次JDBC调用后,都会主动的释放连接. 对于非JTA的连接, 使用after_transaction在每个事务结束时释放连接是合理的. auto将为JTA和CMT事务策略选择after_statement, 为JDBC事务策略选择after_transaction. 取值 on_close | after_transaction | after_statement | auto
分享到:
相关推荐
3. 任务管理:jbpm4.3内置了任务服务,用于管理任务的分配、启动、完成和监控,确保流程中的每个步骤都能按预期执行。 4. 规则集成:与JBoss Drools融合,允许在流程中嵌入规则引擎,实现规则驱动的决策过程。 5. ...
用户可以通过拖拽和连接各个活动节点来构建流程图,这使得非技术人员也能参与到流程设计中,降低了流程设计的学习曲线。同时,这种可视化的设计方式使得流程更易于理解和修改。 2. **工作流引擎**: jbpm4.3内置了...
【JBPM4.3培训学习视频】是一套针对初学者设计的教程,旨在...通过这套全面的教程,学习者不仅能掌握JBPM4.3的基本操作,还能了解工作流管理系统在实际业务场景中的应用,为后续的进阶学习和实际项目开发打下坚实基础。
通过这个教程,学习者不仅能掌握Jbpm4.3的基本使用,还能理解业务流程管理系统的原理,具备独立开发和维护流程项目的能力。同时,视频和代码的结合使得学习更加直观和高效,有助于理论知识与实践经验的融合。
jbPM 4.3 使用Drools Flow作为其流程建模工具,提供图形化的流程编辑器,支持拖放操作,可创建复杂的业务流程图。流程图包含各种元素,如任务(Tasks)、决策(Decisions)、网关(Gateways)和事件(Events)。 **...
5. **事件处理**:jbpm4.3引入了事件处理机制,可以监听并响应流程中的特定事件,如任务完成、流程结束等,增强了流程的响应能力。 6. **服务调用**:jbpm4.3支持通过服务任务调用外部系统,如Web服务、EJB等,实现...
用户可以通过拖放操作来构建流程图,包括任务、事件、决策节点等。此外,它支持基于JPA的持久化,这意味着流程实例和相关数据可以方便地存储在关系数据库中,提高了系统的可扩展性和可靠性。 在"leave_web"项目中,...
- 注意,jBPM4.3不支持ehcache,需使用其自带的Hibernate包。 3. **主要配置文件**: - **jbpm.hibernate.cfg.xml**:这是jBPM与Hibernate集成的核心配置文件。配置了多个映射文件,如`jbpm.repository.hbm.xml`...
7. **流程模拟和调试**:jbpm4.3提供了流程模拟功能,允许开发者在不实际执行流程的情况下预览流程行为。同时,调试工具帮助开发者找出流程执行过程中的问题。 8. **表单管理**:jbpm4.3可以通过MVEL或EL表达式定义...
**jbpm4.3所需jar包** JBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于业务流程的建模、执行和管理。在JBPM 4.3版本中,为了实现完整功能,需要一系列的jar包来支持其运行环境。...
用户可以通过图形化的建模工具创建和编辑流程图,使得非技术人员也能理解流程。 2. **工作流引擎**:jbpm4.3包含一个强大的工作流引擎,它负责执行和管理流程实例。引擎能够解析流程模型,并根据业务逻辑控制流程的...
jbpm4.3提供了图形化的流程设计工具,使得非技术人员也能理解和参与到流程的设计中来。 在jbpm中,流程定义是通过JPDL(jBPM Process Definition Language)来实现的。"holiday.jpdl.xml"文件就是一个典型的JPDL...
- **流程图**:通过可视化方式展现流程步骤及其之间的关系。 3. **API使用**: - **Java API**:提供了丰富的类库,允许开发者在Java应用程序中直接操作JBPM引擎。 - **REST API**:支持通过HTTP请求的方式访问...
通过图形化工具,开发者可以创建直观的流程图,包括任务、事件、网关等元素,使得非技术人员也能理解流程逻辑。 2. **流程执行**:JBPM4.3包含一个强大的执行引擎,能够解析并执行建模的流程。它支持动态流程变更,...
通过深入研究"JBPM4.3完整示例",开发者不仅可以掌握JBPM4.3的基础知识,还能获得实践经验,了解如何在实际项目中部署和使用工作流管理系统。对于想要了解工作流管理、提升企业业务自动化水平的人员来说,这是一个...
- **流程建模**:jbpm4.3支持BPMN 2.0标准,提供了一个直观的流程建模界面,用户可以通过拖拽和连接元素来创建流程图。 - **流程执行**:jbpm4.3能够执行建模的流程,并根据流程规则自动分配任务。 - **任务管理**:...
jbpm4.3支持使用Eclipse BPMN Editor创建流程图。BPMN符号包括活动(Activity)、事件(Event)、网关(Gateway)和数据对象(Data Object),通过这些元素可以构建出复杂的业务流程。 ### 三、任务管理 jbpm4.3...
jbpm4.3是JBoss Business Process Management (BPM) Suite的一个版本,它是一个开源的业务流程管理系统,用于设计、部署和执行业务流程。API(Application Programming Interface)是jbpm4.3的核心部分,它提供了与...
开发者可以通过jbpm4.3提供的工具或API创建流程图,并将其编译为可执行的流程定义。 5. **流程实例的控制**:在SSH框架中,可以创建服务类或DAO来调用jbpm4.3的API,如ProcessEngine、RuntimeService、TaskService...