Учебное пособие, показывающее, как интегрировать Hibernate с веб-приложением, разработанным с помощью Apache Struts 1.x.
Этапы интеграции:
- Создайте новый Плагин Hibernate Struts файл, чтобы установить Hibernate sessionfactory в контексте сервлета, и включите этот файл в struts-config.xml файл.
- В Struts получите Hibernate sessionfactory из servletcontext и выполните любую задачу гибернации, которую вы хотите.
1. Подключаемый модуль Hibernate Struts для гибернации
Создайте подключаемый модуль Hibernate Struts, получите фабрику сеансов Hibernate, сохраните ее в контексте сервлета для последующего пользователя – servlet.getservletcontext().setAttribute(ИМЯ КЛЮЧА, фабрика); .
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. Создайте подключаемый модуль Hibernate Struts, получите фабрику сеансов Hibernate, сохраните ее в контексте сервлета для последующего пользователя – ||servlet.getservletcontext().setAttribute(ИМЯ КЛЮЧА, фабрика);||.
Включите плагин Hibernate Struts в файл конфигурации Struts ( struts-config.xml ).
... ...
3. Получить фабрику сеансов гибернации
В классе действий Struts вы можете получить Фабрику сеансов гибернации из servletcontext .
servlet.getServletContext().getAttribute(HibernatePlugin.KEY_NAME);
и выполняйте любую задачу гибернации как обычно.
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");
}
}
Сделано.
Оригинал: “https://mkyong.com/struts/struts-hibernate-integration-example/”