[rules-users] [droolsflow] - one way to use Hibernate mapping with JPAVariablePersister
Mauricio Salatino
salaboy at gmail.com
Fri Oct 23 19:18:16 EDT 2009
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 -
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091023/901bef26/attachment.html
More information about the rules-users
mailing list