You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by ep...@apache.org on 2003/06/27 16:27:22 UTC

cvs commit: jakarta-turbine-2/proposals/epugh/hibernate readme.txt

epugh       2003/06/27 07:27:22

  Added:       proposals/epugh/hibernate/org/apache/turbine/util/hibernate
                        PersistenceException.java HibernateFilter.java
                        HibernateUtils.java
               proposals/epugh/hibernate readme.txt
  Log:
  Adding proposal to integrate Hibernate support files more closely into
  Turbine.
  
  Revision  Changes    Path
  1.1                  jakarta-turbine-2/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/PersistenceException.java
  
  Index: PersistenceException.java
  ===================================================================
  package org.apache.turbine.util.hibernate;
  
  import org.apache.commons.lang.exception.NestableException;
  /**
   * A general PersistenceException that can be thrown by 
   * Hibernate DAO classes.
   *
   */
  public class PersistenceException extends NestableException
  {
      //~ Constructors ===========================================================
  
      /**
       * Constructor for PersistenceException.
       */
      public PersistenceException()
      {
          super();
      }
  
      /**
       * Constructor for PersistenceException.
       *
       * @param message
       */
      public PersistenceException(String message)
      {
          super(message);
      }
  
      /**
       * Constructor for PersistenceException.
       *
       * @param message
       * @param cause
       */
      public PersistenceException(String message, Throwable cause)
      {
          super(message, cause);
      }
  
      /**
       * Constructor for PersistenceException.
       *
       * @param cause
       */
      public PersistenceException(Throwable cause)
      {
          super(cause);
      }
  
  }
  
  
  
  1.1                  jakarta-turbine-2/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/HibernateFilter.java
  
  Index: HibernateFilter.java
  ===================================================================
  package org.apache.turbine.util.hibernate;
  
  import java.io.IOException;
  
  import javax.servlet.Filter;
  import javax.servlet.FilterChain;
  import javax.servlet.FilterConfig;
  import javax.servlet.ServletException;
  import javax.servlet.ServletRequest;
  import javax.servlet.ServletResponse;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  
  import net.sf.hibernate.Session;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
  
  
  
  public class HibernateFilter implements Filter
  {
      //~ Static fields/initializers =============================================
  
      //~ Instance fields ========================================================
  
      /**
       * The <code>Log</code> instance for this class
       */
      private Log log = LogFactory.getLog(HibernateFilter.class);
      private FilterConfig filterConfig = null;
  
      //~ Methods ================================================================
  
      public void init(FilterConfig filterConfig) throws ServletException
      {
          this.filterConfig = filterConfig;
  
      }
  
      /**
       * Destroys the filter.
       */
      public void destroy()
      {
          filterConfig = null;
      }
  
      public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException
      {
          // cast to the types I want to use
          HttpServletRequest request = (HttpServletRequest) req;
          HttpServletResponse response = (HttpServletResponse) resp;
          HttpSession session = request.getSession(true);
  
          Session ses = null;
          boolean sessionCreated = false;
  
          try
          {
              chain.doFilter(request, response);
          }
          finally
          {
              try
              {
                  HibernateUtils.closeSession();
              }
              catch (Exception exc)
              {
                  log.error("Error closing hibernate session.", exc);
                  exc.printStackTrace();
              }
          }
      }
  
      public static Session getSession() throws PersistenceException
      {
          try
          {
  
              return HibernateUtils.currentSession();
          }
          catch (Exception e)
          {
              throw new PersistenceException("Could not find current Hibernate session.", e);
          }
  
      }
  }
  
  
  
  1.1                  jakarta-turbine-2/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/HibernateUtils.java
  
  Index: HibernateUtils.java
  ===================================================================
  package org.apache.turbine.util.hibernate;
  
  import net.sf.hibernate.HibernateException;
  import net.sf.hibernate.JDBCException;
  import net.sf.hibernate.Session;
  import net.sf.hibernate.SessionFactory;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
  /**
   * This class is used to get Hibernate Sessions and may
   * also contain methods (in the future) to get DBConnections
   * or Transactions from JNDI.
   */
  public class HibernateUtils
  {
      //~ Static fields/initializers =============================================
      public final static String SESSION_FACTORY = "hibernate/sessionFactory";
      public static final ThreadLocal session = new ThreadLocal();
      private static SessionFactory sf = null;
      private static HibernateUtils me;
      private static Log log = LogFactory.getLog(HibernateUtils.class);
  
      static {
          try
          {
              me = new HibernateUtils();
          }
          catch (Exception e)
          {
              log.fatal("Error occurred initializing HibernateUtils");
              e.printStackTrace();
          }
      }
  
      //~ Constructors ===========================================================
  
      private HibernateUtils() throws HibernateException, JDBCException
      {}
  
      //~ Methods ================================================================
  
      public static Session currentSession() throws PersistenceException
      {
          Session s = (Session) session.get();
  
          if (s == null)
          {
              s = PersistenceManager.openSession();
              if (log.isDebugEnabled())
              {
                  log.debug("Opened hibernate session.");
              }
  
              session.set(s);
          }
  
          return s;
      }
  
      public static void closeSession() throws HibernateException, JDBCException
      {
          Session s = (Session) session.get();
          session.set(null);
  
          if (s != null)
          {
              if (s.isOpen())
              {
                  s.flush();
                  s.close();
  
                  if (log.isDebugEnabled())
                  {
                      log.debug("Closed hibernate session.");
                  }
              }
          }
          else
          {
              log.warn("Hibernate session was inadvertently already closed.");
  
          }
      }
  }
  
  
  
  1.1                  jakarta-turbine-2/proposals/epugh/hibernate/readme.txt
  
  Index: readme.txt
  ===================================================================
  To use this code, you need to add this section to your project.xml dependencies.  Note, you may have some
  already!
  
  <dependency>
        <id>avalon-framework</id>
        <version>4.1.4</version>
        <url>http://jakarta.apache.org/avalon</url>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>      
      </dependency>
      <dependency>
        <id>excalibur-collections</id>
        <version>1.0</version>
        <url>http://jakarta.apache.org/avalon</url>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>          
      </dependency>
      <dependency>
        <id>excalibur-component</id>
        <version>1.1</version>
        <url>http://jakarta.apache.org/avalon</url>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>          
      </dependency>
      <dependency>
        <id>excalibur-instrument</id>
        <version>1.0</version>
        <url>http://jakarta.apache.org/avalon</url>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>          
      </dependency>
      <dependency>
        <id>excalibur-logger</id>
        <version>1.0.1</version>
        <url>http://jakarta.apache.org/avalon</url>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>          
      </dependency>
      <dependency>
        <id>excalibur-pool</id>
        <version>1.2</version>
        <url>http://jakarta.apache.org/avalon</url>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>          
      </dependency>    
    <dependency>
        <id>log4j</id>
        <version>1.2.7</version>
        <url>http://jakarta.apache.org/log4j/</url>
        <properties>
          <war.bundle.jar>true</war.bundle.jar>
        </properties>
      </dependency>
      <dependency>
        <id>logkit</id>
        <version>1.0.1</version>
        <url>http://jakarta.apache.org/avalon/logkit/</url>
        <properties>
          <war.bundle.jar>true</war.bundle.jar>
        </properties>
      </dependency>
      <!--
      <dependency>
        <id>fulcrum</id>      
        <version>SNAPSHOT</version>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>
      </dependency>              
      -->
      <dependency>
        <id>hibernate</id>      
        <version>2.0-final</version>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>
      </dependency>  
  
      <dependency>
        <id>hibernate:hibernate-avalon</id>
        <version>0.1</version>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>              
      </dependency>                
      <dependency>
        <id>odmg</id>      
        <version>3.0</version>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>
      </dependency>                  
      <dependency>
        <id>bcel</id>      
        <version>5.0</version>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>
      </dependency>                      
      <dependency>
        <id>dom4j</id>      
        <version>1.4</version>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>
      </dependency>       
      <dependency>
        <id>cglib</id>      
        <version>1.0</version>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>
      </dependency>                          
      <dependency>
        <id>jcs</id>      
        <version>1.0-dev</version>
        <properties>        
        <war.bundle.jar>true</war.bundle.jar>
        </properties>
      </dependency>     
  
  
  
  You will also need to add this to your web.xml:
  
      <filter>
          <filter-name>Hibernate Session Filter</filter-name>
          <filter-class>org.apache.turbine.util.hibernate.HibernateFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>Hibernate Session Filter</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>
  
  
  Thanks, Eric (epugh@upstate.com)
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org