Hmmm very cool.

Hiram are there any ways in which Hibernate could support / integrate better
with this framework?

----- Original Message -----
From: "Hiram Chirino" <[EMAIL PROTECTED]>
To: "Urberg, John" <[EMAIL PROTECTED]>; "'Jozsa Kristof'"
<[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Saturday, November 16, 2002 3:49 PM
Subject: RE: [Hibernate] Using hibernate - best practices


> First time post... I like hibernate.  I want to use it more with the
Aspect
> Framework that I'm build for JBoss.  Anyways, here is a way a Jboss aspect
> could help simplify things:
>
> You would use an interceptor that had an invoke method that looked
something
> like:
>
> class HibernateInterceptor {
> ...
> public Object invoke(AspectInvocation invocation) throws Throwable {
>
> HibernateContext oldHC = getHibernateContext();
> HibernateContext hc = null;
> if( oldHC==null || oldHC.sessionFactory != sessionFactory ) {
> hc = new HibernateContext();
> hc.sessionFactory = sessionFactory;
> hc.session = sessionFactory.openSession();
> hc.transaction = hc.session.beginTransaction();
> setHibernateContext(hc);
> }
>
> try {
>
> Object rc = invocation.invokeNext();
>
> if( hc != null )
>     hc.transaction.commit();
>
> return rc;
>
> } catch ( Throwable e ) {
> if( hc != null )
>     hc.transaction.rollback();
>     throw e;
> } finally {
> if( hc != null )
>     hc.session.close();
>
> setHibernateContext(oldHC);
> }
> }
> ..
> }
>
> class RuleListAction implemetns IRuleListAction {
> ..
> public String doDelete() throws Exception {
> Session session= HibernateInterceptor.getSession();
> RuleList mo = (RuleList) session.load( RuleList.class, id );
> session.delete(mo);
> return SUCCESS;
> }
> ..
> }
>
> so that if you have DynamicProxy x with the HibernateInterceptor in the
> invocation chain
> then you could just do a:
>
> IRuleListAction x = (IRuleListAction )AspectFactory(new RuleListAction());
> x.doDelete()
>
> Regards,
> Hiram
>
>
>
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED] Behalf Of Urberg,
> > John
> > Sent: Friday, November 15, 2002 8:30 AM
> > To: 'Jozsa Kristof'
> > Cc: [EMAIL PROTECTED]
> > Subject: RE: [Hibernate] Using hibernate - best practices
> >
> >
> > >> The InvoiceRepository would be implemented like this:
> > >> [code to load invoices]
> >
> > > And where do you close those opened sessions using this design? Also,
> > where
> > > did you find a place to implement transaction handling,
> > including joining
> > > into existing transactions if possible?
> >
> > That's the responsibility of the database object.  Code will usually
look
> > something like this:
> >
> >    SomeRepository someRepository = database.getRepository(...);
> >    AnotherRepository anotherRepository = database.getRepository(...);
> >    database.startTrans();
> >    try {
> >       someRepository.update(object);
> >       anotherRepository.update(object);
> >       database.commit();
> >    } catch (Exception e) {
> >       database.rollback();
> >    }
> >
> > All the code for dealing with sessions and transactions is safely tucked
> > away in the database implementation.
> >
> > > These piece of codes are repeating in almost ALL of the Service
classes'
> > > business methods, are just flooding all the logic badly :(
> >
> > I'm not sure how you get around the whole transaction thing
> > unless you're in
> > a J2EE server that does that automatically.  If you want to get rid of
the
> > boilerplate code, you could do something like this:
> >
> >   public class Database {
> >     <...>
> >     public void inTransactionDo(Runnable doRun) {
> >       Session session = null;
> >       Transaction tx = null;
> >       try {
> >   session = Hibernator.getSession();
> >   tx = session.beginTransaction();
> >         doRun.run();
> >   tx.commit();
> >       } catch (Exception e) {
> >   logger.error (<blah/>), e);
> >   tx.rollback();
> >       } finally {
> >    if (session != null) session.close();
> >      }
> >      <...>
> >   }
> >
> > Then your business methods would look like this:
> >
> >   database.inTransactionDo(new Runnable() {
> >     public void run() {
> >      <...business logic here...>
> >     }
> >   }
> >
> > Regards,
> > John Urberg
> >
> >
> > -------------------------------------------------------
> > This sf.net email is sponsored by: To learn the basics of securing
> > your web site with SSL, click here to get a FREE TRIAL of a Thawte
> > Server Certificate: http://www.gothawte.com/rd524.html
> > _______________________________________________
> > hibernate-devel mailing list
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/hibernate-devel
>
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by: To learn the basics of securing
> your web site with SSL, click here to get a FREE TRIAL of a Thawte
> Server Certificate: http://www.gothawte.com/rd524.html
> _______________________________________________
> hibernate-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/hibernate-devel



-------------------------------------------------------
This sf.net email is sponsored by: To learn the basics of securing 
your web site with SSL, click here to get a FREE TRIAL of a Thawte 
Server Certificate: http://www.gothawte.com/rd524.html
_______________________________________________
hibernate-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/hibernate-devel

Reply via email to