hmm
I will take a look at it.. during the weekend..
2009/10/23 Bill Tarr <javatestcase(a)yahoo.com>
I'm not sure this should be comitted to the trunk.
Users can't use this code as is, because:
1. Manual/Automatic flush
- they'd need to implement flush() and persist() if they have manual
flush set up.
2. HibUtil
- is a system specific implementation used to manage SessionFactory and
Sessions
- systems using Hibernate will already have some version of this they
will need to leverage
so this is more of a template.
In fact, it won't compile without a HibUtil, so that's another problem for
adding it to the trunk...
A test case in examples would let us create a simple HibUtil and
hibernate.cfg.xml.
The test case could create a H2 DB and the tables needed...
------------------------------
*From:* Mauricio Salatino <salaboy(a)gmail.com>
*To:* Rules Users List <rules-users(a)lists.jboss.org>
*Sent:* Fri, October 23, 2009 4:18:16 PM
*Subject:* Re: [rules-users] [droolsflow] - one way to use Hibernate
mapping with JPAVariablePersister
nice.. do you mind if I commit it to the trunk?
can you create some unit testing too?
On Fri, Oct 23, 2009 at 3:27 PM, Bill Tarr <javatestcase(a)yahoo.com> wrote:
> Here is an alternate version of JPAVariablePersister for people who are
> already using Hibernate xml mapping files.
>
> This implementation has some downsides, but it seems to be working for
> now.
>
> I am going to keep using JPA to manage all the Drools Flow tables.
>
> My domain object persistence will be managed by Hibernate Session.
>
> We are also currently using automatic flush (so no code to persist domain
> objects in this class)
>
> Obviously you need to use your own version of HibUtil.
>
> import java.util.logging.Level;
> import java.util.logging.Logger;
> import
> org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable;
> import
> org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
> import
> org.drools.persistence.processinstance.persisters.VariablePersister;
> import org.drools.runtime.Environment;
> import org.hibernate.Session;
> import HibUtil;
> /**
> * Variation on Drools JPA Variable Persister.
> * org.drools.persistence.processinstance.persisters.JPAVariablePersister
> * for using variables persisted by Hibernate, while still using JPA to
> * persist DroolsFlow data.
> *
> * @author <a href="mailto:kris_verlaenen@hotmail.com">Kris
Verlaenen</a>
> * @author salaboy
> */
> public class JPAVariablePersisterHibernate implements VariablePersister {
> public VariableInstanceInfo persistExternalVariable(String name, Object
> o,
> VariableInstanceInfo oldValue, Environment env) {
> if(o == null || (oldValue != null &&
> oldValue.getPersister().equals(""))){
> return null;
> }
> try {
> JPAPersistedVariable result = null;
> if (oldValue instanceof JPAPersistedVariable) {
> result = (JPAPersistedVariable) oldValue;
> }
> if (result == null) {
> result = new JPAPersistedVariable();
> }
> Long idValue = geHibIdValue(o);
> result.setPersister(this.getClass().getName());
> result.setName(name);
> result.setEntityId(idValue);
> result.setEntity(o);
> result.setEntityClass(o.getClass().getCanonicalName());
> return result;
> } catch (Throwable t) {
> Logger.getLogger(JPAVariablePersisterHibernate.class.getName())
> .log(Level.SEVERE, null, t);
> throw new RuntimeException("Could not persist external variable", t);
> }
> }
> public Object getExternalPersistedVariable(
> VariableInstanceInfo variableInstanceInfo, Environment env) {
> if(((JPAPersistedVariable) variableInstanceInfo) == null ||
> ((JPAPersistedVariable) variableInstanceInfo).getEntityId() == null){
> return null;
> }
> System.out.println("Restoring JPAPersistedVariable id=" +
> ((JPAPersistedVariable) variableInstanceInfo).getId() + " entityId=" +
> ((JPAPersistedVariable) variableInstanceInfo).getEntityId() + " class=" +
> ((JPAPersistedVariable) variableInstanceInfo).getEntityClass() + " value="
+
> ((JPAPersistedVariable) variableInstanceInfo).getEntity());
> String varType = ((JPAPersistedVariable)
> variableInstanceInfo).getEntityClass();
>
> Object obj = HibUtil.getCurrentSession().get(varType,
> ((JPAPersistedVariable) variableInstanceInfo).getEntityId());
> HibUtil.closeCurrentSession();
> return obj;
> }
> /**
> * Hibernate lookup to get ID column.
> * @param o Dto to look up.
> * @return Long id.
> */
> private Long geHibIdValue(Object o) {
> Session session = HibUtil.getCurrentSession();
> return (Long) session.getIdentifier(o);
> }
> }
>
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
--
-
http://salaboy.wordpress.com
-
http://www.jbug.com.ar
- Salatino "Salaboy" Mauricio -
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users