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