zhyiwww
用平实的笔,记录编程路上的点点滴滴………
posts - 536,comments - 394,trackbacks - 0

HibernatePlugIn for Struts

To configure Hibernate in a Jakarta-Struts application:

1. Create your struts-config.xml file.

2. Add the following configuration for the plugin:

<plug-in className="edu.arbor.util.plugin.HibernatePlugIn">

  <!-- 'path-to-config-file' is relative to the root of the class

       path.  It MUST start with a '/'. The default is

       "/hibernate.cfg.xml" -->

  <set-property property="configFilePath" value="path-to-config-file" />

  <set-property property="storeInServletContext" value="true-or-false" />

</plug-in>

 

3. Copy the code into a source file and compile.

package edu.arbor.util.plugin;

 

import java.net.URL;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import net.sf.hibernate.SessionFactory;

import net.sf.hibernate.cfg.Configuration;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.struts.action.ActionServlet;

import org.apache.struts.action.PlugIn;

import org.apache.struts.config.ModuleConfig;

 

/**

 * Implements the <code>PlugIn</code> interface to configure the Hibernate

 * data persistence library.  A configured

 * <code>net.sf.hibernate.SessionFactory</code> is stored in the

 * <code>ServletContext</code> of the web application unless the property

 * <code>storedInServletContext</code> is set to <code>false</code>.

 *

 * <plugin class="net.sf.hibernate.plugins.struts.HibernatePlugIn">

 *   <set-property name="configFilePath"

 *                 value="path-to-config-file"/>

 *   <set-property name="storedInServletContext&quot"

 *                value="true-or-false"/>

 * </plugin>

 *

 * @author  <a href="mailto:bhandy@users.sf.net">Bradley M. Handy</a>

 * @version 1.0

 */

public class HibernatePlugIn implements PlugIn {

   

    /**

     * the key under which the <code>SessionFactory</code> instance is stored

     * in the <code>ServletContext</code>.

     */

    public static final String SESSION_FACTORY_KEY

            = SessionFactory.class.getName();

 

    private static Log _log = LogFactory.getLog(HibernatePlugIn.class);

   

    /**

     * indicates whether the <code>SessionFactory</code> instance will be stored

     * in the <code>ServletContext</code>, or not.

     */

    private boolean _storedInServletContext = true;

   

    /**

     * the path to the xml configuration file.  the path should start with a

     * '/' character and be relative to the root of the class path.

     * (DEFAULT:  "/hibernate.cfg.xml")

     */

    private String _configFilePath = "/hibernate.cfg.xml";

 

    private ActionServlet _servlet = null;

    private ModuleConfig _config = null;

    private SessionFactory _factory = null;

 

    /**

     * Destroys the <code>SessionFactory</code> instance.

     */

    public void destroy() {

        _servlet = null;

        _config = null;

       

        try {

            _log.debug("Destroying SessionFactory...");

           

            _factory.close();

           

            _log.debug("SessionFactory destroyed...");

        } catch (Exception e) {

            _log.error("Unable to destroy SessionFactory...(exception ignored)",

                    e);

        }

    }

   

    /**

     * Initializes the <code>SessionFactory</code>.

     * @param servlet the <code>ActionServlet</code> instance under which the

     *        plugin will run.

     * @param config the <code>ModuleConfig</code> for the module under which

     *        the plugin will run.

     */

    public void init(ActionServlet servlet, ModuleConfig config)

    throws ServletException {

        _servlet = servlet;

        _config = config;

       

        initHibernate();

    }

   

    /**

     * Initializes Hibernate with the config file found at

     * <code>configFilePath</code>.

     */

    private void initHibernate() throws ServletException {

        Configuration configuration = null;

        URL configFileURL = null;

        ServletContext context = null;

       

        try {

            configFileURL = HibernatePlugIn.class.getResource(_configFilePath);

 

            context = _servlet.getServletContext();

 

            if (_log.isDebugEnabled()) {

                _log.debug("Initializing Hibernate from "

                        + _configFilePath + "...");

            }

           

            configuration = (new Configuration()).configure(configFileURL);

            _factory = configuration.buildSessionFactory();

           

            if (_storedInServletContext) {

                _log.debug("Storing SessionFactory in ServletContext...");

                

                context.setAttribute(SESSION_FACTORY_KEY, _factory);

            }

          

        } catch (Throwable t) {

            _log.error("Exception while initializing Hibernate.");

            _log.error("Rethrowing exception...", t);

           

            throw (new ServletException(t));

        }

    }

   

