Struts + Hibernate integration example
A tutorial to show how to integrate Hibernate with in a web application developed with Apache Struts 1.x.
Download It – Struts-Hibernate-Example.zip
Steps of the integration :
- Create a new Hibernate Struts plug-in file to set the Hibernate session factory in servlet context, and include this file in struts-config.xml file.
- In Struts, get the Hibernate session factory from servlet context, and do whatever Hibernate task you want.
1. Hibernate Struts Plug-in
Create a Hibernate Struts Plug-in, get the Hibernate session factory, store it into the servlet context for later user – servlet.getServletContext().setAttribute(KEY_NAME, factory);.
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 the Hibernate Struts plug-in into the Struts configuration file (struts-config.xml).
<struts-config> ... <plug-in className="com.mkyong.common.plugin.HibernatePlugin"> <set-property property="path" value="/hibernate.cfg.xml"/> </plug-in> ... <struts-config>
3. Get the Hibernate session factory
In Struts action class, you can get the Hibernate session factory from servlet context.
servlet.getServletContext().getAttribute(HibernatePlugin.KEY_NAME);
and do whatever Hibernate task as normal.
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"); } }
Done.
Tags : hibernate integration struts

I am getting following error.
SEVERE: Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable. Most likely, this is due to an incorrect or missing library dependency.
java.lang.NoClassDefFoundError: org/hibernate/HibernateException
more…
Can anybody plz help me…
Shut up Kumar.
Good Example…
Sorry but you didn’t write code of retrieve values from database using WHERE condition in query in struts+hibernate
please send me code for above on my email-id
Thanks
Hi Mykong I deploy ur application i am getting the following error.
31/01/2013 6:56:32 PM org.apache.catalina.core.ApplicationContext log
SEVERE: action: null
java.lang.ClassCastException: com.org.vo.HibernatePlugin cannot be cast to org.apache.struts.action.PlugIn
at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:842)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:359)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1206)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
31/01/2013 6:56:32 PM org.apache.catalina.core.ApplicationContext log
Great article
Great article.
How do we use Hibernate Integration in DAO Layer by using the above example
How to use this plugin in DAO Layer?
Hi Sir,
I am trying to integrate sturts and hibernate, iam getting the below error
May 1, 2012 1:03:29 AM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
May 1, 2012 1:03:29 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 604 ms
May 1, 2012 1:03:29 AM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
May 1, 2012 1:03:29 AM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.0.30
May 1, 2012 1:03:29 AM org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
May 1, 2012 1:03:30 AM org.apache.struts.tiles.TilesPlugin initDefinitionsFactory
INFO: Tiles definition factory loaded for module ”.
May 1, 2012 1:03:30 AM org.apache.struts.validator.ValidatorPlugIn initResources
INFO: Loading validation rules file from ‘/WEB-INF/validator-rules.xml’
May 1, 2012 1:03:30 AM org.apache.struts.validator.ValidatorPlugIn initResources
INFO: Loading validation rules file from ‘/WEB-INF/validation.xml’
May 1, 2012 1:03:30 AM org.apache.struts.action.ActionServlet init
SEVERE: Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable. Most likely, this is due to an incorrect or missing library dependency.
java.lang.NoClassDefFoundError: org/hibernate/HibernateException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:143)
at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:846)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:336)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1044)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:876)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4017)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4337)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
at org.apache.catalina.core.StandardService.start(StandardService.java:480)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
Caused by: java.lang.ClassNotFoundException: org.hibernate.HibernateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1340)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
… 26 more
May 1, 2012 1:03:30 AM org.apache.catalina.core.StandardHost getDeployer
INFO: Create Host deployer for direct deployment ( non-jmx )
May 1, 2012 1:03:30 AM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
May 1, 2012 1:03:30 AM org.apache.jk.common.ChannelSocket init
INFO: JK2: ajp13 listening on /0.0.0.0:8009
May 1, 2012 1:03:30 AM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/24 config=null
May 1, 2012 1:03:30 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 993 ms
Please help me
i tried to get the connection in a jsp but am not getting action servlet in jsp
getting null for this statement clazz.getResource(path);
please help me.This is an urgent
Hello,
when launching the server tomcat 6
I get the following error:
Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable. Most likely, this is due to an incorrect or missing library dependency
Great article
I have Learned from this site Programs & Please Provide Descriptive Also For the Particular Program
please send me the demo application of struts hibernate integration application.as i dont know this framework.
I want to work in this framework..but i am bit confused in folder structure and mapping file placed in netbeans and eclipse id..
Please help me out of this…
Just click on the above download link to get the full example.
It was nice explanation by mkyong………….thank u for ur help…..!