I'd be interested in your code, and would love to come up with a *recommended* way to implement Hibernate in webapps.
However, I prefer to keep any database connections out of my web tier. Since I only use them in my dao's that's where I prefer to use them. I also am using a Business Delegate to talk from my Web Tier to my DAOs. I like this b/c it makes it easy to test each different layer with JUnit and I feel like I'm following recommended patterns. I don't like this because it feels like it takes forever to implement a new table to talk to. A big reason for implementing business delegates and dao's is to allow for re-usability, but most of the projects I've been on only ever talk to the DB through the web. Here's to hoping my "patterns" payoff someday. That being said, I modified my HibernateSession object to allow for both JNDI and JUnit type testing. Please let me know if you see any issues in my implementation. Thanks, Matt > Hi Matt, > > From your example code that you posted, it doesn't seem like you were > ever closing the sessions you opened. Is this true, or are you perhaps > doing it somewhere else in your code? > > The way that I handle Hibernate sessions in all of my applications is > to use a ServletFilter that opens a Hibernate session at the beginning > of the request, and then closes the Hibernate session at the end of the > request. It makes everything so much cleaner if you can just assume > that that Hibernate session will be there for you whenever you need it, > and that it will be closed when you are done using it. > > If you want, I can send you a code snippet. Just let me know... > > I don't know if you have the same situation that I have, but for half > of my requests, I don't actually need the Hibernate session, so I > recently enhanced my ServletFilter to actually create a Proxy object > that looks like a Hibernate session. If and when my application tries > to call a method on the Proxy object, then the Proxy object initialized > the session, and away we go, otherwise we never actually waste the > effort of opening a database connection. > > I would think that a combination of my ServletFilter approach and your > current ThreadLocal approach would take care of all of your problems. > > Regards, > Jon... > > Let me know if you want to > On Thursday, January 2, 2003, at 09:01 PM, Matt Raible wrote: > > > I *think* I fixed this problem by implementing a Connection Pool in > > Tomcat and > > configuring Hibernate with a HibernationSession (using ThreadLocal) and > > talking to Oracle using that method. Seems to only open one > > connection now. > > > > Thanks, > > > > Matt > > > >> I'm getting the following error when using Hibernate as my persistence > >> layer: > >> > >> java.sql.SQLException: ORA-02391: exceeded simultaneous > >> SESSIONS_PER_USER > >> limit ORA-02063: preceding line from NAS_AC_72 > >> ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit ORA-02063: > >> preceding line from NAS_AC_72 > >> > >> Could this be caused by Hibernate? I'm hoping not, but I don't know > >> enough > >> about it to argue with the DBA that Hibernate (and my code) is not the > >> problem. Here's is a sample class I'm using to connect: > >> > >> public class ChangeRequestDAOHibernate extends BaseDAOHibernate > >> implements > >> ChangeRequestDAO { > >> private static SessionFactory sessionFactory; > >> private static Datastore datastore; > >> private Log log = > >> LogFactory.getLog(ChangeRequestDAOHibernate.class); > >> > >> public ChangeRequestDAOHibernate() throws DAOException { > >> try { > >> datastore = Hibernate.createDatastore(); > >> > >> datastore.storeClass(com.cable.comcast.dmc.itd.cct.persistence.ChangeR > >> equest > >> .class); > >> > >> // build a SessionFactory > >> sessionFactory = datastore.buildSessionFactory(); > >> } catch (MappingException e) { > >> throw new DAOException(e); > >> } catch (HibernateException e) { > >> throw new DAOException(e); > >> } > >> } > >> /** > >> * @see > >> com.cable.comcast.dmc.itd.cct.persistence.ChangeRequestDAO#getHeadends > >> (MSO) > >> */ > >> public List getHeadendsForMSO(MSO mso) throws DAOException { > >> Session ses = null; > >> List headendList = null; > >> > >> try { > >> ses = sessionFactory.openSession(); > >> > >> List changeRequests = > >> (List) ses.find("from cr in class > >> com.cable.comcast.dmc.itd.cct.persistence.ChangeRequest where > >> cr.msoId=?", > >> mso.getId(), > >> Hibernate.LONG); > >> > >> if ((changeRequests == null) || > >> (changeRequests.size() == 0)) { > >> log.warn("No headends found for msoId: " + > >> mso.getId()); > >> return new ArrayList(); > >> } > >> > >> // if results are found, look up the headend names > >> and build a list of headend objects > >> LookupDAO lookupDAO = new LookupDAOHibernate(); > >> List headendIds = new ArrayList(); > >> > >> // loop though the change requests and build a list > >> of headends > >> for (int i=0; i < changeRequests.size(); i++) { > >> ChangeRequest cr = (ChangeRequest) > >> changeRequests.get(i); > >> Headend h = new Headend(); > >> h.setId(cr.getHeadendId()); > >> headendIds.add(h); > >> } > >> > >> headendList = lookupDAO.getHeadendNames(headendIds); > >> > >> } catch (Exception e) { > >> try { > >> ses.connection().rollback(); > >> } catch (Exception ex) { > >> e.printStackTrace(); > >> } > >> > >> throw new DAOException(e); > >> } finally { > >> try { > >> ses.close(); > >> } catch (Exception ex) { > >> ex.printStackTrace(); > >> } > >> } > >> > >> return headendList; > >> > >> } > >> > >> } > >> > >> ------------------------------------------------------- > >> This sf.net email is sponsored by:ThinkGeek > >> Welcome to geek heaven. > >> http://thinkgeek.com/sf > >> _______________________________________________ > >> hibernate-devel mailing list > >> [EMAIL PROTECTED] > >> https://lists.sourceforge.net/lists/listinfo/hibernate-devel > > > > > > > > -- Matt Raible, Raible Designs, Morrison CO US > > -- Tel: +1 303 979-5340 > > -- Mob: +1 720 560-8460 > > -- Fax: +1 508 256-6471 > > -- Web: http://www.raibledesigns.com > > > > > > ------------------------------------------------------- > > This sf.net email is sponsored by:ThinkGeek > > Welcome to geek heaven. > > http://thinkgeek.com/sf > > _______________________________________________ > > hibernate-devel mailing list > > [EMAIL PROTECTED] > > https://lists.sourceforge.net/lists/listinfo/hibernate-devel -- Matt Raible, Raible Designs, Morrison CO US -- Tel: +1 303 979-5340 -- Mob: +1 720 560-8460 -- Fax: +1 508 256-6471 -- Web: http://www.raibledesigns.com
HibernateSession.java
Description: Binary data