技术开发 频道

在Struts中使用PlugIn扩展Hibernate

  【IT168 技术文档】

  使用Struts的PlugIn技术把HibernateSessionFactory,具体过程如下:

  (1)创建HibernateSessionFactory.java,代码如下:

  package zy.pro.td.util;   import net.sf.hibernate.HibernateException;   import net.sf.hibernate.Session;   import net.sf.hibernate.cfg.Configuration;   /**   * Configures and provides access to Hibernate sessions, tied to the   * current thread of execution. Follows the Thread Local Session   * pattern, see {@link http://hibernate.org/42.html}.   */   public class HibernateSessionFactory {   /**   * Location of hibernate.cfg.xml file.   * NOTICE: Location should be on the classpath as Hibernate uses   * #resourceAsStream style lookup for its configuration file. That   * is place the config file in a Java package - the default location   * is the default Java package.   * Examples:   * CONFIG_FILE_LOCATION = "/hibernate.conf.xml".   * CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".   */   private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";   /** Holds a single instance of Session */   private final ThreadLocal threadLocal = new ThreadLocal();   /** The single instance of hibernate configuration */   private final Configuration cfg = new Configuration();   /** The single instance of hibernate SessionFactory */   private net.sf.hibernate.SessionFactory sessionFactory;   /**   * Returns the ThreadLocal Session instance. Lazy initialize   * the SessionFactory if needed.   *   * @return Session   * @throws HibernateException   */   public Session currentSession() throws HibernateException {   Session session = (Session) threadLocal.get();   if (session == null) {   if (sessionFactory == null) {   try {   cfg.configure(CONFIG_FILE_LOCATION);   sessionFactory = cfg.buildSessionFactory();   }   catch (Exception e) {   System.err.println("%%%% Error Creating SessionFactory %%%%");   e.printStackTrace();   }   }   session = sessionFactory.openSession();   threadLocal.set(session);   }   return session;   }   /**   * Close the single hibernate session instance.   *   * @throws HibernateException   */   public void closeSession() throws HibernateException {   Session session = (Session) threadLocal.get();   threadLocal.set(null);   if (session != null) {   session.close();   }   }   /**   * Default constructor.   */   public HibernateSessionFactory() {   }   }

  (2) 创建HibernatePlugIn.java,代码如下:

  package zy.pro.td.plugin;   /*   * Created on Oct 4, 2004   *   * To change the template for this generated file go to   * Window>Preferences>Java>Code Generation>Code and Comments   */   import javax.servlet.ServletException;   import org.apache.struts.action.ActionServlet;   import org.apache.struts.action.PlugIn;   import org.apache.struts.config.ModuleConfig;   import javax.naming.Context;   import javax.naming.InitialContext;   import zy.pro.td.util.HibernateSessionFactory;   /**   * @author sunil   *   *  This class will initialize hibernate and bind SessionFactory in JNDI at the   *  time of application and startup and unbind it from JNDI at the time of application   * shutdown   */   public class HibernatePlugin   implements PlugIn {   private static final String jndi_hibernate = "jndi_hibernate_factory";   private  HibernateSessionFactory hsf;   private String name;   public HibernatePlugin() {   hsf=new HibernateSessionFactory();   }   // This method will be called at the time of application shutdown   public void destroy() {   System.out.println("Entering HibernatePlugIn.destroy()");   //Put hibernate cleanup code here   System.out.println("Exiting HibernatePlugIn.destroy()");   }   //This method will be called at the time of application startup   public void init(ActionServlet actionServlet, ModuleConfig config) throws   ServletException {   System.out.println("Entering HibernatePlugIn.init()");   System.out.println("Value of init parameter " + getName());   //Uncomment next two lines if you want to throw UnavailableException from your servlet   //    if(true)   //      throw new ServletException("Error configuring HibernatePlugIn");   System.out.println("Exiting HibernatePlugIn.init()");   bindFactoryToJNDI();   }   private void bindFactoryToJNDI() {   try {   Context ctx = new InitialContext();   ctx.bind(this.jndi_hibernate,hsf);   System.out.println("bindind the hibernate factory to JNDI successfully");   }   catch (Exception e) {   e.printStackTrace();   }   }   public String getName() {   return name;   }   public void setName(String string) {   name = string;   }   }

  (3) 配置Struts-config.xml,如下: 

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">   <struts-config>   <form-beans>   <form-bean name="userActionForm" type="zy.pro.td.controller.UserActionForm" />   </form-beans>   <action-mappings>   <action name="userActionForm" path="/act/log/login" scope="request" type="zy.pro.td.controller.LoginAction" />   </action-mappings>   <plug-in className="org.apache.struts.tiles.TilesPlugin">   <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />   </plug-in>   <plug-in className="org.apache.struts.validator.ValidatorPlugIn">   <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />   </plug-in>   <plug-in className="zy.pro.td.plugin.HibernatePlugin" />   <plug-in className="zy.pro.td.plugin.HibernateSessionFactoryPlugIn" />   </struts-config> 

  这一部分就是你的嵌入代码

  (4)创建ActionForm,代码如下:

  package zy.pro.td.controller;   import org.apache.struts.action.*;   import javax.servlet.http.*;   public class UserActionForm extends ActionForm {   private String password;   private String username;   public String getPassword() {   return password;   }   public void setPassword(String password) {   this.password = password;   }   public String getUsername() {   return username;   }   public void setUsername(String username) {   this.username = username;   }   public ActionErrors validate(ActionMapping actionMapping,
HttpServletRequest httpServletRequest) {   /**@todo: finish this method, this is just the skeleton.*/   return null;   }   public void reset(ActionMapping actionMapping, HttpServletRequest httpServletRequest) {   }   }

  (5)创建Action

  package zy.pro.td.controller;   import org.apache.struts.action.*;   import javax.servlet.http.*;   import javax.naming.Context;   import javax.naming.InitialContext;   import net.sf.hibernate.SessionFactory;   import net.sf.hibernate
0
相关文章