Agosto 24, 2019

Hibernate e Struts configurazione di base

Hibernate è un potente framework java-based usato per l’implementazione ORM (Object Relational Mapping) dello strato di persistenza di applicazioni web. In questo articolo viene effettuata una configurazione minimale all’interno di un contesto web Struts MVC . Si supppone di avere già creato un progetto web dinamico all’interno dell’IDE di sviluppo Eclipse (vedere qui). Il sistema RDMBS utilizzato sarà Mysql. Vediamo i passi principali per la configurazione di hibernate all’interno del progetto.

SOURCE CODE (/giuseu/struts-mvc)

GIT
git clone https://gitlab.com/giuseppeurso-eu/struts-mvc

STEP 1.

Creare il DB schema:

$ mysql -uroot -proot
mysql> create database demodb;

 

STEP 2.

Scaricare e scompattare Hibernate 3.3.2:  http://sourceforge.net/projects/hibernate/files/hibernate3/

hibernate-unzipped

 

STEP 3.

Copiare le seguenti librerie nella directory di progetto WebContent/WEB-INF/lib :

- antlr-*.jar
- commons-collections-*.jar
- dom4j-*.jar
- jta-*.jar
- javassist-*.jar
- slf4j-api-*.jar
- slf4j-jcl-*.jar
- hibernate*.jar

 

STEP 4.

Scaricare il driver connector Mysql JDBC e copiarlo nella directory lib del progetto: http://dev.mysql.com/downloads/connector/j/

STEP 5.

Creare il file di configurazione  hibernate.cfg.xml nella directory “src” del progetto:

<?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 name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/demodb</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<property name="current_session_context_class">thread</property>
<property name="connection.pool_size">1</property>
</session-factory>
</hibernate-configuration>

 

STEP 6.

Creare una classe di utilità per la SessionFactory di hibernate:

package com.demo.hibernate;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class SessionUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

 

 

STEP 7.

Creare un filtro per il check della SessionFactory di hibernate:

package com.demo.hibernate;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.hibernate.SessionFactory;
import org.hibernate.StaleObjectStateException;

public class SessionRequestFilter implements Filter {

private SessionFactory sf;

public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
try {
sf.getCurrentSession().beginTransaction();
chain.doFilter(request, response);
sf.getCurrentSession().getTransaction().commit();
} catch (StaleObjectStateException staleEx) {
throw staleEx;
} catch (Throwable ex) {
// Rollback only
ex.printStackTrace();
try {
if (sf.getCurrentSession().getTransaction().isActive()) {
sf.getCurrentSession().getTransaction().rollback();
}
} catch (Throwable rbEx) {
System.out.print(rbEx.getStackTrace());
}
throw new ServletException(ex);
}
}

public void init(FilterConfig filterConfig) throws ServletException {
sf = SessionUtil.getSessionFactory();
}

public void destroy() {}

}

 

STEP 8.

Dichiarare il filtro nel file web.xml :

<!-- Filter Configuration -->
<filter>
<filter-name>HibernateSessionFilter</filter-name>
<filter-class>com.demo.hibernate.SessionRequestFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>HibernateSessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Ecco come si presenta il layout di progetto:

hibernate-base-project-layout

 

STEP 9.

Avviare Tomcat in Eclipse e verificare che la session factory sia creata senza errori:

hibernate-build-session-factory

Related posts

Leave a Reply

Your email address will not be published.