[Hibernate] Tích hợp Hibernate vào Struts framework

Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách tích hợp Hibernate vào web application được phát triển bằng Apache Struts 1.x.

Download source code – Struts-Hibernate-Example.zip

Các bước tích hợp:
  1. Tạo file Hibernate Struts plug-in để thiết lập Hibernate session factory trong servlet context, và include file này vào file struts-config.xml.
  2. Trong Struts, lấy Hibernate session factory trong servlet context và ra lệnh Hibernate làm bất cứ việc gì bạn muốn.

1. Hibernate Struts Plug-in
Tạo Hibernate Struts Plug-in, lấy Hibernate session factory, đưa nó vào servlet context cho người dùng sau - servlet.getServletContext().setAttribute(KEY_NAME, factory);.

Java:
package com.mkyong.common.plugin;

import java.net.URL;
import javax.servlet.ServletException;

import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernatePlugin implements PlugIn {
   private Configuration config;
   private SessionFactory factory;
   private String path = "/hibernate.cfg.xml";
   private static Class clazz = HibernatePlugin.class;

   public static final String KEY_NAME = clazz.getName();

   public void setPath(String path) {
      this.path = path;
   }

   public void init(ActionServlet servlet, ModuleConfig modConfig)
      throws ServletException {

      try {

         //save the Hibernate session factory into serlvet context
         URL url = HibernatePlugin.class.getResource(path);
         config = new Configuration().configure(url);
         factory = config.buildSessionFactory();
         servlet.getServletContext().setAttribute(KEY_NAME, factory);

      } catch (MappingException e) {
         throw new ServletException();
      } catch (HibernateException e) {
         throw new ServletException();
      }

   }

   public void destroy() {
      try {
         factory.close();
      } catch (HibernateException e) {
         e.printStackTrace();
      }
   }
}

2. struts-config.xml
Include Hibernate Struts plug-in vào file cấu hình Struts (struts-config.xml).

XML:
<struts-config>
    ...
    <plug-in className="com.mkyong.common.plugin.HibernatePlugin">
          <set-property property="path" value="/hibernate.cfg.xml"/>
    </plug-in>
    ...
<struts-config>

3. Lấy ra Hibernate session factory
Trong class Struts action, có thể lấy Hibernate session factory trong servlet context.

Java:
servlet.getServletContext().getAttribute(HibernatePlugin.KEY_NAME);
và ra lệnh cho Hibernate như bình thường.

Java:
package com.mkyong.customer.action;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.mkyong.common.plugin.HibernatePlugin;
import com.mkyong.customer.form.CustomerForm;
import com.mkyong.customer.model.Customer;

public class AddCustomerAction extends Action{

  public ActionForward execute(ActionMapping mapping,ActionForm form,
    HttpServletRequest request,HttpServletResponse response)
  throws Exception {

        SessionFactory sessionFactory =
             (SessionFactory) servlet.getServletContext()
                            .getAttribute(HibernatePlugin.KEY_NAME);

    Session session = sessionFactory.openSession();

    CustomerForm customerForm = (CustomerForm)form;
    Customer customer = new Customer();

    //copy customerform to model
    BeanUtils.copyProperties(customer, customerForm);

    //save it
    customer.setCreatedDate(new Date());

    session.beginTransaction();
    session.save(customer);
    session.getTransaction().commit();

    return mapping.findForward("success");

  }
}
Hoàn thành

Cám ơn các bạn đã theo dõi. Hẹn gặp lại các bạn trong các bài viết sau :D

Bài viết tham khảo tại: https://mkyong.com/struts/struts-hibernate-integration-example/
 

Bình luận