[rules-users] [droolsflow] - one way to use Hibernate mapping with JPAVariablePersister

Mauricio Salatino salaboy at gmail.com
Sat Oct 24 00:23:31 EDT 2009


hmm
I will take a look at it.. during the weekend..

2009/10/23 Bill Tarr <javatestcase at 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 at gmail.com>
> *To:* Rules Users List <rules-users at 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 at 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 at 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 at 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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
- http://salaboy.wordpress.com
- http://www.jbug.com.ar
- Salatino "Salaboy" Mauricio -
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091023/14100dbd/attachment.html 


More information about the rules-users mailing list