我在standalone.xml中的JBOSS AS 7上有这个数据源配置:
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
<datasource jndi-name="java:jboss/MyJndiDS" pool-name="MyPoolDS" enabled="true" jta="true" use-java-context="false" use-ccm="true">
<connection-url>
jdbc:postgresql://192.168.2.125:5432/t_report
</connection-url>
<driver>
org.postgresql
</driver>
<transaction-isolation>
TRANSACTION_READ_COMMITTED
</transaction-isolation>
<pool>
<min-pool-size>
3
</min-pool-size>
<max-pool-size>
7
</max-pool-size>
<prefill>
true
</prefill>
<use-strict-min>
false
</use-strict-min>
<flush-strategy>
FailingConnectionOnly
</flush-strategy>
</pool>
<security>
<user-name>
my_user
</user-name>
<password>
my_pass
</password>
</security>
<statement>
<prepared-statement-cache-size>
32
</prepared-statement-cache-size>
</statement>
</datasource>
...
...
</datasources>
</subsystem>当我使用同一个用户登录和注销7次时,下一次尝试登录时,我收到Transaction not active错误。我该如何解决这个问题呢?我不想增加max-pool-size。下面是我的注销方法:
import javax.faces.context.ExternalContext;
@Inject ExternalContext ec;
public void validateUserLogOut() {
HttpServletRequest request = (HttpServletRequest)ec.getRequest();
request.getSession().invalidate();
this.setUserLoggedIn(false);
navigation.logout();
}发布于 2011-12-28 23:51:03
我认为您的问题不在于数据源(这只会暴露它),而在于登录模块似乎保持连接打开,而不是将它们返回到池中。
发布于 2013-03-27 17:46:22
由于user503413的要求,我将不光彩地承认我所犯的错误:我在使用它(connection.close())后忘记关闭连接。如果您不关闭您的连接,它将不会将其返回到池中,而且由于您已经限制并到达了max-pool-size (在我的示例中为7),因此不会创建新的连接。所以这里的教训就是一定要关闭你的connections。还要关闭你的prepared statements,否则你会得到一个内存泄漏。
https://stackoverflow.com/questions/8656931
复制相似问题