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.