这个Plugin的作用是在Struts应用程序启动时进行hibernate的初始化操作,原文HibernatePlugIn for Struts,步骤很简单:
1、在struts-config.xml里增加:
<
plug-in
className
="org.haree.struts.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 >
<!-- '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 >
2、HibernatePlugIn.java的内容
package org.haree.struts;
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>.
*
* <p>
* <plugin class="net.sf.hibernate.plugins.struts.HibernatePlugIn">
* <set-property name="configFilePath""
* value="path-to-config-file"/>
* <set-property name="storedInServletContext""
* 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();
}
}
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>.
*
* <p>
* <plugin class="net.sf.hibernate.plugins.struts.HibernatePlugIn">
* <set-property name="configFilePath""
* value="path-to-config-file"/>
* <set-property name="storedInServletContext""
* 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();
}
}