From javatestcase at yahoo.com Fri Oct 23 18:27:44 2009 Content-Type: multipart/mixed; boundary="===============3877838063753896748==" MIME-Version: 1.0 From: Bill Tarr To: rules-users at lists.jboss.org Subject: [rules-users] [droolsflow] - one way to use Hibernate mapping with JPAVariablePersister Date: Fri, 23 Oct 2009 15:27:43 -0700 Message-ID: <635409.3225.qm@web45911.mail.sp1.yahoo.com> --===============3877838063753896748== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Here is an alternate version of JPAVariablePersister for people who are alr= eady using Hibernate xml=C2=A0mapping files.=C2=A0 = 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.=C2=A0 = We are also currently using automatic flush (so no code to persist domain o= bjects 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.JPAPersistedVar= iable; import org.drools.persistence.processinstance.variabletypes.VariableInstanc= eInfo; import org.drools.persistence.processinstance.persisters.VariablePersister; import org.drools.runtime.Environment; import org.hibernate.Session; import HibUtil; /** =C2=A0* Variation on Drools JPA Variable Persister. =C2=A0* org.drools.persistence.processinstance.persisters.JPAVariablePersis= ter =C2=A0* for using variables persisted by Hibernate, while still using JPA to =C2=A0* persist DroolsFlow data. =C2=A0* =C2=A0* @author Kris Verlae= nen =C2=A0* @author salaboy =C2=A0*/ public class JPAVariablePersisterHibernate implements VariablePersister { =C2=A0public VariableInstanceInfo persistExternalVariable(String name, Obje= ct o, =C2=A0=C2=A0=C2=A0VariableInstanceInfo oldValue, Environment env) { =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 if(o =3D=3D null || (oldValue !=3D null && oldValue.getPers= ister().equals(""))){ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return null; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 } =C2=A0=C2=A0try { =C2=A0=C2=A0=C2=A0JPAPersistedVariable result =3D null; =C2=A0=C2=A0=C2=A0if (oldValue instanceof JPAPersistedVariable) { =C2=A0=C2=A0=C2=A0=C2=A0result =3D (JPAPersistedVariable) oldValue; =C2=A0=C2=A0=C2=A0} =C2=A0=C2=A0=C2=A0if (result =3D=3D null) { =C2=A0=C2=A0=C2=A0=C2=A0result =3D new JPAPersistedVariable(); =C2=A0=C2=A0=C2=A0} =C2=A0=C2=A0=C2=A0Long idValue =3D geHibIdValue(o); =C2=A0=C2=A0=C2=A0result.setPersister(this.getClass().getName()); =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 result.s= etName(name); =C2=A0=C2=A0=C2=A0result.setEntityId(idValue); =C2=A0=C2=A0=C2=A0result.setEntity(o); =C2=A0=C2=A0=C2=A0result.setEntityClass(o.getClass().getCanonicalName()); =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return r= esult; =C2=A0=C2=A0} catch (Throwable t) { =C2=A0=C2=A0=C2=A0Logger.getLogger(JPAVariablePersisterHibernate.class.getN= ame()) =C2=A0=C2=A0=C2=A0=C2=A0.log(Level.SEVERE, null, t); =C2=A0=C2=A0=C2=A0throw new RuntimeException("Could not persist external va= riable", t); =C2=A0=C2=A0} =C2=A0} =C2=A0public Object getExternalPersistedVariable( =C2=A0=C2=A0=C2=A0VariableInstanceInfo variableInstanceInfo, Environment en= v) { =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if(((JPAPersistedVariable) varia= bleInstanceInfo) =3D=3D null || ((JPAPersistedVariable) variableInstanceInf= o).getEntityId() =3D=3D null){ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return n= ull; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println("Restoring JP= APersistedVariable id=3D" + ((JPAPersistedVariable) variableInstanceInfo).g= etId() + " entityId=3D" + ((JPAPersistedVariable) variableInstanceInfo).get= EntityId() + " class=3D" + ((JPAPersistedVariable) variableInstanceInfo).ge= tEntityClass() + " value=3D" + ((JPAPersistedVariable) variableInstanceInfo= ).getEntity()); =C2=A0=C2=A0String varType =3D ((JPAPersistedVariable) variableInstanceInfo= ).getEntityClass(); =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Object obj =3D HibUtil.getCurren= tSession().get(varType, ((JPAPersistedVariable) variableInstanceInfo).getEn= tityId()); =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 HibUtil.closeCurrentSession(); =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return obj; =C2=A0} /** =C2=A0* Hibernate lookup to get ID column. =C2=A0* @param o Dto to look up. =C2=A0* @return Long id. =C2=A0*/ =C2=A0private Long geHibIdValue(Object o)=C2=A0 { =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Session session =3D HibUtil.getC= urrentSession(); =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return (Long) session.getIdentif= ier(o); =C2=A0} }=C2=A0 = --===============3877838063753896748==-- From salaboy at gmail.com Fri Oct 23 19:18:16 2009 Content-Type: multipart/mixed; boundary="===============3382273413123377974==" MIME-Version: 1.0 From: Mauricio Salatino To: rules-users at lists.jboss.org Subject: Re: [rules-users] [droolsflow] - one way to use Hibernate mapping with JPAVariablePersister Date: Fri, 23 Oct 2009 16:18:16 -0700 Message-ID: In-Reply-To: 635409.3225.qm@web45911.mail.sp1.yahoo.com --===============3382273413123377974== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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 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 no= w. > > 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.VariablePersiste= r; > 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 Kris Verlaenen= > * @author salaboy > */ > public class JPAVariablePersisterHibernate implements VariablePersister { > public VariableInstanceInfo persistExternalVariable(String name, Object = o, > VariableInstanceInfo oldValue, Environment env) { > if(o =3D=3D null || (oldValue !=3D null && > oldValue.getPersister().equals(""))){ > return null; > } > try { > JPAPersistedVariable result =3D null; > if (oldValue instanceof JPAPersistedVariable) { > result =3D (JPAPersistedVariable) oldValue; > } > if (result =3D=3D null) { > result =3D new JPAPersistedVariable(); > } > Long idValue =3D 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) =3D=3D null || > ((JPAPersistedVariable) variableInstanceInfo).getEntityId() =3D=3D null){ > return null; > } > System.out.println("Restoring JPAPersistedVariable id=3D" + > ((JPAPersistedVariable) variableInstanceInfo).getId() + " entityId=3D" + > ((JPAPersistedVariable) variableInstanceInfo).getEntityId() + " class=3D"= + > ((JPAPersistedVariable) variableInstanceInfo).getEntityClass() + " value= =3D" + > ((JPAPersistedVariable) variableInstanceInfo).getEntity()); > String varType =3D ((JPAPersistedVariable) > variableInstanceInfo).getEntityClass(); > > Object obj =3D 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 =3D 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 - --===============3382273413123377974== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" bmljZS4uIGRvIHlvdSBtaW5kIGlmIEkgY29tbWl0IGl0IHRvIHRoZSB0cnVuaz88YnI+Y2FuIHlv dSBjcmVhdGUgc29tZSB1bml0IHRlc3RpbmcgdG9vPzxicj48YnI+PGJyPjxkaXYgY2xhc3M9Imdt YWlsX3F1b3RlIj5PbiBGcmksIE9jdCAyMywgMjAwOSBhdCAzOjI3IFBNLCBCaWxsIFRhcnIgPHNw YW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86amF2YXRlc3RjYXNlQHlhaG9vLmNvbSI+ amF2YXRlc3RjYXNlQHlhaG9vLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+CjxibG9ja3F1 b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9ImJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdi KDIwNCwgMjA0LCAyMDQpOyBtYXJnaW46IDBwdCAwcHQgMHB0IDAuOGV4OyBwYWRkaW5nLWxlZnQ6 IDFleDsiPkhlcmUgaXMgYW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgSlBBVmFyaWFibGVQZXJzaXN0 ZXIgZm9yIHBlb3BsZSB3aG8gYXJlIGFscmVhZHkgdXNpbmcgSGliZXJuYXRlIHhtbKBtYXBwaW5n IGZpbGVzLqA8YnI+Cgo8YnI+ClRoaXMgaW1wbGVtZW50YXRpb24gaGFzIHNvbWUgZG93bnNpZGVz LCBidXQgaXQgc2VlbXMgdG8gYmUgd29ya2luZyBmb3Igbm93Ljxicj4KPGJyPgpJIGFtIGdvaW5n IHRvIGtlZXAgdXNpbmcgSlBBIHRvIG1hbmFnZSBhbGwgdGhlIERyb29scyBGbG93IHRhYmxlcy48 YnI+Cjxicj4KTXkgZG9tYWluIG9iamVjdCBwZXJzaXN0ZW5jZSB3aWxsIGJlIG1hbmFnZWQgYnkg SGliZXJuYXRlIFNlc3Npb24uoDxicj4KPGJyPgpXZSBhcmUgYWxzbyBjdXJyZW50bHkgdXNpbmcg YXV0b21hdGljIGZsdXNoIChzbyBubyBjb2RlIHRvIHBlcnNpc3QgZG9tYWluIG9iamVjdHMgaW4g dGhpcyBjbGFzcyk8YnI+Cjxicj4KT2J2aW91c2x5IHlvdSBuZWVkIHRvIHVzZSB5b3VyIG93biB2 ZXJzaW9uIG9mIEhpYlV0aWwuPGJyPgo8YnI+CmltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZl bDs8YnI+CmltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7PGJyPgppbXBvcnQgb3JnLmRy b29scy5wZXJzaXN0ZW5jZS5wcm9jZXNzaW5zdGFuY2UudmFyaWFibGV0eXBlcy5KUEFQZXJzaXN0 ZWRWYXJpYWJsZTs8YnI+CmltcG9ydCBvcmcuZHJvb2xzLnBlcnNpc3RlbmNlLnByb2Nlc3NpbnN0 YW5jZS52YXJpYWJsZXR5cGVzLlZhcmlhYmxlSW5zdGFuY2VJbmZvOzxicj4KaW1wb3J0IG9yZy5k cm9vbHMucGVyc2lzdGVuY2UucHJvY2Vzc2luc3RhbmNlLnBlcnNpc3RlcnMuVmFyaWFibGVQZXJz aXN0ZXI7PGJyPgppbXBvcnQgb3JnLmRyb29scy5ydW50aW1lLkVudmlyb25tZW50Ozxicj4KaW1w b3J0IG9yZy5oaWJlcm5hdGUuU2Vzc2lvbjs8YnI+CmltcG9ydCBIaWJVdGlsOzxicj4KLyoqPGJy PgqgKiBWYXJpYXRpb24gb24gRHJvb2xzIEpQQSBWYXJpYWJsZSBQZXJzaXN0ZXIuPGJyPgqgKiBv cmcuZHJvb2xzLnBlcnNpc3RlbmNlLnByb2Nlc3NpbnN0YW5jZS5wZXJzaXN0ZXJzLkpQQVZhcmlh YmxlUGVyc2lzdGVyPGJyPgqgKiBmb3IgdXNpbmcgdmFyaWFibGVzIHBlcnNpc3RlZCBieSBIaWJl cm5hdGUsIHdoaWxlIHN0aWxsIHVzaW5nIEpQQSB0bzxicj4KoCogcGVyc2lzdCBEcm9vbHNGbG93 IGRhdGEuPGJyPgqgKjxicj4KoCogQGF1dGhvciAmbHQ7YSBocmVmPSZxdW90O21haWx0bzo8YSBo cmVmPSJtYWlsdG86a3Jpc192ZXJsYWVuZW5AaG90bWFpbC5jb20iPmtyaXNfdmVybGFlbmVuQGhv dG1haWwuY29tPC9hPiZxdW90OyZndDtLcmlzIFZlcmxhZW5lbiZsdDsvYSZndDs8YnI+CqAqIEBh dXRob3Igc2FsYWJveTxicj4KoCovPGJyPgpwdWJsaWMgY2xhc3MgSlBBVmFyaWFibGVQZXJzaXN0 ZXJIaWJlcm5hdGUgaW1wbGVtZW50cyBWYXJpYWJsZVBlcnNpc3RlciB7PGJyPgqgcHVibGljIFZh cmlhYmxlSW5zdGFuY2VJbmZvIHBlcnNpc3RFeHRlcm5hbFZhcmlhYmxlKFN0cmluZyBuYW1lLCBP YmplY3Qgbyw8YnI+CqCgoFZhcmlhYmxlSW5zdGFuY2VJbmZvIG9sZFZhbHVlLCBFbnZpcm9ubWVu dCBlbnYpIHs8YnI+CqCgoKCgoKCgoKCgoKCgoCBpZihvID09IG51bGwgfHwgKG9sZFZhbHVlICE9 IG51bGwgJmFtcDsmYW1wOyBvbGRWYWx1ZS5nZXRQZXJzaXN0ZXIoKS5lcXVhbHMoJnF1b3Q7JnF1 b3Q7KSkpezxicj4KoKCgoKCgoKCgoKCgoKCgoKCgoCByZXR1cm4gbnVsbDs8YnI+CqCgoKCgoKCg oKCgoKCgoCB9PGJyPgqgoHRyeSB7PGJyPgqgoKBKUEFQZXJzaXN0ZWRWYXJpYWJsZSByZXN1bHQg PSBudWxsOzxicj4KoKCgaWYgKG9sZFZhbHVlIGluc3RhbmNlb2YgSlBBUGVyc2lzdGVkVmFyaWFi bGUpIHs8YnI+CqCgoKByZXN1bHQgPSAoSlBBUGVyc2lzdGVkVmFyaWFibGUpIG9sZFZhbHVlOzxi cj4KoKCgfTxicj4KoKCgaWYgKHJlc3VsdCA9PSBudWxsKSB7PGJyPgqgoKCgcmVzdWx0ID0gbmV3 IEpQQVBlcnNpc3RlZFZhcmlhYmxlKCk7PGJyPgqgoKB9PGJyPgqgoKBMb25nIGlkVmFsdWUgPSBn ZUhpYklkVmFsdWUobyk7PGJyPgqgoKByZXN1bHQuc2V0UGVyc2lzdGVyKHRoaXMuZ2V0Q2xhc3Mo KS5nZXROYW1lKCkpOzxicj4KoKCgoKCgoKCgoKAgcmVzdWx0LnNldE5hbWUobmFtZSk7PGJyPgqg oKByZXN1bHQuc2V0RW50aXR5SWQoaWRWYWx1ZSk7PGJyPgqgoKByZXN1bHQuc2V0RW50aXR5KG8p Ozxicj4KoKCgcmVzdWx0LnNldEVudGl0eUNsYXNzKG8uZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxO YW1lKCkpOzxicj4KoKCgoKCgoKCgoKAgcmV0dXJuIHJlc3VsdDs8YnI+CqCgfSBjYXRjaCAoVGhy b3dhYmxlIHQpIHs8YnI+CqCgoExvZ2dlci5nZXRMb2dnZXIoSlBBVmFyaWFibGVQZXJzaXN0ZXJI aWJlcm5hdGUuY2xhc3MuZ2V0TmFtZSgpKTxicj4KoKCgoC5sb2coTGV2ZWwuU0VWRVJFLCBudWxs LCB0KTs8YnI+CqCgoHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCZxdW90O0NvdWxkIG5vdCBw ZXJzaXN0IGV4dGVybmFsIHZhcmlhYmxlJnF1b3Q7LCB0KTs8YnI+CqCgfTxicj4KoH08YnI+CqBw dWJsaWMgT2JqZWN0IGdldEV4dGVybmFsUGVyc2lzdGVkVmFyaWFibGUoPGJyPgqgoKBWYXJpYWJs ZUluc3RhbmNlSW5mbyB2YXJpYWJsZUluc3RhbmNlSW5mbywgRW52aXJvbm1lbnQgZW52KSB7PGJy PgqgoKCgoKCgIGlmKCgoSlBBUGVyc2lzdGVkVmFyaWFibGUpIHZhcmlhYmxlSW5zdGFuY2VJbmZv KSA9PSBudWxsIHx8ICgoSlBBUGVyc2lzdGVkVmFyaWFibGUpIHZhcmlhYmxlSW5zdGFuY2VJbmZv KS5nZXRFbnRpdHlJZCgpID09IG51bGwpezxicj4KoKCgoKCgoKCgoKAgcmV0dXJuIG51bGw7PGJy PgqgoKCgoKCgIH08YnI+CqCgoKCgoKAgU3lzdGVtLm91dC5wcmludGxuKCZxdW90O1Jlc3Rvcmlu ZyBKUEFQZXJzaXN0ZWRWYXJpYWJsZSBpZD0mcXVvdDsgKyAoKEpQQVBlcnNpc3RlZFZhcmlhYmxl KSB2YXJpYWJsZUluc3RhbmNlSW5mbykuZ2V0SWQoKSArICZxdW90OyBlbnRpdHlJZD0mcXVvdDsg KyAoKEpQQVBlcnNpc3RlZFZhcmlhYmxlKSB2YXJpYWJsZUluc3RhbmNlSW5mbykuZ2V0RW50aXR5 SWQoKSArICZxdW90OyBjbGFzcz0mcXVvdDsgKyAoKEpQQVBlcnNpc3RlZFZhcmlhYmxlKSB2YXJp YWJsZUluc3RhbmNlSW5mbykuZ2V0RW50aXR5Q2xhc3MoKSArICZxdW90OyB2YWx1ZT0mcXVvdDsg KyAoKEpQQVBlcnNpc3RlZFZhcmlhYmxlKSB2YXJpYWJsZUluc3RhbmNlSW5mbykuZ2V0RW50aXR5 KCkpOzxicj4KCqCgU3RyaW5nIHZhclR5cGUgPSAoKEpQQVBlcnNpc3RlZFZhcmlhYmxlKSB2YXJp YWJsZUluc3RhbmNlSW5mbykuZ2V0RW50aXR5Q2xhc3MoKTs8YnI+CqCgoKCgoKA8YnI+CqCgoKCg oKAgT2JqZWN0IG9iaiA9IEhpYlV0aWwuZ2V0Q3VycmVudFNlc3Npb24oKS5nZXQodmFyVHlwZSwg KChKUEFQZXJzaXN0ZWRWYXJpYWJsZSkgdmFyaWFibGVJbnN0YW5jZUluZm8pLmdldEVudGl0eUlk KCkpOzxicj4KoKCgoKCgoCBIaWJVdGlsLmNsb3NlQ3VycmVudFNlc3Npb24oKTs8YnI+CqCgoKCg oKAgcmV0dXJuIG9iajs8YnI+CqB9PGJyPgovKio8YnI+CqAqIEhpYmVybmF0ZSBsb29rdXAgdG8g Z2V0IElEIGNvbHVtbi48YnI+CqAqIEBwYXJhbSBvIER0byB0byBsb29rIHVwLjxicj4KoCogQHJl dHVybiBMb25nIGlkLjxicj4KoCovPGJyPgqgcHJpdmF0ZSBMb25nIGdlSGliSWRWYWx1ZShPYmpl Y3QgbymgIHs8YnI+CqCgoKCgoKAgU2Vzc2lvbiBzZXNzaW9uID0gSGliVXRpbC5nZXRDdXJyZW50 U2Vzc2lvbigpOzxicj4KoKCgoKCgoCByZXR1cm4gKExvbmcpIHNlc3Npb24uZ2V0SWRlbnRpZmll cihvKTs8YnI+CqB9PGJyPgp9oDxicj4KPGJyPgo8YnI+Cjxicj4KPGJyPgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj4KcnVsZXMtdXNlcnMgbWFpbGlu ZyBsaXN0PGJyPgo8YSBocmVmPSJtYWlsdG86cnVsZXMtdXNlcnNAbGlzdHMuamJvc3Mub3JnIj5y dWxlcy11c2Vyc0BsaXN0cy5qYm9zcy5vcmc8L2E+PGJyPgo8YSBocmVmPSJodHRwczovL2xpc3Rz Lmpib3NzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3J1bGVzLXVzZXJzIiB0YXJnZXQ9Il9ibGFuayI+ aHR0cHM6Ly9saXN0cy5qYm9zcy5vcmcvbWFpbG1hbi9saXN0aW5mby9ydWxlcy11c2VyczwvYT48 YnI+CjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PGJyIGNsZWFyPSJhbGwiPjxicj4tLSA8YnI+IC0g PGEgaHJlZj0iaHR0cDovL3NhbGFib3kud29yZHByZXNzLmNvbSI+aHR0cDovL3NhbGFib3kud29y ZHByZXNzLmNvbTwvYT48YnI+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5qYnVnLmNvbS5hciI+aHR0 cDovL3d3dy5qYnVnLmNvbS5hcjwvYT48YnI+IC0gU2FsYXRpbm8gJnF1b3Q7U2FsYWJveSZxdW90 OyBNYXVyaWNpbyAtPGJyPgoK --===============3382273413123377974==-- From javatestcase at yahoo.com Fri Oct 23 20:14:31 2009 Content-Type: multipart/mixed; boundary="===============5937942219109576649==" MIME-Version: 1.0 From: Bill Tarr To: rules-users at lists.jboss.org Subject: Re: [rules-users] [droolsflow] - one way to use Hibernate mapping with JPAVariablePersister Date: Fri, 23 Oct 2009 17:14:30 -0700 Message-ID: <463447.27253.qm@web45915.mail.sp1.yahoo.com> In-Reply-To: efac615a0910231618q3631bb12l44fb571e489e541e@mail.gmail.com --===============5937942219109576649== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable I'm not sure this should be comitted to the trunk. Users=C2=A0can't use this code as is, because: 1. Manual/Automatic flush = =C2=A0=C2=A0 - they'd need to implement flush() and persist() if they have = manual flush set up. 2. HibUtil = =C2=A0=C2=A0 - is a system specific implementation used to manage SessionFa= ctory and Sessions =C2=A0=C2=A0 - systems using Hibernate will already have some version of th= is they will need to leverage so this is more of a template.=C2=A0 = 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 To: Rules Users List 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 wrote: Here is an alternate version of JPAVariablePersister for people who are alr= eady using Hibernate xml=C2=A0mapping files.=C2=A0 > >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.=C2=A0 > >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.JPAPersistedVa= riable; >import org.drools.persistence.processinstance.variabletypes.VariableInstan= ceInfo; >import org.drools.persistence.processinstance.persisters.VariablePersister; >import org.drools.runtime.Environment; >import org.hibernate.Session; >import HibUtil; >/** >=C2=A0* Variation on Drools JPA Variable Persister. >=C2=A0* org.drools.persistence.processinstance.persisters.JPAVariablePersi= ster >=C2=A0* for using variables persisted by Hibernate, while still using JPA = to >=C2=A0* persist DroolsFlow data. >=C2=A0* >=C2=A0* @author Kris Verla= enen >=C2=A0* @author salaboy >=C2=A0*/ >public class JPAVariablePersisterHibernate implements VariablePersister { >=C2=A0public VariableInstanceInfo persistExternalVariable(String name, Obj= ect o, >=C2=A0=C2=A0=C2=A0VariableInstanceInfo oldValue, Environment env) { >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 if(o =3D=3D null || (oldValue !=3D null && oldValue.getP= ersister().equals(""))){ >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return null; >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 } >=C2=A0=C2=A0try { >=C2=A0=C2=A0=C2=A0JPAPersistedVariable result =3D null; >=C2=A0=C2=A0=C2=A0if (oldValue instanceof JPAPersistedVariable) { >=C2=A0=C2=A0=C2=A0=C2=A0result =3D (JPAPersistedVariable) oldValue; >=C2=A0=C2=A0=C2=A0} >=C2=A0=C2=A0=C2=A0if (result =3D=3D null) { >=C2=A0=C2=A0=C2=A0=C2=A0result =3D new JPAPersistedVariable(); >=C2=A0=C2=A0=C2=A0} >=C2=A0=C2=A0=C2=A0Long idValue =3D geHibIdValue(o); >=C2=A0=C2=A0=C2=A0result.setPersister(this.getClass().getName()); >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 result.= setName(name); >=C2=A0=C2=A0=C2=A0result.setEntityId(idValue); >=C2=A0=C2=A0=C2=A0result.setEntity(o); >=C2=A0=C2=A0=C2=A0result.setEntityClass(o.getClass().getCanonicalName()); >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return = result; >=C2=A0=C2=A0} catch (Throwable t) { >=C2=A0=C2=A0=C2=A0Logger.getLogger(JPAVariablePersisterHibernate.class.get= Name()) >=C2=A0=C2=A0=C2=A0=C2=A0.log(Level.SEVERE, null, t); >=C2=A0=C2=A0=C2=A0throw new RuntimeException("Could not persist external v= ariable", t); >=C2=A0=C2=A0} >=C2=A0} >=C2=A0public Object getExternalPersistedVariable( >=C2=A0=C2=A0=C2=A0VariableInstanceInfo variableInstanceInfo, Environment e= nv) { >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if(((JPAPersistedVariable) vari= ableInstanceInfo) =3D=3D null || ((JPAPersistedVariable) variableInstanceIn= fo).getEntityId() =3D=3D null){ >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return = null; >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println("Restoring J= PAPersistedVariable id=3D" + ((JPAPersistedVariable) variableInstanceInfo).= getId() + " entityId=3D" + ((JPAPersistedVariable) variableInstanceInfo).ge= tEntityId() + " class=3D" + ((JPAPersistedVariable) variableInstanceInfo).g= etEntityClass() + " value=3D" + ((JPAPersistedVariable) variableInstanceInf= o).getEntity()); >=C2=A0=C2=A0String varType =3D ((JPAPersistedVariable) variableInstanceInf= o).getEntityClass(); >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Object obj =3D HibUtil.getCurre= ntSession().get(varType, ((JPAPersistedVariable) variableInstanceInfo).getE= ntityId()); >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 HibUtil.closeCurrentSession(); >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return obj; >=C2=A0} >/** >=C2=A0* Hibernate lookup to get ID column. >=C2=A0* @param o Dto to look up. >=C2=A0* @return Long id. >=C2=A0*/ >=C2=A0private Long geHibIdValue(Object o)=C2=A0 { >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Session session =3D HibUtil.get= CurrentSession(); >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return (Long) session.getIdenti= fier(o); >=C2=A0} >}=C2=A0 > > > > >_______________________________________________ >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 - =20 --===============5937942219109576649== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+PGhlYWQ+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tIERJViB7bWFyZ2luOjBweDt9 IC0tPjwvc3R5bGU+PC9oZWFkPjxib2R5PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsLCBo ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHQiPjxESVY+SSdtIG5vdCBzdXJlIHRo aXMgc2hvdWxkIGJlIGNvbWl0dGVkIHRvIHRoZSB0cnVuay48L0RJVj4KPERJVj4mbmJzcDs8L0RJ Vj4KPERJVj5Vc2VycyZuYnNwO2Nhbid0IHVzZSB0aGlzIGNvZGUgYXMgaXMsIGJlY2F1c2U6PC9E SVY+CjxESVY+Jm5ic3A7PC9ESVY+CjxESVY+MS4gTWFudWFsL0F1dG9tYXRpYyBmbHVzaCA8L0RJ Vj4KPERJVj4mbmJzcDsmbmJzcDsgLSB0aGV5J2QgbmVlZCB0byBpbXBsZW1lbnQgZmx1c2goKSBh bmQgcGVyc2lzdCgpIGlmIHRoZXkgaGF2ZSBtYW51YWwgZmx1c2ggc2V0IHVwLjwvRElWPgo8RElW PjIuIEhpYlV0aWwgPC9ESVY+CjxESVY+Jm5ic3A7Jm5ic3A7IC0gaXMgYSBzeXN0ZW0gc3BlY2lm aWMgaW1wbGVtZW50YXRpb24gdXNlZCB0byBtYW5hZ2UgU2Vzc2lvbkZhY3RvcnkgYW5kIFNlc3Np b25zPC9ESVY+CjxESVY+Jm5ic3A7Jm5ic3A7IC0gc3lzdGVtcyB1c2luZyBIaWJlcm5hdGUgd2ls bCBhbHJlYWR5IGhhdmUgc29tZSB2ZXJzaW9uIG9mIHRoaXMgdGhleSB3aWxsIG5lZWQgdG8gbGV2 ZXJhZ2U8L0RJVj4KPERJVj4mbmJzcDs8L0RJVj4KPERJVj5zbyB0aGlzIGlzIG1vcmUgb2YgYSB0 ZW1wbGF0ZS4mbmJzcDsgPC9ESVY+CjxESVY+Jm5ic3A7PC9ESVY+CjxESVY+SW4gZmFjdCwgaXQg d29uJ3QgY29tcGlsZSB3aXRob3V0IGEgSGliVXRpbCwgc28gdGhhdCdzIGFub3RoZXIgcHJvYmxl bSBmb3IgYWRkaW5nIGl0IHRvIHRoZSB0cnVuay4uLjwvRElWPgo8RElWPiZuYnNwOzwvRElWPgo8 RElWPkEgdGVzdCBjYXNlIGluIGV4YW1wbGVzIHdvdWxkIGxldCB1cyBjcmVhdGUgYSBzaW1wbGUg SGliVXRpbCBhbmQgaGliZXJuYXRlLmNmZy54bWwuPC9ESVY+CjxESVY+PEJSPlRoZSB0ZXN0IGNh c2UgY291bGQgY3JlYXRlIGEgSDIgREIgYW5kIHRoZSB0YWJsZXMgbmVlZGVkLi4uPC9ESVY+CjxE SVY+Jm5ic3A7PC9ESVY+CjxESVYgc3R5bGU9IkZPTlQtRkFNSUxZOiBhcmlhbCwgaGVsdmV0aWNh LCBzYW5zLXNlcmlmOyBGT05ULVNJWkU6IDEycHQiPjxCUj4KPERJViBzdHlsZT0iRk9OVC1GQU1J TFk6IHRpbWVzIG5ldyByb21hbiwgbmV3IHlvcmssIHRpbWVzLCBzZXJpZjsgRk9OVC1TSVpFOiAx MnB0Ij48Rk9OVCBzaXplPTIgZmFjZT1UYWhvbWE+CjxIUiBTSVpFPTE+CjxCPjxTUEFOIHN0eWxl PSJGT05ULVdFSUdIVDogYm9sZCI+RnJvbTo8L1NQQU4+PC9CPiBNYXVyaWNpbyBTYWxhdGlubyAm bHQ7c2FsYWJveUBnbWFpbC5jb20mZ3Q7PEJSPjxCPjxTUEFOIHN0eWxlPSJGT05ULVdFSUdIVDog Ym9sZCI+VG86PC9TUEFOPjwvQj4gUnVsZXMgVXNlcnMgTGlzdCAmbHQ7cnVsZXMtdXNlcnNAbGlz dHMuamJvc3Mub3JnJmd0OzxCUj48Qj48U1BBTiBzdHlsZT0iRk9OVC1XRUlHSFQ6IGJvbGQiPlNl bnQ6PC9TUEFOPjwvQj4gRnJpLCBPY3RvYmVyIDIzLCAyMDA5IDQ6MTg6MTYgUE08QlI+PEI+PFNQ QU4gc3R5bGU9IkZPTlQtV0VJR0hUOiBib2xkIj5TdWJqZWN0OjwvU1BBTj48L0I+IFJlOiBbcnVs ZXMtdXNlcnNdIFtkcm9vbHNmbG93XSAtIG9uZSB3YXkgdG8gdXNlIEhpYmVybmF0ZSBtYXBwaW5n IHdpdGggSlBBVmFyaWFibGVQZXJzaXN0ZXI8QlI+PC9GT05UPjxCUj5uaWNlLi4gZG8geW91IG1p bmQgaWYgSSBjb21taXQgaXQgdG8gdGhlIHRydW5rPzxCUj5jYW4geW91IGNyZWF0ZSBzb21lIHVu aXQgdGVzdGluZyB0b28/PEJSPjxCUj48QlI+CjxESVYgY2xhc3M9Z21haWxfcXVvdGU+T24gRnJp LCBPY3QgMjMsIDIwMDkgYXQgMzoyNyBQTSwgQmlsbCBUYXJyIDxTUEFOIGRpcj1sdHI+Jmx0OzxB IGhyZWY9Im1haWx0bzpqYXZhdGVzdGNhc2VAeWFob28uY29tIiByZWw9bm9mb2xsb3cgdGFyZ2V0 PV9ibGFuayB5bWFpbHRvPSJtYWlsdG86amF2YXRlc3RjYXNlQHlhaG9vLmNvbSI+amF2YXRlc3Rj YXNlQHlhaG9vLmNvbTwvQT4mZ3Q7PC9TUEFOPiB3cm90ZTo8QlI+CjxCTE9DS1FVT1RFIHN0eWxl PSJCT1JERVItTEVGVDogcmdiKDIwNCwyMDQsMjA0KSAxcHggc29saWQ7IE1BUkdJTjogMHB0IDBw dCAwcHQgMC44ZXg7IFBBRERJTkctTEVGVDogMWV4IiBjbGFzcz1nbWFpbF9xdW90ZT5IZXJlIGlz IGFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIEpQQVZhcmlhYmxlUGVyc2lzdGVyIGZvciBwZW9wbGUg d2hvIGFyZSBhbHJlYWR5IHVzaW5nIEhpYmVybmF0ZSB4bWwmbmJzcDttYXBwaW5nIGZpbGVzLiZu YnNwOzxCUj48QlI+VGhpcyBpbXBsZW1lbnRhdGlvbiBoYXMgc29tZSBkb3duc2lkZXMsIGJ1dCBp dCBzZWVtcyB0byBiZSB3b3JraW5nIGZvciBub3cuPEJSPjxCUj5JIGFtIGdvaW5nIHRvIGtlZXAg dXNpbmcgSlBBIHRvIG1hbmFnZSBhbGwgdGhlIERyb29scyBGbG93IHRhYmxlcy48QlI+PEJSPk15 IGRvbWFpbiBvYmplY3QgcGVyc2lzdGVuY2Ugd2lsbCBiZSBtYW5hZ2VkIGJ5IEhpYmVybmF0ZSBT ZXNzaW9uLiZuYnNwOzxCUj48QlI+V2UgYXJlIGFsc28gY3VycmVudGx5IHVzaW5nIGF1dG9tYXRp YyBmbHVzaCAoc28gbm8gY29kZSB0byBwZXJzaXN0IGRvbWFpbiBvYmplY3RzIGluIHRoaXMgY2xh c3MpPEJSPjxCUj5PYnZpb3VzbHkgeW91IG5lZWQgdG8gdXNlIHlvdXIgb3duIHZlcnNpb24gb2Yg SGliVXRpbC48QlI+PEJSPmltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDs8QlI+aW1wb3J0 IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjs8QlI+aW1wb3J0IG9yZy5kcm9vbHMucGVyc2lzdGVu Y2UucHJvY2Vzc2luc3RhbmNlLnZhcmlhYmxldHlwZXMuSlBBUGVyc2lzdGVkVmFyaWFibGU7PEJS PmltcG9ydCBvcmcuZHJvb2xzLnBlcnNpc3RlbmNlLnByb2Nlc3NpbnN0YW5jZS52YXJpYWJsZXR5 cGVzLlZhcmlhYmxlSW5zdGFuY2VJbmZvOzxCUj5pbXBvcnQKIG9yZy5kcm9vbHMucGVyc2lzdGVu Y2UucHJvY2Vzc2luc3RhbmNlLnBlcnNpc3RlcnMuVmFyaWFibGVQZXJzaXN0ZXI7PEJSPmltcG9y dCBvcmcuZHJvb2xzLnJ1bnRpbWUuRW52aXJvbm1lbnQ7PEJSPmltcG9ydCBvcmcuaGliZXJuYXRl LlNlc3Npb247PEJSPmltcG9ydCBIaWJVdGlsOzxCUj4vKio8QlI+Jm5ic3A7KiBWYXJpYXRpb24g b24gRHJvb2xzIEpQQSBWYXJpYWJsZSBQZXJzaXN0ZXIuPEJSPiZuYnNwOyogb3JnLmRyb29scy5w ZXJzaXN0ZW5jZS5wcm9jZXNzaW5zdGFuY2UucGVyc2lzdGVycy5KUEFWYXJpYWJsZVBlcnNpc3Rl cjxCUj4mbmJzcDsqIGZvciB1c2luZyB2YXJpYWJsZXMgcGVyc2lzdGVkIGJ5IEhpYmVybmF0ZSwg d2hpbGUgc3RpbGwgdXNpbmcgSlBBIHRvPEJSPiZuYnNwOyogcGVyc2lzdCBEcm9vbHNGbG93IGRh dGEuPEJSPiZuYnNwOyo8QlI+Jm5ic3A7KiBAYXV0aG9yICZsdDthIGhyZWY9Im1haWx0bzo8QSBo cmVmPSJtYWlsdG86a3Jpc192ZXJsYWVuZW5AaG90bWFpbC5jb20iIHJlbD1ub2ZvbGxvdyB0YXJn ZXQ9X2JsYW5rIHltYWlsdG89Im1haWx0bzprcmlzX3ZlcmxhZW5lbkBob3RtYWlsLmNvbSI+a3Jp c192ZXJsYWVuZW5AaG90bWFpbC5jb208L0E+IiZndDtLcmlzIFZlcmxhZW5lbiZsdDsvYSZndDs8 QlI+Jm5ic3A7KiBAYXV0aG9yIHNhbGFib3k8QlI+Jm5ic3A7Ki88QlI+cHVibGljIGNsYXNzIEpQ QVZhcmlhYmxlUGVyc2lzdGVySGliZXJuYXRlIGltcGxlbWVudHMgVmFyaWFibGVQZXJzaXN0ZXIg ezxCUj4mbmJzcDtwdWJsaWMgVmFyaWFibGVJbnN0YW5jZUluZm8gcGVyc2lzdEV4dGVybmFsVmFy aWFibGUoU3RyaW5nIG5hbWUsIE9iamVjdCBvLDxCUj4mbmJzcDsmbmJzcDsmbmJzcDtWYXJpYWJs ZUluc3RhbmNlSW5mbyBvbGRWYWx1ZSwgRW52aXJvbm1lbnQgZW52KQogezxCUj4mbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYobyA9PSBudWxsIHx8IChvbGRWYWx1ZSAhPSBudWxs ICZhbXA7JmFtcDsgb2xkVmFsdWUuZ2V0UGVyc2lzdGVyKCkuZXF1YWxzKCIiKSkpezxCUj4mbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0 dXJuIG51bGw7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB9PEJSPiZuYnNw OyZuYnNwO3RyeSB7PEJSPiZuYnNwOyZuYnNwOyZuYnNwO0pQQVBlcnNpc3RlZFZhcmlhYmxlIHJl c3VsdCA9IG51bGw7PEJSPiZuYnNwOyZuYnNwOyZuYnNwO2lmIChvbGRWYWx1ZSBpbnN0YW5jZW9m IEpQQVBlcnNpc3RlZFZhcmlhYmxlKSB7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3Jlc3Vs dCA9IChKUEFQZXJzaXN0ZWRWYXJpYWJsZSkgb2xkVmFsdWU7PEJSPiZuYnNwOyZuYnNwOyZuYnNw O308QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7aWYgKHJlc3VsdCA9PSBudWxsKSB7PEJSPiZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwO3Jlc3VsdCA9IG5ldyBKUEFQZXJzaXN0ZWRWYXJpYWJsZSgpOzxCUj4m bmJzcDsmbmJzcDsmbmJzcDt9PEJSPiZuYnNwOyZuYnNwOyZuYnNwO0xvbmcgaWRWYWx1ZSA9IGdl SGliSWRWYWx1ZShvKTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzdWx0LnNldFBlcnNpc3Rlcih0 aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpKTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiByZXN1bHQuc2V0TmFtZShu YW1lKTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzdWx0LnNldEVudGl0eUlkKGlkVmFsdWUpOzxC Uj4mbmJzcDsmbmJzcDsmbmJzcDtyZXN1bHQuc2V0RW50aXR5KG8pOzxCUj4mbmJzcDsmbmJzcDsm bmJzcDtyZXN1bHQuc2V0RW50aXR5Q2xhc3Moby5nZXRDbGFzcygpLmdldENhbm9uaWNhbE5hbWUo KSk7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gcmVzdWx0OzxCUj4mbmJzcDsmbmJzcDt9IGNhdGNoIChU aHJvd2FibGUgdCkgezxCUj4mbmJzcDsmbmJzcDsmbmJzcDtMb2dnZXIuZ2V0TG9nZ2VyKEpQQVZh cmlhYmxlUGVyc2lzdGVySGliZXJuYXRlLmNsYXNzLmdldE5hbWUoKSk8QlI+Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7LmxvZyhMZXZlbC5TRVZFUkUsIG51bGwsIHQpOzxCUj4mbmJzcDsmbmJzcDsm bmJzcDt0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IHBlcnNpc3QgZXh0ZXJu YWwgdmFyaWFibGUiLCB0KTs8QlI+Jm5ic3A7Jm5ic3A7fTxCUj4mbmJzcDt9PEJSPiZuYnNwO3B1 YmxpYyBPYmplY3QgZ2V0RXh0ZXJuYWxQZXJzaXN0ZWRWYXJpYWJsZSg8QlI+Jm5ic3A7Jm5ic3A7 Jm5ic3A7VmFyaWFibGVJbnN0YW5jZUluZm8gdmFyaWFibGVJbnN0YW5jZUluZm8sIEVudmlyb25t ZW50IGVudikgezxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg aWYoKChKUEFQZXJzaXN0ZWRWYXJpYWJsZSkgdmFyaWFibGVJbnN0YW5jZUluZm8pID09IG51bGwg fHwgKChKUEFQZXJzaXN0ZWRWYXJpYWJsZSkgdmFyaWFibGVJbnN0YW5jZUluZm8pLmdldEVudGl0 eUlkKCkgPT0gbnVsbCl7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4KIG51bGw7PEJSPiZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB9PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3RvcmluZyBKUEFQ ZXJzaXN0ZWRWYXJpYWJsZSBpZD0iICsgKChKUEFQZXJzaXN0ZWRWYXJpYWJsZSkgdmFyaWFibGVJ bnN0YW5jZUluZm8pLmdldElkKCkgKyAiIGVudGl0eUlkPSIgKyAoKEpQQVBlcnNpc3RlZFZhcmlh YmxlKSB2YXJpYWJsZUluc3RhbmNlSW5mbykuZ2V0RW50aXR5SWQoKSArICIgY2xhc3M9IiArICgo SlBBUGVyc2lzdGVkVmFyaWFibGUpIHZhcmlhYmxlSW5zdGFuY2VJbmZvKS5nZXRFbnRpdHlDbGFz cygpICsgIiB2YWx1ZT0iICsgKChKUEFQZXJzaXN0ZWRWYXJpYWJsZSkgdmFyaWFibGVJbnN0YW5j ZUluZm8pLmdldEVudGl0eSgpKTs8QlI+Jm5ic3A7Jm5ic3A7U3RyaW5nIHZhclR5cGUgPSAoKEpQ QVBlcnNpc3RlZFZhcmlhYmxlKSB2YXJpYWJsZUluc3RhbmNlSW5mbykuZ2V0RW50aXR5Q2xhc3Mo KTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEJSPiZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBPYmplY3Qgb2JqID0gSGliVXRp bC5nZXRDdXJyZW50U2Vzc2lvbigpLmdldCh2YXJUeXBlLCAoKEpQQVBlcnNpc3RlZFZhcmlhYmxl KSB2YXJpYWJsZUluc3RhbmNlSW5mbykuZ2V0RW50aXR5SWQoKSk7PEJSPiZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBIaWJVdGlsLmNsb3NlQ3VycmVudFNlc3Npb24o KTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybiBv Ymo7PEJSPiZuYnNwO308QlI+LyoqPEJSPiZuYnNwOyogSGliZXJuYXRlIGxvb2t1cCB0byBnZXQg SUQgY29sdW1uLjxCUj4mbmJzcDsqIEBwYXJhbSBvIER0bwogdG8gbG9vayB1cC48QlI+Jm5ic3A7 KiBAcmV0dXJuIExvbmcgaWQuPEJSPiZuYnNwOyovPEJSPiZuYnNwO3ByaXZhdGUgTG9uZyBnZUhp YklkVmFsdWUoT2JqZWN0IG8pJm5ic3A7IHs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7IFNlc3Npb24gc2Vzc2lvbiA9IEhpYlV0aWwuZ2V0Q3VycmVudFNlc3Np b24oKTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVy biAoTG9uZykgc2Vzc2lvbi5nZXRJZGVudGlmaWVyKG8pOzxCUj4mbmJzcDt9PEJSPn0mbmJzcDs8 QlI+PEJSPjxCUj48QlI+PEJSPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fPEJSPnJ1bGVzLXVzZXJzIG1haWxpbmcgbGlzdDxCUj48QSBocmVmPSJtYWlsdG86 cnVsZXMtdXNlcnNAbGlzdHMuamJvc3Mub3JnIiByZWw9bm9mb2xsb3cgdGFyZ2V0PV9ibGFuayB5 bWFpbHRvPSJtYWlsdG86cnVsZXMtdXNlcnNAbGlzdHMuamJvc3Mub3JnIj5ydWxlcy11c2Vyc0Bs aXN0cy5qYm9zcy5vcmc8L0E+PEJSPjxBIGhyZWY9Imh0dHBzOi8vbGlzdHMuamJvc3Mub3JnL21h aWxtYW4vbGlzdGluZm8vcnVsZXMtdXNlcnMiIHJlbD1ub2ZvbGxvdyB0YXJnZXQ9X2JsYW5rPmh0 dHBzOi8vbGlzdHMuamJvc3Mub3JnL21haWxtYW4vbGlzdGluZm8vcnVsZXMtdXNlcnM8L0E+PEJS PjwvQkxPQ0tRVU9URT48L0RJVj48QlI+PEJSIGNsZWFyPWFsbD48QlI+LS0gPEJSPi0gaHR0cDov L3NhbGFib3kud29yZHByZXNzLmNvbTxCUj4tIGh0dHA6Ly93d3cuamJ1Zy5jb20uYXI8QlI+LSBT YWxhdGlubyAiU2FsYWJveSIgTWF1cmljaW8gLTxCUj48L0RJVj48L0RJVj48L2Rpdj48YnI+Cgog ICAgICA8L2JvZHk+PC9odG1sPg== --===============5937942219109576649==-- From salaboy at gmail.com Sat Oct 24 00:23:32 2009 Content-Type: multipart/mixed; boundary="===============4247699661080800850==" MIME-Version: 1.0 From: Mauricio Salatino To: rules-users at lists.jboss.org Subject: Re: [rules-users] [droolsflow] - one way to use Hibernate mapping with JPAVariablePersister Date: Fri, 23 Oct 2009 21:23:31 -0700 Message-ID: In-Reply-To: 463447.27253.qm@web45915.mail.sp1.yahoo.com --===============4247699661080800850== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable hmm I will take a look at it.. during the weekend.. 2009/10/23 Bill Tarr > 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 > *To:* Rules Users List > *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 wro= te: > >> 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.JPAPersistedVariabl= e; >> import >> org.drools.persistence.processinstance.variabletypes.VariableInstanceInf= o; >> 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 Kris Verlaene= n >> * @author salaboy >> */ >> public class JPAVariablePersisterHibernate implements VariablePersister { >> public VariableInstanceInfo persistExternalVariable(String name, Object >> o, >> VariableInstanceInfo oldValue, Environment env) { >> if(o =3D=3D null || (oldValue !=3D null && >> oldValue.getPersister().equals(""))){ >> return null; >> } >> try { >> JPAPersistedVariable result =3D null; >> if (oldValue instanceof JPAPersistedVariable) { >> result =3D (JPAPersistedVariable) oldValue; >> } >> if (result =3D=3D null) { >> result =3D new JPAPersistedVariable(); >> } >> Long idValue =3D 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) =3D=3D null || >> ((JPAPersistedVariable) variableInstanceInfo).getEntityId() =3D=3D null){ >> return null; >> } >> System.out.println("Restoring JPAPersistedVariable id=3D" + >> ((JPAPersistedVariable) variableInstanceInfo).getId() + " entityId=3D" + >> ((JPAPersistedVariable) variableInstanceInfo).getEntityId() + " class=3D= " + >> ((JPAPersistedVariable) variableInstanceInfo).getEntityClass() + " value= =3D" + >> ((JPAPersistedVariable) variableInstanceInfo).getEntity()); >> String varType =3D ((JPAPersistedVariable) >> variableInstanceInfo).getEntityClass(); >> >> Object obj =3D 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 =3D 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 > > -- = - http://salaboy.wordpress.com - http://www.jbug.com.ar - Salatino "Salaboy" Mauricio - --===============4247699661080800850== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" aG1tPGJyPkkgd2lsbCB0YWtlIGEgbG9vayBhdCBpdC4uIGR1cmluZyB0aGUgd2Vla2VuZC4uPGJy Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+MjAwOS8xMC8yMyBCaWxsIFRhcnIgPHNwYW4g ZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86amF2YXRlc3RjYXNlQHlhaG9vLmNvbSI+amF2 YXRlc3RjYXNlQHlhaG9vLmNvbTwvYT4mZ3Q7PC9zcGFuPjxicj48YmxvY2txdW90ZSBjbGFzcz0i Z21haWxfcXVvdGUiIHN0eWxlPSJib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYigyMDQsIDIwNCwg MjA0KTsgbWFyZ2luOiAwcHQgMHB0IDBwdCAwLjhleDsgcGFkZGluZy1sZWZ0OiAxZXg7Ij4KPGRp dj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTogYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7IGZv bnQtc2l6ZTogMTJwdDsiPjxkaXY+SSYjMzk7bSBub3Qgc3VyZSB0aGlzIHNob3VsZCBiZSBjb21p dHRlZCB0byB0aGUgdHJ1bmsuPC9kaXY+CjxkaXY+oDwvZGl2Pgo8ZGl2PlVzZXJzoGNhbiYjMzk7 dCB1c2UgdGhpcyBjb2RlIGFzIGlzLCBiZWNhdXNlOjwvZGl2Pgo8ZGl2PqA8L2Rpdj4KPGRpdj4x LiBNYW51YWwvQXV0b21hdGljIGZsdXNoIDwvZGl2Pgo8ZGl2PqCgIC0gdGhleSYjMzk7ZCBuZWVk IHRvIGltcGxlbWVudCBmbHVzaCgpIGFuZCBwZXJzaXN0KCkgaWYgdGhleSBoYXZlIG1hbnVhbCBm bHVzaCBzZXQgdXAuPC9kaXY+CjxkaXY+Mi4gSGliVXRpbCA8L2Rpdj4KPGRpdj6goCAtIGlzIGEg c3lzdGVtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIHVzZWQgdG8gbWFuYWdlIFNlc3Npb25GYWN0 b3J5IGFuZCBTZXNzaW9uczwvZGl2Pgo8ZGl2PqCgIC0gc3lzdGVtcyB1c2luZyBIaWJlcm5hdGUg d2lsbCBhbHJlYWR5IGhhdmUgc29tZSB2ZXJzaW9uIG9mIHRoaXMgdGhleSB3aWxsIG5lZWQgdG8g bGV2ZXJhZ2U8L2Rpdj4KPGRpdj6gPC9kaXY+CjxkaXY+c28gdGhpcyBpcyBtb3JlIG9mIGEgdGVt cGxhdGUuoCA8L2Rpdj4KPGRpdj6gPC9kaXY+CjxkaXY+SW4gZmFjdCwgaXQgd29uJiMzOTt0IGNv bXBpbGUgd2l0aG91dCBhIEhpYlV0aWwsIHNvIHRoYXQmIzM5O3MgYW5vdGhlciBwcm9ibGVtIGZv ciBhZGRpbmcgaXQgdG8gdGhlIHRydW5rLi4uPC9kaXY+CjxkaXY+oDwvZGl2Pgo8ZGl2PkEgdGVz dCBjYXNlIGluIGV4YW1wbGVzIHdvdWxkIGxldCB1cyBjcmVhdGUgYSBzaW1wbGUgSGliVXRpbCBh bmQgaGliZXJuYXRlLmNmZy54bWwuPC9kaXY+CjxkaXY+PGJyPlRoZSB0ZXN0IGNhc2UgY291bGQg Y3JlYXRlIGEgSDIgREIgYW5kIHRoZSB0YWJsZXMgbmVlZGVkLi4uPC9kaXY+CjxkaXY+oDwvZGl2 Pgo8ZGl2IHN0eWxlPSJmb250LWZhbWlseTogYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7IGZv bnQtc2l6ZTogMTJwdDsiPjxicj4KPGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IHRpbWVzIG5ldyBy b21hbixuZXcgeW9yayx0aW1lcyxzZXJpZjsgZm9udC1zaXplOiAxMnB0OyI+PGZvbnQgZmFjZT0i VGFob21hIiBzaXplPSIyIj4KPGhyIHNpemU9IjEiPgo8Yj48c3BhbiBzdHlsZT0iZm9udC13ZWln aHQ6IGJvbGQ7Ij5Gcm9tOjwvc3Bhbj48L2I+IE1hdXJpY2lvIFNhbGF0aW5vICZsdDs8YSBocmVm PSJtYWlsdG86c2FsYWJveUBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5zYWxhYm95QGdtYWls LmNvbTwvYT4mZ3Q7PGJyPjxiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPlRvOjwv c3Bhbj48L2I+IFJ1bGVzIFVzZXJzIExpc3QgJmx0OzxhIGhyZWY9Im1haWx0bzpydWxlcy11c2Vy c0BsaXN0cy5qYm9zcy5vcmciIHRhcmdldD0iX2JsYW5rIj5ydWxlcy11c2Vyc0BsaXN0cy5qYm9z cy5vcmc8L2E+Jmd0Ozxicj4KPGI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+U2Vu dDo8L3NwYW4+PC9iPiBGcmksIE9jdG9iZXIgMjMsIDIwMDkgNDoxODoxNiBQTTxicj48Yj48c3Bh biBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5TdWJqZWN0Ojwvc3Bhbj48L2I+IFJlOiBbcnVs ZXMtdXNlcnNdIFtkcm9vbHNmbG93XSAtIG9uZSB3YXkgdG8gdXNlIEhpYmVybmF0ZSBtYXBwaW5n IHdpdGggSlBBVmFyaWFibGVQZXJzaXN0ZXI8YnI+CjwvZm9udD48ZGl2PjxkaXY+PC9kaXY+PGRp diBjbGFzcz0iaDUiPjxicj5uaWNlLi4gZG8geW91IG1pbmQgaWYgSSBjb21taXQgaXQgdG8gdGhl IHRydW5rPzxicj5jYW4geW91IGNyZWF0ZSBzb21lIHVuaXQgdGVzdGluZyB0b28/PGJyPjxicj48 YnI+CjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj5PbiBGcmksIE9jdCAyMywgMjAwOSBhdCAzOjI3 IFBNLCBCaWxsIFRhcnIgPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86amF2YXRl c3RjYXNlQHlhaG9vLmNvbSIgcmVsPSJub2ZvbGxvdyIgdGFyZ2V0PSJfYmxhbmsiPmphdmF0ZXN0 Y2FzZUB5YWhvby5jb208L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPgo8YmxvY2txdW90ZSBzdHls ZT0iYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IoMjA0LCAyMDQsIDIwNCk7IG1hcmdpbjogMHB0 IDBwdCAwcHQgMC44ZXg7IHBhZGRpbmctbGVmdDogMWV4OyIgY2xhc3M9ImdtYWlsX3F1b3RlIj5I ZXJlIGlzIGFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIEpQQVZhcmlhYmxlUGVyc2lzdGVyIGZvciBw ZW9wbGUgd2hvIGFyZSBhbHJlYWR5IHVzaW5nIEhpYmVybmF0ZSB4bWygbWFwcGluZyBmaWxlcy6g PGJyPgo8YnI+VGhpcyBpbXBsZW1lbnRhdGlvbiBoYXMgc29tZSBkb3duc2lkZXMsIGJ1dCBpdCBz ZWVtcyB0byBiZSB3b3JraW5nIGZvciBub3cuPGJyPjxicj5JIGFtIGdvaW5nIHRvIGtlZXAgdXNp bmcgSlBBIHRvIG1hbmFnZSBhbGwgdGhlIERyb29scyBGbG93IHRhYmxlcy48YnI+PGJyPk15IGRv bWFpbiBvYmplY3QgcGVyc2lzdGVuY2Ugd2lsbCBiZSBtYW5hZ2VkIGJ5IEhpYmVybmF0ZSBTZXNz aW9uLqA8YnI+Cjxicj5XZSBhcmUgYWxzbyBjdXJyZW50bHkgdXNpbmcgYXV0b21hdGljIGZsdXNo IChzbyBubyBjb2RlIHRvIHBlcnNpc3QgZG9tYWluIG9iamVjdHMgaW4gdGhpcyBjbGFzcyk8YnI+ PGJyPk9idmlvdXNseSB5b3UgbmVlZCB0byB1c2UgeW91ciBvd24gdmVyc2lvbiBvZiBIaWJVdGls Ljxicj48YnI+aW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOzxicj5pbXBvcnQgamF2YS51 dGlsLmxvZ2dpbmcuTG9nZ2VyOzxicj4KaW1wb3J0IG9yZy5kcm9vbHMucGVyc2lzdGVuY2UucHJv Y2Vzc2luc3RhbmNlLnZhcmlhYmxldHlwZXMuSlBBUGVyc2lzdGVkVmFyaWFibGU7PGJyPmltcG9y dCBvcmcuZHJvb2xzLnBlcnNpc3RlbmNlLnByb2Nlc3NpbnN0YW5jZS52YXJpYWJsZXR5cGVzLlZh cmlhYmxlSW5zdGFuY2VJbmZvOzxicj5pbXBvcnQKIG9yZy5kcm9vbHMucGVyc2lzdGVuY2UucHJv Y2Vzc2luc3RhbmNlLnBlcnNpc3RlcnMuVmFyaWFibGVQZXJzaXN0ZXI7PGJyPmltcG9ydCBvcmcu ZHJvb2xzLnJ1bnRpbWUuRW52aXJvbm1lbnQ7PGJyPmltcG9ydCBvcmcuaGliZXJuYXRlLlNlc3Np b247PGJyPmltcG9ydCBIaWJVdGlsOzxicj4vKio8YnI+oCogVmFyaWF0aW9uIG9uIERyb29scyBK UEEgVmFyaWFibGUgUGVyc2lzdGVyLjxicj4KoCogb3JnLmRyb29scy5wZXJzaXN0ZW5jZS5wcm9j ZXNzaW5zdGFuY2UucGVyc2lzdGVycy5KUEFWYXJpYWJsZVBlcnNpc3Rlcjxicj6gKiBmb3IgdXNp bmcgdmFyaWFibGVzIHBlcnNpc3RlZCBieSBIaWJlcm5hdGUsIHdoaWxlIHN0aWxsIHVzaW5nIEpQ QSB0bzxicj6gKiBwZXJzaXN0IERyb29sc0Zsb3cgZGF0YS48YnI+oCo8YnI+oCogQGF1dGhvciAm bHQ7YSBocmVmPSZxdW90O21haWx0bzo8YSBocmVmPSJtYWlsdG86a3Jpc192ZXJsYWVuZW5AaG90 bWFpbC5jb20iIHJlbD0ibm9mb2xsb3ciIHRhcmdldD0iX2JsYW5rIj5rcmlzX3ZlcmxhZW5lbkBo b3RtYWlsLmNvbTwvYT4mcXVvdDsmZ3Q7S3JpcyBWZXJsYWVuZW4mbHQ7L2EmZ3Q7PGJyPgqgKiBA YXV0aG9yIHNhbGFib3k8YnI+oCovPGJyPnB1YmxpYyBjbGFzcyBKUEFWYXJpYWJsZVBlcnNpc3Rl ckhpYmVybmF0ZSBpbXBsZW1lbnRzIFZhcmlhYmxlUGVyc2lzdGVyIHs8YnI+oHB1YmxpYyBWYXJp YWJsZUluc3RhbmNlSW5mbyBwZXJzaXN0RXh0ZXJuYWxWYXJpYWJsZShTdHJpbmcgbmFtZSwgT2Jq ZWN0IG8sPGJyPqCgoFZhcmlhYmxlSW5zdGFuY2VJbmZvIG9sZFZhbHVlLCBFbnZpcm9ubWVudCBl bnYpCiB7PGJyPqCgoKCgoKCgoKCgoKCgoCBpZihvID09IG51bGwgfHwgKG9sZFZhbHVlICE9IG51 bGwgJmFtcDsmYW1wOyBvbGRWYWx1ZS5nZXRQZXJzaXN0ZXIoKS5lcXVhbHMoJnF1b3Q7JnF1b3Q7 KSkpezxicj6goKCgoKCgoKCgoKCgoKCgoKCgIHJldHVybiBudWxsOzxicj6goKCgoKCgoKCgoKCg oKAgfTxicj6goHRyeSB7PGJyPqCgoEpQQVBlcnNpc3RlZFZhcmlhYmxlIHJlc3VsdCA9IG51bGw7 PGJyPgqgoKBpZiAob2xkVmFsdWUgaW5zdGFuY2VvZiBKUEFQZXJzaXN0ZWRWYXJpYWJsZSkgezxi cj6goKCgcmVzdWx0ID0gKEpQQVBlcnNpc3RlZFZhcmlhYmxlKSBvbGRWYWx1ZTs8YnI+oKCgfTxi cj6goKBpZiAocmVzdWx0ID09IG51bGwpIHs8YnI+oKCgoHJlc3VsdCA9IG5ldyBKUEFQZXJzaXN0 ZWRWYXJpYWJsZSgpOzxicj6goKB9PGJyPqCgoExvbmcgaWRWYWx1ZSA9IGdlSGliSWRWYWx1ZShv KTs8YnI+CqCgoHJlc3VsdC5zZXRQZXJzaXN0ZXIodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSk7 PGJyPqCgoKCgoKCgoKCgCiByZXN1bHQuc2V0TmFtZShuYW1lKTs8YnI+oKCgcmVzdWx0LnNldEVu dGl0eUlkKGlkVmFsdWUpOzxicj6goKByZXN1bHQuc2V0RW50aXR5KG8pOzxicj6goKByZXN1bHQu c2V0RW50aXR5Q2xhc3Moby5nZXRDbGFzcygpLmdldENhbm9uaWNhbE5hbWUoKSk7PGJyPqCgoKCg oKCgoKCgIHJldHVybiByZXN1bHQ7PGJyPqCgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHs8YnI+oKCg TG9nZ2VyLmdldExvZ2dlcihKUEFWYXJpYWJsZVBlcnNpc3RlckhpYmVybmF0ZS5jbGFzcy5nZXRO YW1lKCkpPGJyPgqgoKCgLmxvZyhMZXZlbC5TRVZFUkUsIG51bGwsIHQpOzxicj6goKB0aHJvdyBu ZXcgUnVudGltZUV4Y2VwdGlvbigmcXVvdDtDb3VsZCBub3QgcGVyc2lzdCBleHRlcm5hbCB2YXJp YWJsZSZxdW90OywgdCk7PGJyPqCgfTxicj6gfTxicj6gcHVibGljIE9iamVjdCBnZXRFeHRlcm5h bFBlcnNpc3RlZFZhcmlhYmxlKDxicj6goKBWYXJpYWJsZUluc3RhbmNlSW5mbyB2YXJpYWJsZUlu c3RhbmNlSW5mbywgRW52aXJvbm1lbnQgZW52KSB7PGJyPgqgoKCgoKCgIGlmKCgoSlBBUGVyc2lz dGVkVmFyaWFibGUpIHZhcmlhYmxlSW5zdGFuY2VJbmZvKSA9PSBudWxsIHx8ICgoSlBBUGVyc2lz dGVkVmFyaWFibGUpIHZhcmlhYmxlSW5zdGFuY2VJbmZvKS5nZXRFbnRpdHlJZCgpID09IG51bGwp ezxicj6goKCgoKCgoKCgoCByZXR1cm4KIG51bGw7PGJyPqCgoKCgoKAgfTxicj6goKCgoKCgIFN5 c3RlbS5vdXQucHJpbnRsbigmcXVvdDtSZXN0b3JpbmcgSlBBUGVyc2lzdGVkVmFyaWFibGUgaWQ9 JnF1b3Q7ICsgKChKUEFQZXJzaXN0ZWRWYXJpYWJsZSkgdmFyaWFibGVJbnN0YW5jZUluZm8pLmdl dElkKCkgKyAmcXVvdDsgZW50aXR5SWQ9JnF1b3Q7ICsgKChKUEFQZXJzaXN0ZWRWYXJpYWJsZSkg dmFyaWFibGVJbnN0YW5jZUluZm8pLmdldEVudGl0eUlkKCkgKyAmcXVvdDsgY2xhc3M9JnF1b3Q7 ICsgKChKUEFQZXJzaXN0ZWRWYXJpYWJsZSkgdmFyaWFibGVJbnN0YW5jZUluZm8pLmdldEVudGl0 eUNsYXNzKCkgKyAmcXVvdDsgdmFsdWU9JnF1b3Q7ICsgKChKUEFQZXJzaXN0ZWRWYXJpYWJsZSkg dmFyaWFibGVJbnN0YW5jZUluZm8pLmdldEVudGl0eSgpKTs8YnI+CqCgU3RyaW5nIHZhclR5cGUg PSAoKEpQQVBlcnNpc3RlZFZhcmlhYmxlKSB2YXJpYWJsZUluc3RhbmNlSW5mbykuZ2V0RW50aXR5 Q2xhc3MoKTs8YnI+oKCgoKCgoDxicj6goKCgoKCgIE9iamVjdCBvYmogPSBIaWJVdGlsLmdldEN1 cnJlbnRTZXNzaW9uKCkuZ2V0KHZhclR5cGUsICgoSlBBUGVyc2lzdGVkVmFyaWFibGUpIHZhcmlh YmxlSW5zdGFuY2VJbmZvKS5nZXRFbnRpdHlJZCgpKTs8YnI+CqCgoKCgoKAgSGliVXRpbC5jbG9z ZUN1cnJlbnRTZXNzaW9uKCk7PGJyPqCgoKCgoKAgcmV0dXJuIG9iajs8YnI+oH08YnI+LyoqPGJy PqAqIEhpYmVybmF0ZSBsb29rdXAgdG8gZ2V0IElEIGNvbHVtbi48YnI+oCogQHBhcmFtIG8gRHRv CiB0byBsb29rIHVwLjxicj6gKiBAcmV0dXJuIExvbmcgaWQuPGJyPqAqLzxicj6gcHJpdmF0ZSBM b25nIGdlSGliSWRWYWx1ZShPYmplY3QgbymgIHs8YnI+oKCgoKCgoCBTZXNzaW9uIHNlc3Npb24g PSBIaWJVdGlsLmdldEN1cnJlbnRTZXNzaW9uKCk7PGJyPqCgoKCgoKAgcmV0dXJuIChMb25nKSBz ZXNzaW9uLmdldElkZW50aWZpZXIobyk7PGJyPqB9PGJyPn2gPGJyPjxicj48YnI+PGJyPgo8YnI+ X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+cnVsZXMt dXNlcnMgbWFpbGluZyBsaXN0PGJyPjxhIGhyZWY9Im1haWx0bzpydWxlcy11c2Vyc0BsaXN0cy5q Ym9zcy5vcmciIHJlbD0ibm9mb2xsb3ciIHRhcmdldD0iX2JsYW5rIj5ydWxlcy11c2Vyc0BsaXN0 cy5qYm9zcy5vcmc8L2E+PGJyPjxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuamJvc3Mub3JnL21haWxt YW4vbGlzdGluZm8vcnVsZXMtdXNlcnMiIHJlbD0ibm9mb2xsb3ciIHRhcmdldD0iX2JsYW5rIj5o dHRwczovL2xpc3RzLmpib3NzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3J1bGVzLXVzZXJzPC9hPjxi cj4KPC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48YnIgY2xlYXI9ImFsbCI+PGJyPi0tIDxicj4tIDxh IGhyZWY9Imh0dHA6Ly9zYWxhYm95LndvcmRwcmVzcy5jb20iIHRhcmdldD0iX2JsYW5rIj5odHRw Oi8vc2FsYWJveS53b3JkcHJlc3MuY29tPC9hPjxicj4tIDxhIGhyZWY9Imh0dHA6Ly93d3cuamJ1 Zy5jb20uYXIiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmpidWcuY29tLmFyPC9hPjxicj4K LSBTYWxhdGlubyAmcXVvdDtTYWxhYm95JnF1b3Q7IE1hdXJpY2lvIC08YnI+PC9kaXY+PC9kaXY+ PC9kaXY+PC9kaXY+PC9kaXY+PGJyPgoKICAgICAgPC9kaXY+PGJyPl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPgpydWxlcy11c2VycyBtYWlsaW5nIGxp c3Q8YnI+CjxhIGhyZWY9Im1haWx0bzpydWxlcy11c2Vyc0BsaXN0cy5qYm9zcy5vcmciPnJ1bGVz LXVzZXJzQGxpc3RzLmpib3NzLm9yZzwvYT48YnI+CjxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuamJv c3Mub3JnL21haWxtYW4vbGlzdGluZm8vcnVsZXMtdXNlcnMiIHRhcmdldD0iX2JsYW5rIj5odHRw czovL2xpc3RzLmpib3NzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3J1bGVzLXVzZXJzPC9hPjxicj4K PGJyPjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PGJyIGNsZWFyPSJhbGwiPjxicj4tLSA8YnI+IC0g PGEgaHJlZj0iaHR0cDovL3NhbGFib3kud29yZHByZXNzLmNvbSI+aHR0cDovL3NhbGFib3kud29y ZHByZXNzLmNvbTwvYT48YnI+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5qYnVnLmNvbS5hciI+aHR0 cDovL3d3dy5qYnVnLmNvbS5hcjwvYT48YnI+IC0gU2FsYXRpbm8gJnF1b3Q7U2FsYWJveSZxdW90 OyBNYXVyaWNpbyAtPGJyPgoK --===============4247699661080800850==--