关于jboss配置mssql数据库连接不能释放2

wenzhihong2003 2006-08-01 09:14:28
现在我的应用中对数据源的配置如下
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/scichina</jndi-name>
<connection-url>jdbc:microsoft:sqlserver://192.168.0.101:1433;DatabaseName=scichina</connection-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<user-name>scichina</user-name>
<password>password</password>

<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
<max-idle-timeout>0</max-idle-timeout>
<track-statements>true</track-statements>
<prepared-statement-cache-size>50</prepared-statement-cache-size>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<idle-timeout-minutes>10</idle-timeout-minutes>


<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->

<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->

<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>MS SQLSERVER2000</type-mapping>
</metadata>
</local-tx-datasource>

</datasources>
这样启动应用时,可以正常的访问,可是每执行一个sql语句,就要占用一个连接,所以连接马上被用完了,应用也就死了.
后参考网上大牛的文章,做如下配置:
将D:\jboss-4.0.4.CR2\server\default\deploy\jbossweb-tomcat55.sar下的server.xml文件的
<!-- Uncomment to check for unclosed connections and transaction terminated checks
in servlets/jsps.
Important: You need to uncomment the dependency on the CachedConnectionManager
in META-INF/jboss-service.xml
-->
<Valve className="org.jboss.web.tomcat.tc5.jca.CachedConnectionValve"
cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
transactionManagerObjectName="jboss:service=TransactionManager" />
的注释给去掉,在把D:\jboss-4.0.4.CR2\server\default\deploy\jbossweb-tomcat55.sar\META-INF的jboss-server.xml文件里的
<!-- Only needed if the org.jboss.web.tomcat.tc5.jca.CachedConnectionValve
is enabled in the tomcat server.xml file
-->
<depends>jboss.jca:service=CachedConnectionManager</depends>
的注释给去掉.

这样应用就可以一直的运行下去,也不会出现数据库连接被用完的现像,可是日志里记录了只要是访问数据库就会出现了一个如下异常:

2006-07-28 16:14:09,093 INFO STDOUT [Thread:http-0.0.0.0-8000-2](28 16:14:09)<SQL> SELECT COUNT(*) FROM MsgRef WHERE Folder=2 AND Status=0 AND Owner=105
2006-07-28 16:14:09,093 INFO STDOUT [Thread:http-0.0.0.0-8000-2](28 16:14:09)Closing database connection...
2006-07-28 16:14:09,093 INFO [org.jboss.resource.connectionmanager.CachedConnectionManager] Closing a connection for you. Please close them yourself: org.jboss.resource.adapter.jdbc.WrappedConnection@113dd59
java.lang.Throwable: STACKTRACE
at org.jboss.resource.connectionmanager.CachedConnectionManager.registerConnection(CachedConnectionManager.java:290)
at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:400)
at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:812)
at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:88)
at com.science.core.CacheManager.getConnection(Unknown Source)
at org.apache.jsp.author.index_jsp._jspService(index_jsp.java:373)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at com.science.servlet.AuthorServlet.doPost(Unknown Source)
at com.science.servlet.AuthorServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:54)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:174)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:153)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)

请问这个异常是怎么回事?
还有就是能不能说一下jboss是怎么来管理数据库连池的原理的,是不是每个连接如果我不关闭的话,jboss都会自动的给我
关闭.
有没有大牛能分析一下jboss的管理数据库连接的源码吗?

如果不把上面的相应配置文件的注释给去掉了话,只要是每执行一个sql语句,它就会占用一个连接,而我配的最大连接数是10,所以只要是执行了10条sql语句应用也就死了.每执行一个sql语句的时间很短,只要不到1秒钟.
网上大牛的文章在jboss的官方论坛上,具体地址我忘记了.

如果把上面的相应的配置文件的注释给去掉了,那应用过多长时间都不会死,数据库连接也都能释放,可在日志里总有我上面提到的异常.

在源代码里每个数据库连接都是关闭了的,而且都是写在finally里的
...全文
286 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,541

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