package com.sample.model; // Sample person object for persistence checking. public class Person { private Integer ssn; private String lastname; private String firstname; public void setFirstname(String firstname) { this.firstname = firstname; } public String getFirstname() { return firstname; } public void setLastname(String lastname) { this.lastname = lastname; } public String getLastname() { return lastname; } public void setSSN(Integer ssn) { this.ssn = ssn; } public Integer getSSN() { return ssn; } }
The hibernate mappings were put into the person.hbm.xml file:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.sample.model" auto-import="false" default-access="field"> <class name="Person"> <id name="ssn" column="SSN"><generator class="native" /></id> <property name="lastname" column="LASTNAME" /> <property name="firstname" column="FIRSTNAME" /> </class> </hibernate-mapping>
// First the errors I was getting in my logging (just the last bits): ... DEBUG GraphElement - event 'process-start' on ProcessDefinition(main_flow) for Token(/) DEBUG VariableContainer - create variable 'person' in 'TokenVariableMap[/]' with value 'com.sample.model.Person@1dfc547' DEBUG Converters - adding converter 'D', 'org.jbpm.context.exe.converter.DoubleToStringConverter' DEBUG Converters - adding converter 'C', 'org.jbpm.context.exe.converter.CharacterToStringConverter' DEBUG Converters - adding converter 'B', 'org.jbpm.context.exe.converter.BooleanToStringConverter' DEBUG Converters - adding converter 'Y', 'org.jbpm.context.exe.converter.BytesToByteArrayConverter' DEBUG Converters - adding converter 'A', 'org.jbpm.context.exe.converter.DateToLongConverter' DEBUG Converters - adding converter 'R', 'org.jbpm.context.exe.converter.SerializableToByteArrayConverter' DEBUG Converters - adding converter 'I', 'org.jbpm.context.exe.converter.IntegerToLongConverter' DEBUG Converters - adding converter 'H', 'org.jbpm.context.exe.converter.ShortToLongConverter' DEBUG Converters - adding converter 'G', 'org.jbpm.context.exe.converter.FloatToDoubleConverter' DEBUG Converters - adding converter 'F', 'org.jbpm.context.exe.converter.FloatToStringConverter' DEBUG Converters - adding converter 'E', 'org.jbpm.context.exe.converter.ByteToLongConverter' DEBUG HibernateLongIdMatcher - no current context so valueClass cannot be stored as a long-id-ref to a hibernate object DEBUG HibernateStringIdMatcher - no current context so valueClass cannot be stored as a string-id-ref to a hibernate object
The path to the missing interface we traced from jbpm-jpdl.jar -> org.jbpm.context.exe -> jbpm.varmapping.xml file contains the following mapping:
<!-- JSR 170 JCR Node --> <jbpm-type> <matcher> <bean class="org.jbpm.context.exe.matcher.JcrNodeMatcher" /> </matcher> <variable-instance class="org.jbpm.context.exe.variableinstance.JcrNodeInstance" /> </jbpm-type>
This leads to org.jbpm.context.exe.matcher.JcrNodeMatcher.class which imports the class not included in jBPM:
/* * Snipped the license code. */ package org.jbpm.context.exe.matcher; import javax.jcr.Node; <<<<<<<<<<<<<< MISSING!!!! import org.jbpm.context.exe.JbpmTypeMatcher; public class JcrNodeMatcher implements JbpmTypeMatcher { private static final long serialVersionUID = 1L; public boolean matches(Object value) { return (Node.class.isAssignableFrom(value.getClass())); } }
My solution: added external jar to projects classpath, jcr-1.0.jar which provides the needed interface interface. Hope this saves you some time!
After testing all available CSP jBPM framework downloads it turns out to affect only these two versions:
ReplyDelete- jbpm-jpdl-3.2.5SP5_SOA
- jbpm-jpdl-3.2.8_SOA
This is also available in the customer knowledge base.