I'm wondering if there's any problem with the following modifications to
Jeff's Filter. The code below uses the HibernateSession object to obtain a
session in a Filter. Seems to work pretty well for me. If there are any
glaring problems, please let me know. If there aren't any issues with using
this *very* simple filter, I'll add it to the wiki.
Thanks,
Matt
package org.infohazard.pig.servlet;
import java.io.*;
import javax.servlet.*;
import javax.naming.*;
import net.sf.hibernate.*;
/**
* Filter which uses an existing HibernateSession Thread Local class to
* obtain a session. Obtain the session in a servlet by calling
* Persistance.getSession().
*/
public class Persistence implements Filter
{
/**
*/
public void init(FilterConfig filterConfig) throws ServletException
{
// nothing needed here
}
/**
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
try
{
chain.doFilter(request, response);
}
finally
{
try
{
HibernateSession.closeSession();
}
catch (HibernateException ex) { throw new ServletException(ex);
}
}
}
}
/**
* ONLY ever call this method from within the context of a servlet
request
* (specifically, one that has been associated with this filter). If
you
* want a Hibernate session at some other time, call getSessionFactory()
* and open/close the session yourself.
*
* @return an appropriate Session object
*/
public static Session getSession() throws HibernateException
{
return HibernateSession.currentSession();
}
/**
*/
public void destroy()
{
// Nothing necessary
}
}
> -----Original Message-----
> From: Schnitzer, Jeff [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, January 29, 2003 1:49 PM
> To: [EMAIL PROTECTED]
> Subject: RE: [Hibernate] Obtaining session in a filter
>
>
> > From: Raible, Matt [mailto:[EMAIL PROTECTED]
> >
> > BTW - your filter complains about setting a static variable
> > from a non-static context: this.factory =
> > (SessionFactory)ctx.lookup(factoryJndiName);
>
> Right - that's deliberate. You don't want to create a new
> InitialContext and perform a JNDI lookup for the factory
> every time you
> obtain a new session. It is potentially an expensive
> operation. init()
> is a great place to do it.
>
> Alternatively you could cache the factory in a static the
> first time you
> obtain it. However, that would technically require synchronization to
> be thread-safe.
>
> Jeff
>
>
> -------------------------------------------------------
> This SF.NET email is sponsored by:
> SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
> http://www.vasoftware.com
> _______________________________________________
> hibernate-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/hibernate-devel
>
-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
hibernate-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/hibernate-devel