    /**

     * Setter for property configFilePath.

     * @param configFilePath New value of property configFilePath.

     */

    public void setConfigFilePath(String configFilePath) {

        if ((configFilePath == null) || (configFilePath.trim().length() == 0)) {

            throw new IllegalArgumentException(

                    "configFilePath cannot be blank or null.");

        }

       

        if (_log.isDebugEnabled()) {

            _log.debug("Setting 'configFilePath' to '"

                    + configFilePath + "'...");

        }

       

        _configFilePath = configFilePath;

    }

   

    /**

     * Setter for property storedInServletContext.

     * @param storedInServletContext New value of property storedInServletContext.

     */

    public void setStoredInServletContext(String storedInServletContext) {

        if ((storedInServletContext == null)

                || (storedInServletContext.trim().length() == 0)) {

            storedInServletContext = "false";

        }

       

        if (_log.isDebugEnabled()) {

            _log.debug("Setting 'storedInServletContext' to '"

                    + storedInServletContext + "'...");

        }

       

        _storedInServletContext

                = new Boolean(storedInServletContext).booleanValue();

    }

   

}

 

 

A Usage example would be excellent!

08 Sep 2003, 16:07

themax

A usage example would be excellent!

 

Some more meat in the bones. Configruing hibernate with struts

26 Nov 2003, 14:12

mark.lowe

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

        "-//Hibernate/Hibernate Configuration DTD 2.0//EN"

              "http://hibernate.sourceforge.net/hibernate-configuration

-2.0.dtd">

 

<hibernate-configuration>

 

    <!-- a SessionFactory instance listed as /jndi/name -->

   <session-factory name="foo:/hibernate/SessionFactory">

        <!-- properties -->

        <property

name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>

        <property name="connection.username">brian</property>

        <property name="connection.password">arses</property>

        <property name="connection.url">jdbc:mysql://localhost:3306/

mydata</property>

        <property

name="connection.driver_class">com.mysql.jdbc.Driver</property>

        <property name="show_sql">true</property>

        <property name="use_outer_join">true</property>

        <property

name="transaction.factory_class">net.sf.hibernate.transaction.JDBCTra

nsactionFactory</property>

        <property name="dbcp.minIdle">1</property>

        <property name="cache.use_query_cache">true</property>

             

        <!-- mapping files -->

        <mapping resource="com/sparrow/om/Arse.hbm.xml"/>

 

    </session-factory>

 

</hibernate-configuration>

 

 

and in struts config..

 

       <plug-in className="edu.arbor.util.plugin.HibernatePlugIn">

              <set-property property="storedInServletContext" value="true"/>

       </plug-in>

 

..

in struts action

..

Context ctx = new InitialContext();

SessionFactory sf = (SessionFactory) ctx.lookup("foo:/hibernate/

SessionFactory");

hibSession = sf.openSession();

 

Query query = hibSession.createQuery("from com.sparrow.om.Arse");

Iterator it = query.iterate();

                    

while(it.hasNext()) {

              Arse arse = (Arse) it.next();

              arseList.add(arse);

}

                    

request.setAttribute("arses", arseList.toArray());

 

..

 

Tomcat notes

23 Aug 2004, 18:03

chrismaeda

The previous example (where the SessionFactory is bound in the JNDI

tree) doesn't work for Tomcat since Tomcat's JNDI is read-only.

 

If you store the SessionFactory in the servlet context, you get it

back with the following code:

 

   (SessionFactory) servletContext.getAttribute

(HibernatePlugIn.SESSION_FACTORY_KEY);

 

If you are using JSP 1.2 or 2.0, you could also use this EL expression:

 

   "${applicationScope['net.sf.hibernate.SessionFactory']}"

 

This works for generic servlets as well.  Just execute the plugin code

in the servlet's init() method.

 



|----------------------------------------------------------------------------------------|
                           版权声明  版权所有 @zhyiwww
            引用请注明来源 http://www.blogjava.net/zhyiwww   
|----------------------------------------------------------------------------------------|
posted on 2006-04-20 14:57 zhyiwww 阅读(278) 评论(0)  编辑  收藏 所属分类: j2ee

只有注册用户登录后才能发表评论。


网站导航: