Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java struts2完整hibernate插件泄漏jdbc连接?_Java_Hibernate_Jdbc_Struts2_Jboss7.x - Fatal编程技术网

Java struts2完整hibernate插件泄漏jdbc连接?

Java struts2完整hibernate插件泄漏jdbc连接?,java,hibernate,jdbc,struts2,jboss7.x,Java,Hibernate,Jdbc,Struts2,Jboss7.x,我使用struts2-fullhibernatecore-plugin-2.2.1-GA.jar将会话注入为 @SessionTarget protected Session hSession; @TransactionTarget protected Transaction hTransaction; 我可以在jboss日志中看到,它让jdbc连接保持打开状态(未关闭)。Stacktrace作为: [org.jboss.jca.core.api.connecti

我使用struts2-fullhibernatecore-plugin-2.2.1-GA.jar将会话注入为

 @SessionTarget
 protected Session        hSession;

 @TransactionTarget
 protected Transaction    hTransaction;
我可以在jboss日志中看到,它让jdbc连接保持打开状态(未关闭)。Stacktrace作为:

[org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager]
(http--   0.0.0.0-8080-203) IJ000100: Closing a connection for you. 
Please close them yourself:       org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@62a8c68c: 
java.lang.Throwable:   STACKTRACE
at org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManagerImpl.registerConnection(CachedConnectionManagerImpl.java:265)
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:495)
at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:129)
at  org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92) [hibernate3.jar:]
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) [hibernate3.jar:]
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) [hibernate3.jar:]
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) [hibernate3.jar:]
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) [hibernate3.jar:]
at com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.injectHibernateTransactionByAnnotation(SessionTransactionInjectorInterceptor.java:572) [struts2-fullhibernatecore-plugin-2.2.1-GA.jar:]
at com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.injectHibernateTransactionByAnnotation(SessionTransactionInjectorInterceptor.java:579) [struts2-fullhibernatecore-plugin-2.2.1-GA.jar:]
at com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.intercept(SessionTransactionInjectorInterceptor.java:190) [struts2-fullhibernatecore-plugin-2.2.1-GA.jar:]
编码部分,我做事情的方式如下: 使用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;
      }
      }
      }
最重要的是,我使用struts2自定义拦截器进行身份验证,因为拦截器不是线程安全的。在拦截器中的
ActionInvocation invoke()
方法之后,获取上述错误堆栈跟踪。
这是否意味着拦截器不是线程安全的,可能会泄漏hibernate会话(连接)?

1。您正在使用
hibernatePlugin.customSessionFactoryClass
属性吗?2.您是否扩展了hibernate默认值?请提供您在会话中使用的函数的代码。您是否在catch块中指定了回滚?并使用了2.2.2版本。您可能以错误的方式使用了hsession,请提供一些代码,以便我能更多地了解您的问题。您好@ParthTrivedi,谢谢您的回复。我已经添加了代码,我这样做了……但是每当我检查服务器日志时,就会得到很多未关闭连接的堆栈跟踪。我做错了什么吗?@ParthTrivedi首先,我使用struts2自定义拦截器进行身份验证,这不是线程安全的。在拦截器中的ActionInvocation invoke()方法之后,获取上述错误stacktrace。这是否意味着拦截器由于不是线程安全的,可能会泄漏会话(连接)?
 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;
}
  }
  public class abc extends ActionSupport{
      private UserRoleDAO userRoleDao = new UserRoleDAO();
      private List ls=new ArrayList();
      public String execute()
    {
         List ls=userRoleDao.L()
         return "success";
    }
        }