Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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 JDBC连接发布问题_Java_Spring_Hibernate_Spring Mvc_Transactions - Fatal编程技术网

Java JDBC连接发布问题

Java JDBC连接发布问题,java,spring,hibernate,spring-mvc,transactions,Java,Spring,Hibernate,Spring Mvc,Transactions,我在应用程序和应用服务器jbossAS7中使用Struts2、Spring3和Hibernate4。问题是我已将连接池中的最大限制配置为20。当20个用户点击应用程序时,出现无法获取托管连接异常。所有20个连接仅由10个用户使用,每个用户有2个连接。为什么会这样 下面是jboss standalone.xml中数据源的配置 <datasource jta="false" jndi-name="java:/comp/env/jdbc/DB_NAME" pool-name="DB_POOL"

我在应用程序和应用服务器jbossAS7中使用Struts2、Spring3和Hibernate4。问题是我已将连接池中的最大限制配置为20。当20个用户点击应用程序时,出现无法获取托管连接异常。所有20个连接仅由10个用户使用,每个用户有2个连接。为什么会这样

下面是jboss standalone.xml中数据源的配置

<datasource jta="false" jndi-name="java:/comp/env/jdbc/DB_NAME" pool-name="DB_POOL" enabled="true" use-java-context="true" use-ccm="false">
<connection-url>jdbc:log4jdbc:postgresql://localhost:5432/test_db</connection-url>
<driver-class>net.sf.log4jdbc.sql.jdbcapi.DriverSpy</driver-class>
<driver>log4jdbc</driver>
<pool>
<min-pool-size>2</min-pool-size>
<max-pool-size>20</max-pool-size>
</pool>
<security>
<user-name>postgres</user-name>
<password>postgres</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  id="WebApp_9" version="2.4">

  <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/SpringBeans.xml</param-value>
  </context-param>

  <servlet>
<servlet-name>InitializerServlet</servlet-name>
<servlet-class>com.tcs.oss.tims.utilities.InitializerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

 <filter-mapping> 
<filter-name>CASFilter</filter-name> 
<url-pattern>/General/*</url-pattern> 
 </filter-mapping> 
  <filter> 
<filter-name>CASFilter</filter-name> 
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class> 
<init-param> 
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name> 
<param-value>${CAS_LOGIN_URL}</param-value> 
</init-param> 
<init-param> 
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> 
<param-value>${CAS_PROXY_VALIDATE_URL}</param-value> 
</init-param> 
<init-param> 
  <param-name>edu.yale.its.tp.cas.client.filter.serviceUrl</param-name> 
        <param-value>${LOGIN_URL}</param-value> 
</init-param> 
<init-param> 
<param-name>edu.yale.its.tp.cas.client.filter.wrapRequest</param-name> 
<param-value>true</param-value> 
</init-param> 
</filter>

 <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>

 </web-app>

上下文配置位置
/WEB-INF/classes/SpringBeans.xml
初始化服务器
com.tcs.oss.tims.utilities.InitializerServlet
1.
org.springframework.web.context.ContextLoaderListener
CASFilter
/一般/*
CASFilter
edu.yale.its.tp.cas.client.filter.CASFilter
edu.yale.its.tp.cas.client.filter.loginUrl
${CAS\u LOGIN\u URL}
edu.yale.its.tp.cas.client.filter.validateUrl
${CAS\u PROXY\u VALIDATE\u URL}
edu.yale.its.tp.cas.client.filter.serviceUrl
${LOGIN\u URL}
edu.yale.its.tp.cas.client.filter.wrapRequest
真的
支柱2
org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter
支柱2
/*

我不确定spring事务管理器是如何管理连接的。对于hibernate,有一些连接释放模式,在事务之后,我可以释放连接,但当我有spring事务时,这似乎不起作用。请帮忙

在这种环境中,您需要使用JTA事务管理器

当您使用成熟的应用程序服务器时,它已经有一个内置的事务管理器,它与您设置的数据源集成(至少在设置jta=“true”时)。此外,请务必使用:

<prop key="hibernate.transaction.jta.platform">
     org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform
</prop>
<prop key="hibernate.transaction.factory_class">
     org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
</prop>

org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform
org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
提交事务并释放相关数据库连接时,hibernate会话应自动关闭

别忘了配置Spring JTA Tx管理器

<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" />


您的设置可能有误。您拥有的
org.hibernate.Transaction.JDBCTransaction
类是什么?为什么不使用Spring中的
HibernateTransactionManager
?还有,为什么您仍然使用古老的
TransactionProxyFactoryBean
而不是事务驱动或方面驱动的事务(这将为您节省大量配置)。接下来,确保您自己没有打开连接和会话(不要使用
openSession
,而是使用
getCurrentSession
),并确保您没有复制bean(替换事务bean)。很抱歉,这是一个错误。我已经更新了我正在使用的那个。我正在使用getCurrentSession。什么设置可能是错误的?不清楚。发布您的数据源配置(spring)并显示一些代码。正如你所说的,你使用的是一种古老的驱动事务方式,你应该考虑迁移到新的事务划界方式。我将研究新的交易撤销方式。谢谢,我没有看到任何东西,很明显你的配置有问题。我怀疑您在代码中做了一些不释放连接的事情。您可以添加一些使用会话或连接的代码吗?即使这样,spring也不会处理事务吗?我如何跟踪我的连接何时被释放或关闭?从这个角度来看,JTA的优势是什么?你能告诉我吗?
public void insertIntoInstance(String id) throws Exception {
try {
Session session = sessionfactory.getCurrentSession(); // Where the sessionfactory is from Dependency Injection
Query insertQry = session.createSQLQuery("insert into table(id)values(id)");
insertQry.executeUpdate();
} catch (Exception e) {
throw e;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  id="WebApp_9" version="2.4">

  <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/SpringBeans.xml</param-value>
  </context-param>

  <servlet>
<servlet-name>InitializerServlet</servlet-name>
<servlet-class>com.tcs.oss.tims.utilities.InitializerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

 <filter-mapping> 
<filter-name>CASFilter</filter-name> 
<url-pattern>/General/*</url-pattern> 
 </filter-mapping> 
  <filter> 
<filter-name>CASFilter</filter-name> 
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class> 
<init-param> 
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name> 
<param-value>${CAS_LOGIN_URL}</param-value> 
</init-param> 
<init-param> 
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> 
<param-value>${CAS_PROXY_VALIDATE_URL}</param-value> 
</init-param> 
<init-param> 
  <param-name>edu.yale.its.tp.cas.client.filter.serviceUrl</param-name> 
        <param-value>${LOGIN_URL}</param-value> 
</init-param> 
<init-param> 
<param-name>edu.yale.its.tp.cas.client.filter.wrapRequest</param-name> 
<param-value>true</param-value> 
</init-param> 
</filter>

 <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>

 </web-app>
<prop key="hibernate.transaction.jta.platform">
     org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform
</prop>
<prop key="hibernate.transaction.factory_class">
     org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
</prop>
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" />