Struts 2-Hibernate 3 integration(complete) using eclipse


hi

i am going to give you complete example of struts 2.0.11 and hibernate 3 integration

well let me start from eclipse configuration,i am using eclipse 3.3 for development,it is nice and stable

step1- create Dynamic web project in eclipse .

step2- now i am going to give configuration of struts 2.0.11 in project open web.xml

and add struts filter for applying struts 2 ,write this in web.xml in

<filter>
    <filter-name>struts-cleanup</filter>
    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter>
</filter>
<filter>
    <filter-name>struts2</filter>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter>
</filter>
<filter-mapping>
    <filter-name>struts-cleanup</filter>
    <url-pattern>/*</url>
</filter>
<filter-mapping>
    <filter-name>struts2</filter>
    <url-pattern>/*</url>
</filter>

Another thing you have to do is to put (create) struts.xml file in src folder of eclipse

and put required library for struts (common-logging.jar,freemarker.jar,ognl.jar,struts2-

core.jar, xwork.jar)

This is basic configuration for struts 2

Step-3 now it is time to configure hibernate with struts for that we required hibernate and its required

Libraries in web-Inf/lib folder, complete list:

antlr.jar, asm.jar, cglib.jar, commons-beanutils.jar, common-logging.jar, dom4j.jar

freemarker.jar, hibernate.jar, jta.jar, <jdbc drivers libs>, ognl.jar, struts2.jar, xwork.jar

Step4-we have to create session factory of hibernate in struts 2 filter, so we will extend struts 2 filter,

Create class in src folder for create plugin of hibernate

In your own package structure, I have create HibernateUtil.java in org.hns.plugin

HibernateUtil.java

package org.hns.plugin;

    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.Session;

    public class HibernateUtil {
    private static SessionFactory sessionFactory;
    public static void createSessionFactory() {
    sessionFactory = new Configuration().configure().buildSessionFactory();
    }
    public static Session getSession() {
    return sessionFactory.openSession();
    }
}

Struts2dispatcher.java

package org.hns.plugin;

import javax.servlet.*;
import org.apache.struts2.dispatcher.FilterDispatcher;
import org.hibernate.HibernateException;
    
 public class Struts2Dispatcher extends FilterDispatcher {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    super.init(filterConfig);
    try {
    HibernateUtil.createSessionFactory();
    System.out.print("application initializing successfully");
    } catch (HibernateException e) {
    throw new ServletException(e);
    }
  }

}

Step-5

package org.hns.plugin;

import javax.servlet.*;
import org.apache.struts2.dispatcher.FilterDispatcher;
import org.hibernate.HibernateException;

public class Struts2Dispatcher extends FilterDispatcher {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    super.init(filterConfig);
    try {
    HibernateUtil.createSessionFactory();
    System.out.print("application initializing successfully");
    } catch (HibernateException e) {
    throw new ServletException(e);
    }
  }
}

Step-6 – apply this filter in web.xml like

<!--<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> -->

    <filter-class>org.hns.plugin.Struts2Dispatcher</filter-class>

Step-7 we have to put hibernate configuration file in src folder with the name hibernate.cfg.xml
Give your connection url, username, password, jdbc driver class name, for this example I have used mysql database

I have used user schema with usr  username and password, in user schema there is usermast table with the field usercode(int),uname(varchar),pwd(varchar),type(varchar), you can create table and put 2-3 dummy entry in your wishing database.

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">   
 
<hibernate-configuration>
<session-factory>
<property>true</property>
<property name="connection.characterEncoding">UTF-8</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/user</property>
<property>usr</property>
<property>usr</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="current_session_context_class">thread</property>
<property>org.hibernate.transaction.JDBCTransactionFactory</property>


 
</session-factory>
</hibernate-configuration>

Step-8

It is time to create hibernate mapping with table and mapping class

I have created User.java in org.hns.user package

package org.hns.user.;
public class User
{
  private int id;
  private String username;
  private String password;
  private String usertype;
    // add fields setter and getter here (required)
}

Create User.hbm.xml in org.hns.user (org/hns/user/ OR where User.java created) like

    <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class table="usermast">
   <id column="usercode">
    <generator></generator>
   </id>
   <property column="uname" name="username">
   <property column="pwd">
   <property column="type">
  </class>
</hibernate-mapping>

You can get more idea about any another advance mapping stuff from any hibernate tutorial.

Here property is java class variable name and column is table column name.

Step-9 add user hbm mapping to hibernate.cfg.xml using below code between sessionfactory tag

 
<mapping resource="org/hns/user/User.hbm.xml">

 the basic settings for using hibernate for usermast table has been completed here.
Step-10

now I am create another java file UserHibDao.java in  org.hns.user.dao  for create and access user dao

package org.hns.user.dao;
   import java.util.List;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hns.user.User;
    import org.sm.plugin.HibernateUtil;
    public class UserHibDao {
    private List<user> userlist;
    private User user;
    public void delete(Integer id) {
    Session session = HibernateUtil.getSession();
    Transaction tx = null;
    try
   {
   tx = session.beginTransaction();
    user=(User)session.get(User.class,id);
    session.delete(user);
    tx.commit();
    }catch (RuntimeException e) {
    if(tx != null) tx.rollback();
    throw e;
    } finally {
    session.close();
    }
    }
    public List getAllUser() {
    Session session = HibernateUtil.getSession();
    try
    {
    session.beginTransaction();
    userlist=session.createQuery("from User").list();
    return userlist;
    }
    catch(Exception e)
    {
    System.out.print("Error while fetching "+e);
    return null;
    }
    finally
    {
    session.close();
    }
    }
    public User getuser(Integer id) {
   Session session = HibernateUtil.getSession();
    try {
    session.beginTransaction();
    //change query for get proper data
    Query q = session.createQuery("from User u where u.uid=:id");
    q.setInteger("userid",id);
    return (User) q.uniqueResult();
    }finally {
    session.close();
    }
    }
    public void insert(User usr) {
    Session session = HibernateUtil.getSession();
    Transaction tx=null;
    try {
    tx = session.beginTransaction();
    session.save(usr);
    tx.commit();
    } catch (RuntimeException e) {
    if(tx != null) tx.rollback();
    throw e;
    } finally {
    session.close();
    }
    }
    public void update(User usr) {
    Session session = HibernateUtil.getSession();
    Transaction tx = null;
    try {
    tx=session.beginTransaction();
    session.update(usr);
    tx.commit();
    }catch (RuntimeException e) {
    if(tx != null) tx.rollback();
    throw e;
    } finally {
    session.close();
    }
    }
  }
 

So after this stuff you can either use this class for creating service layer of dao or you can use this class functions directly for set business logic.
here one thing should be noted that hibernate query fire on its class object not directly on table so i have used

somthing like this session.createQuery(“from User u where u.uid=:id”); instead of using session.createQuery(“from usermast u where u.uid=:id”);[tablename query]

hope this is enough to start with struts 2 and hibernate 3 ,if you feel still there is some stuff missing in this blog ,let me know from comment

Thanks :-)))

About these ads

45 thoughts on “Struts 2-Hibernate 3 integration(complete) using eclipse

  1. Thank you very much, I would like to have the complete struts-hibernate example, please your help is appreciated.

    Thanks again

  2. Thanks for the effort you have put in writing this article. But it ends with an abruptly.
    I've created a DAO now what?
    Some screenshots would have been helpful.

  3. I am trying to make a login page using Hibernate 3 and struts 2 .. after
    I deploy using Myeclipse , I get problem of this sort cited below… Please help me I am stuck badly and no one is there to help me..

    Caused by: java.lang.InstantiationException: com.opensymphony.xwork2.interceptor.Interceptor
    at java.lang.Class.newInstance0(Class.java:335)
    at java.lang.Class.newInstance(Class.java:303)
    at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:123)
    at org.apache.struts2.plexus.PlexusObjectFactory.lookup(PlexusObjectFactory.java:298)
    at org.apache.struts2.plexus.PlexusObjectFactory.buildBean(PlexusObjectFactory.java:216)
    at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:154)
    at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:143)
    at org.apache.struts2.plexus.PlexusObjectFactory.buildInterceptor(PlexusObjectFactory.java:146)
    … 153 more
    11:35:52,003 INFO [STDOUT] 11:35:52,003 WARN [InterceptorBuilder] Unable to load config class com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor at Class: java.lang.Class
    File: Class.java
    Method: newInstance0
    Line: 335 – java/lang/Class.java:335:-1 probably due to a missing jar, which might be fine if you never plan to use the scoped-model-driven interceptor
    11:35:52,007 INFO [STDOUT] 11:35:52,003 ERROR [InterceptorBuilder] Actual exception
    Unable to instantiate an instance of Interceptor class [com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor]. – Class: java.lang.Class
    File: Class.java
    Method: newInstance0

  4. Thank you!!
    I was googling for days to find good tutorials, but all of them made me loose my patience since little things were not working from the beginning.
    Your tutorial was straight forward, and most importantly: WORKING!
    thanks!

    Card tricks

  5. Thanks for this sample, I have tried to use this for my app. I have a couple of minor changes as I am trying to use Annotaitions over XML, but I am getting an error:
    HTTP Status 500 -
    type Exception report
    message
    descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
    exception
    java.lang.reflect.InvocationTargetException
    note The full stack traces of the exception and its root causes are available in the GlassFish/v3 logs.

    appear in the browser window, debugging shows this occurs at the point of

    HibernateUtil
    [sessionFactory = (new AnnotationConfiguration()).configure().buildSessionFactory();]

  6. Thanks for this sample, But u didn't give the code how to communicate the jsp form data with ->struts2 ->hibernate file ……..

  7. I found your post on my (almost) daily obsession with blog searching. Thanks for the informative blog post as I can certainly appreciate all of the hard work that goes into maintaining a site like this! Thanks again.

  8. this is nice tutorial and easy to understand but where exactly struts frame works takes help to access dao layer?

  9. hi
    Thanks, good information is there.
    I need good url links to understand struts,spring,hibernate frame works, if any member know plse send the mail to:na_prakash_19@yahoo.co.in

  10. hi write saple example.

    and u write create session factory.
    private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate.cfg.xml return new AnnotationConfiguration().configure() .buildSessionFactory(); } catch (Throwable ex) { System.err.println(“Initial SessionFactory creation failed.” + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
    and u write dao class.
    and u write dto class
    and u write struts execite method(—-);
    and u write hbmapping file.
    and u write table

  11. Hi whenever i try to change my web.xml file with the modified Struts2Dispatcher file i get an error message. Can you please help?

  12. I discovered your blog site on google and check a few of your early posts. Continue to keep up the very good operate. I just additional up your RSS feed to my MSN News Reader. Seeking forward to reading more from you later on!…

  13. I adore your blog post.. Comfortable colours & motif. Does a person design and style this amazing site on your own or maybe do anyone bring in help to make it work in your case? Plz react seeing that I!|m aiming to style my personal website and would want to learn exactly where ough obtained this kind of out of. Thank you

  14. I have adopted your blog for quite a while and must say that this time an individual hit the particular nail along with precision since never, I have almost exactly the same thought and ideals as you've, keep coming with gold articles like this and you will have a follower for a lifetime!

  15. Oh my goodness! an amazing article dude. Thank you However I am experiencing issue with ur rss . Don’t know why Unable to subscribe to it. Is there anyone getting identical rss problem? Anyone who knows kindly respond. Thnkx

  16. Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog tuat automatically
    tweet my newest twitter updates. I’ve been looking forr a
    plug-in like this for quiye some time and was hoping maybe you would have
    some experience with something like this. Please let me know if you
    run into anything. I truly enjioy reading your blog and I loo
    forward to your new updates.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s