take a look at nanning, it looks really nice too
http://nanning.sf.net

I'll make some experiments with it as soon as i find time, and try to
ontegrate hibernate into it.

peace
 chris

----- Original Message -----
From: "Gavin King" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Saturday, November 16, 2002 3:11 PM
Subject: Re: [Hibernate] Using hibernate - best practices


> 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
>



-------------------------------------------------------
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