plugin标签

Plugin

生命周期方法:init destroy

用户提供set方法,告诉ActionServlet设置属性


应用:

在struts启动时加载hibernate(读取hibernate配置文件,打开hibernate的sessionfactory)

1.环境:导入struts包及hibernate包

2.设计一个类:HibernatePlugin实现plugin接口

   属性:String hibernateConfigFile(文件名)

   读取hibernate配置文件

   打开sessionFactory

3.在struts-config.xml配置文件中添加一对plugin标签,在plugin中加入子标签


hibernate包

工程名-MyEclipse-Add Hibernate Capabilities...

plugin标签_第1张图片

plugin标签_第2张图片plugin标签_第3张图片

package demo;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.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.
     * Location should be on the classpath as Hibernate uses  
     * #resourceAsStream style lookup for its configuration file. 
     * The default classpath location of the hibernate config file is 
     * in the default package. Use #setConfigFile() to update 
     * the location of the configuration file for the current session.   
     */
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
	private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private  static Configuration configuration = new Configuration();    
    private static org.hibernate.SessionFactory sessionFactory;
    private static String configFile = CONFIG_FILE_LOCATION;

	static {
    	try {
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			System.err
					.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
    }
    private HibernateSessionFactory() {
    }
	
	/**
     * Returns the ThreadLocal Session instance.  Lazy initialize
     * the <code>SessionFactory</code> if needed.
     *
     *  @return Session
     *  @throws HibernateException
     */
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();

		if (session == null || !session.isOpen()) {
			if (sessionFactory == null) {
				rebuildSessionFactory();
			}
			session = (sessionFactory != null) ? sessionFactory.openSession()
					: null;
			threadLocal.set(session);
		}

        return session;
    }

	/**
     *  Rebuild hibernate session factory
     *
     */
	public static void rebuildSessionFactory() {
		try {
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			System.err
					.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
	}

	/**
     *  Close the single hibernate session instance.
     *
     *  @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);

        if (session != null) {
            session.close();
        }
    }

	/**
     *  return session factory
     *
     */
	public static org.hibernate.SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	/**
     *  return session factory
     *
     *	session factory will be rebuilded in the next call
     */
	public static void setConfigFile(String configFile) {
		HibernateSessionFactory.configFile = configFile;
		sessionFactory = null;
	}

	/**
     *  return hibernate configuration
     *
     */
	public static Configuration getConfiguration() {
		return configuration;
	}

}


新建HibernatePlugin类

plugin标签_第4张图片

在HibernatePlugin类中,添加hibernateConfigFile属性,需要ActionServlet为该属性设置值,所以要提供该属性的set方法,在init方法中读取hibernate配置文件,打开SessionFactory,在destroy方法中关闭SessionFactory

package demo;

import javax.servlet.ServletException;

import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;

public class HibernatePlugin implements PlugIn {
	private String hibernateConfigFile=null;
	@Override
	public void destroy() {
		System.out.println("in the destroy method");
		//释放资源
		HibernateSessionFactory.closeSession();

	}

	public String getHibernateConfigFile() {
		return hibernateConfigFile;
	}

	public void setHibernateConfigFile(String hibernateConfigFile) {
		this.hibernateConfigFile = hibernateConfigFile;
	}

	@Override
	public void init(ActionServlet arg0, ModuleConfig arg1)
			throws ServletException {
		System.out.println("in the init method...");
		//1.读取hibernate的配置文件
		HibernateSessionFactory.setConfigFile(hibernateConfigFile);
		//2.打开SessionFactory
		HibernateSessionFactory.getSessionFactory();
		System.out.println("init is over");
	}

}
在struts-config.xml配置文件中添加一对plugin标签,在plugin中加入子标签

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foudation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
	<form-beans>
		<form-bean name="addStudentForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="sname" type="java.lang.String"></form-property>
			<form-property name="major" type="java.lang.String"></form-property>
			<form-property name="birth" type="java.sql.Date"></form-property>
			<form-property name="score" type="java.lang.Float"></form-property>
		</form-bean>
	</form-beans>
	<action-mappings>
		<action path="/addStudentAction" type="demo.AddStudentAction" name="addStudentForm">
			<exception type="demo.MyException" path="/Error.jsp" key="ex"></exception>
			<forward name="addStudentSuccess" path="/WEB-INF/addStudent.jsp"></forward>
		</action>
		<action path="/studentAction" type="demo.StudentAction" name="addStudengtForm" parameter="method"/>
	</action-mappings>
	<message-resources parameter="ecception"></message-resources>
	<plugin-in className="demo.HibernatePlugin">
		<set-property property="hibernateConfigFile" value="hibernate.cfg.xml" />
	</plugin-in>
</struts-config>
	




你可能感兴趣的:(plugin标签)