错误代码为:
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
分享到:
相关推荐
它提供了流程的图形化设计的界面,是一个开源的工作流软件,将业务流程转化为计算机识别的语言,并部署在项目中
jbpm4.3实例源码,及流程实例图,欢迎大家下载
jbpm4.3插件,解决中文乱码,主要修改org.jboss.tools.flow.jpdl4_4.3.0.v201007071649.jar中的JbpmLocationsPage 和 org.jboss.tools.jbpm.common_4.3.0.v201007071649.jar 中的JpdlSerializer和ProcessSerializer
jBPM-4.3开发手册,转至family168 1.1. 目标读者 这个开发指南是为了给有经验的开发者看的, 这样就可以获得jBPM的完全的灵活性。在这个开发文档中提及的特性 可能当前不会被支持到。请自行使用。 1.2. 概述 第 2...
4.6 JBPM在MyEclipse画流程图时出现乱码: 14 5 核心API 14 5.1ProcessEngine 14 5.2RepositoryService 15 5.3ExecutionService 16 5.4TaskService 16 5.5ProcessDefinition 16 5.6ProcessInstance 16 5.7Execution ...
53 第4章 把流程部署到服务器上去 54 4.1 部署流程定义和资源文件 54 4.2 部署流程Java类的3个方法 57 4.3 例程:部署业务流程定义 58 4.4 小结 61 第5章 使用jBPM4 Service API控制流程 62 5.1 流程定义、流程实例...
.........................................7 1.3 jBPM版helloworld.....................................10 1.3.1 创建helloworld流程......................13 1.3.2 设计流程图 ..................................
java过滤器和监听器的使用 1.1. 安装流程设计器插件(Graphical Process Designer) 1, jBPM4.4包含了一个图形化设计流程的工具(GPD),它是...5, 流程定义文件的xsd文件的路径为:JBPM_HOME/src/jpdl-4.3.xsd
.........................................7 1.3 jBPM版helloworld.....................................10 1.3.1 创建helloworld流程......................13 1.3.2 设计流程图 ..................................
1.4. Seam 和jBPM:待办事项列表(todo list)示例..................................................................................................... 32 1.4.1. 理解代码....................................