Java Hibernate-Verbindung Leck

Einsatz von Hibernate mit Struts2, gesamte Strömung wie:

hibernate.cfg.xml :

<hibernate-configuration>

    <session-factory>
    <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
    <property name="connection.url">jdbc:oracle:thin:@xx.xx.xxx.xx:1521:TEST</property>
    <property name="connection.username">xxxx</property>
    <property name="connection.password">xxxxyyy</property>
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

   <mapping class="test.models.administration.Menus" />

   <mapping resource="Dual.hbm.xml" />
 </session-factory>

 </hibernate-configuration>

Und für DAO eine Verlängerung AbstractSimpleGenericDao:

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.googlecode.s2hibernate.struts2.plugin.annotations.SessionTarget;
import com.googlecode.s2hibernate.struts2.plugin.annotations.TransactionTarget;

@SuppressWarnings("unchecked")
public abstract class AbstractSimpleGenericDao<C, I extends Serializable> {

Class<C>                 entityClass;

@SessionTarget
protected Session        hSession;

@TransactionTarget
protected Transaction    hTransaction;

{
entityClass = (Class<C>) ((ParameterizedType)           
getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

public List<C> getAll()
{
 try
{
  return hSession.createCriteria(entityClass).list();
}
catch (HibernateException e)
{
  throw e;
}
}

  public C get(I id)
   {
    try
    {
     return (C) hSession.get(entityClass, id);
     }
   catch (HibernateException e)
    {
    throw e;
     }
       }

    public void save(C object)
    {
     try
     {
        hSession.save(object);
     }
        catch (HibernateException e)
        {
          hTransaction.rollback();
          throw e;
        }
        }

         public void update(C object)
           {
             try
              {
                hSession.update(object);
               }
        catch (HibernateException e)
          {
           hTransaction.rollback();
           throw e;
           }
            }

      public void delete(I id)
        {
         try
        {
          C actual = get(id);
          hSession.delete(actual);
         }
         catch (HibernateException e)
         {
         hTransaction.rollback();
          throw e;
          }
          }
          }

Dann erweitern oben DAO in meiner DAO-Klasse wie:

       public class UserRoleDAO extends AbstractSimpleGenericDao<UserRole, UserRoleId> {

          public List L() {
    try {
        String queryString = "from UserRole";
        Query queryObject = hSession.createQuery(queryString);
        return queryObject.list();
    } catch (RuntimeException re) {
        throw re;
    }
      }

Dann in meiner struts-Action-Klasse, DAO instanzieren und abrufen der Liste:

          public class abc extends ActionSupport{
          private UserRoleDAO userRoleDao = new UserRoleDAO();
          private List ls=new ArrayList();
          public String execute()
        {
             List ls=userRoleDao.L()
     return "success";
        }
            }

Wenn ich rufe diese abc Action-Klasse, durch wiederholte Klicks auf die angegebene Menü-link, und es bewirkt, dass die Verbindung Undicht ist, zählt als Verbindung geöffnet, dass ich in der Lage bin zu sehen, mit jProfiler, und wird sich nie schließen.
Mittlerweile auch, Es undichte verbindungen.

StackTrace alle geöffneten durchgesickert Verbindung mit jProfiler:

org.hibernate.transaction.JDBCTransaction.begin()

com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInter
ceptor.injectHibernateTransactionByAnnotation(java.lang.Object, org.hibernate.Session, boolean)

com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInter
ceptor.injectHibernateTransactionByAnnotation(java.lang.Object, org.hibernate.Session, boolean)

com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInter
ceptor.intercept(com.opensymphony.xwork2.ActionInvocation)

java.lang.Thread.run()
URL: /project/action-name

Warum Hibernate undicht ist, diese verbindungen?

Ist es wie ist Hibernate halten der Verbindung in der session und erneut dieselbe Verbindung und somit, wenn zur gleichen Zeit, wenn ich die gleichzeitige Anforderung ist, wenn session-Anschluss ist besetzt, es würde Leck-verbindungen. Dies ist nur gehe ich davon aus. Ich habe keine Idee.

Wie schaffst du session?
Ich bin nicht etwas zu tun für die Verwaltung von session-mit Ausnahme der Erstellung von DAO ist, wie ich oben sagte... ich bin mit Tomcat-server
Welche Versionen und welche plugins Sie verwenden.
Was ist Ihre struts-Konfiguration?
mit Struts2, myeclipse, Apache Tomcat 6.x

InformationsquelleAutor Ashish Kataria | 2013-01-24

Schreibe einen Kommentar