Some more info:
It's definitely an issue with the jtds driver creating too many
connections which end up in TIME_WAIT and then running out of client
connections (verified using tcpview). I was using the dbcp
BasicDataSource as in:
<bean id="mssql-ds" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
<property name="url"
value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=DB"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
which resulted in the "Address already in use: connect" issue. By
moving to the following configuration:
<bean id="mssql-ds" class="net.sourceforge.jtds.jdbcx.JtdsDataSource">
<property name="serverName" value="localhost"/>
<property name="portNumber" value="1443"/>
<property name="databaseName" value="xxx"/>
<property name="user" value="xxx"/>
<property name="password" value="xxx"/>
</bean>
the exception goes away but the too many connections problem is still
there. the jtdsdatasource just pauses until the TIME_WAIT connections
free up and then carries on from where it left off.
It's all a bit odd because this message from the jtds guys suggests
that it shouldn't be using quite so many connections:
http://forum.java.sun.com/thread.jspa?messageID=3973963
i could mess with my operating system's tcp settings to reduce the
TcpTimedWaitDelay but it feels more like treating the symptoms rather
than addressing the problem.
I'll see if I can get more information from the jtds guys but if
anyone else has solved the problem for activemq and mssqlserver or has
any ideas, let me know.
cheers,
j.
On 7/12/06, Jamie McCrindle <[EMAIL PROTECTED]> wrote:
Hi all,
First off, thanks for fixing the autocommit bug in 4.0.1. I've
upgraded now and I seem to be getting a new problem using sqlserver
2005 and jtds under load, specifically:
Caused by: java.net.BindException: Address already in use: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:507)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSoc
ket.java:289)
at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:250)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java
:297)
The only reference on the internets that I could find related to this issue is:
http://sourceforge.net/forum/message.php?msg_id=2377819
any idea's?
versions of things:
SQLServer 2005
jTDS 1.2
cheers,
j.