Exception: couldn't acquire block of ids while deploying process
deady Dec 25, 2009 4:54 AMI use jbpm4 + spring integration in jboss-4.0.4.GA.
I use embedded hsqldb for jbpm hibernate:
<?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>jbpm-ds</jndi-name> <connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}jbpmDB</connection-url> <driver-class>org.hsqldb.jdbcDriver</driver-class> <user-name>sa</user-name> <password></password> <min-pool-size>1</min-pool-size> <max-pool-size>5</max-pool-size> <idle-timeout-minutes>0</idle-timeout-minutes> <track-statements/> <!-- <security-domain>HsqlDbRealm</security-domain> --> <prepared-statement-cache-size>32</prepared-statement-cache-size> <metadata><type-mapping>Hypersonic SQL</type-mapping></metadata> <depends>jboss:service=Hypersonic,database=jbpmDB</depends> </local-tx-datasource> <mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic,database=jbpmDB"> <attribute name="Database">jbpmDB</attribute> <attribute name="InProcessMode">true</attribute> </mbean> </datasources>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="jbpmDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiTemplate" ref="jndiTemplate"/> <property name="jndiName" value="java:/jbpm-ds"/> </bean> <bean id="jbpmSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/> <property name="configLocation" value="hibernate.cfg.xml"/> <property name="mappingLocations"> <list> <value>classpath:jbpm.execution.hbm.xml</value> <value>classpath:jbpm.repository.hbm.xml</value> <value>classpath:jbpm.task.hbm.xml</value> <value>classpath:jbpm.history.hbm.xml</value> <value>classpath:jbpm.identity.hbm.xml</value> </list> </property> <property name="dataSource" ref="jbpmDataSource"/> </bean> </beans>
When I try to deploy process:
@PostConstruct public void setupProcessDefinitions() { for (String processDefinition : processDefinitions) { NewDeployment deployment = repositoryService.createDeployment(); deployment.addResourceFromClasspath(processDefinition); deployment.deploy(); } }
i recieve
Caused by: org.jbpm.api.JbpmException: couldn't acquire block of ids at org.jbpm.pvm.internal.id.DatabaseDbidGenerator.getNextId(DatabaseDbidGenerator.java:65) at org.jbpm.pvm.internal.repository.RepositorySessionImpl.deploy(RepositorySessionImpl.java:56) at org.jbpm.pvm.internal.cmd.DeployCmd.execute(DeployCmd.java:47) at org.jbpm.pvm.internal.cmd.DeployCmd.execute(DeployCmd.java:33) at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42) at org.jbpm.pvm.internal.spring.CommandTransactionCallback.doInTransaction(CommandTransactionCallback.java:50) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:128) at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:77) 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.DeploymentImpl.deploy(DeploymentImpl.java:91) at workflow.WorkflowService.setupProcessDefinitions(WorkflowService.java:50)
using debug, I see that this is because
package org.jbpm.pvm.internal.id; ... public class AcquireDbidBlockCmd implements Command<Long> { ... public Long execute(Environment environment) throws Exception { Session session = environment.get(Session.class); PropertyImpl property = (PropertyImpl) session.createQuery( "select property " + "from "+PropertyImpl.class.getName()+" as property " + "where property.key = '"+PropertyImpl.NEXT_DBID_KEY+"'" ).uniqueResult(); String nextIdText = property.getValue();
this query returns null. (This table contains no records at all)
But all thing works when I use Mysql with InnoDB.
How can I resolve this issue?