-
1. Re: A sample with HibernateLongInstance or HibernateStringI
jcheyns Dec 20, 2005 9:12 AM (in response to pinston)An example of this feature would indeed by appreciated, also by me...
-
2. Re: A sample with HibernateLongInstance or HibernateStringI
jcheyns Dec 20, 2005 9:16 AM (in response to pinston)"jcheyns" wrote:
An example of this feature would indeed by appreciated, also by me...
Oh...
for the time being I just save the object through
session.save(myObject);
I then retrieve the Id of this object, say
myObject.getId();
and than i pass this on in the context. On the receiving side I than use a hibernate query to find myObject. I suppose this is very analogue to the way intended by JBPM, however because of lack of complete documentation this remains a mystery to me (and apperently others too). -
3. Re: A sample with HibernateLongInstance or HibernateStringI
mtrimpe Jun 5, 2006 12:11 PM (in response to pinston)OK, I've just spent a couple of hours working on this. This is the process as it goes:
In the ContextInstance you've created a variable that's supposed to be Hibernate managed.
The variable is passed through a number of variable matchers, until it reaches HibernateLongIdMatcher.
This searches the hibernate configuration file for a class of the given type, and if it finds one it gets the ID field and stores that into the database.
I stopped there, because I use the starterskit and I needed to edit the hibernate.cfg.xml in the jbpm-server\server\jbpm\deploy\jbpm.sar\jbpm.sar.cfg.jar but then I needed to add my classfile to the jBPM classloader and I felt that that would break loose coupling and end up just being an ugly hack. -
4. Re: A sample with HibernateLongInstance or HibernateStringI
doballve Feb 1, 2007 8:32 AM (in response to pinston)Just to give it code example, here is how you would do for a HibernateLongInstance:
First, You have a hibernate entity with id of type Long and a hibernate mapping to your class properly loaded in the same session as JBPM mappings. The mapping:<class name="mypackage.MyEntity" table="SAMPLE_ENTITY"> <id name="id" column="id" unsaved-value="0" type="java.lang.Long"> <generator class="native"/> </id> ... </class>
Then you use a HibernateLongInstance to wrap your entity and store it as any other JBPM variable:... // create my entity an wrap it with HibernateLongInstance MyEntity ent = new MyEntity(); HibernateLongInstance entWrapper = new HibernateLongInstance(); envWrapper.setObject(ent); // store it to root token context ContextInstance contextInstance = (ContextInstance) token.getProcessInstance().getInstance(ContextInstance.class); contextInstance.setVariable("my-entity-variable", entWrapper); ...
To access it later, just get the wrapped object and class cast it back to your entity:... ContextInstance contextInstance = (ContextInstance) token.getProcessInstance().getInstance(ContextInstance.class); HibernateLongInstance entWrapper = (HibernateLongInstance) contextInstance.getVariable("my-entity-variable"); MyEntity entData = (MyEntity)entWrapper.getObject(); ...
That's it!
A warning though: The default configuration has Serializable type mapped before Hibernate and EJB types. That means that if your entity class implements java.io.Serializable it will get serialized as a byte array and not as a Hibernate entity. To avoid this behavior, re-order the types in jbpm.varmapping.xml. -
5. Re: A sample with HibernateLongInstance or HibernateStringI
crussell42 Feb 1, 2007 10:41 AM (in response to pinston)See also http://www.jboss.com/index.html?module=bb&op=viewtopic&t=100452
I am trying to do the same thing with an entity that does not have a resource mapping file but uses annotations only to define schema.
Problem there is there is no way to "tell" jbpm about the annotated class because of the HibernateHelper use of Configuration object rather than AnnotationConfiguration.
Need a way to add config in hibernate.cfg.xml that sees the annotated class:
e.g.<mapping class="foo.MyAnnotatedFooClass"/>