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