help regarding socket and postgresql
hi, i found this error while im generating a report
for my system, "Aging of Accounts Receivables"
hope someone might give me a hint to what should i do.
here's my StackTrace:
***Exception:
org.postgresql.util.PSQLException: The connection attempt failed because Exception: java.net.BindException: Address already in use: connect
Stack Trace:
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:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)
at org.postgresql.core.PGStream.<init>(PGStream.java:47)
at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:197)
at org.postgresql.Driver.connect(Driver.java:139)
org.postgresql.util.PSQLException: The connection attempt failed because Exception: java.net.BindException: Address already in use: connect
Stack Trace:
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:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)
at org.postgresql.core.PGStream.<init>(PGStream.java:47)
at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:197)
at org.postgresql.Driver.connect(Driver.java:139)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.postgresql.jdbc2.optional.BaseDataSource.getConnection(BaseDataSource.java:72)
at org.postgresql.jdbc2.optional.BaseDataSource.getConnection(BaseDataSource.java:55)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.postgresql.jdbc2.optional.BaseDataSource.getConnection(BaseDataSource.java:72)
at org.postgresql.jdbc2.optional.BaseDataSource.getConnection(BaseDataSource.java:55)
at org.postgresql.jdbc3.Jdbc3ConnectionPool.getPooledConnection(Jdbc3ConnectionPool.java:39)
at org.postgresql.jdbc3.Jdbc3ConnectionPool.getPooledConnection(Jdbc3ConnectionPool.java:39)
at org.postgresql.jdbc2.optional.PoolingDataSource.getPooledConnection(PoolingDataSource.java:406)
at org.postgresql.jdbc2.optional.PoolingDataSource.getConnection(PoolingDataSource.java:338)
at csfwdbillingmodules.dbConnect.<init>(dbConnect.java:73)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.processAccountAR(frmAgingOfAccounts.java:794)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.genDetailedReport(frmAgingOfAccounts.java:1102)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.doInBackground(frmAgingOfAccounts.java:406)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.doInBackground(frmAgingOfAccounts.java:400)
at javax.swing.SwingWorker$1.call(SwingWorker.java:279)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at javax.swing.SwingWorker.run(SwingWorker.java:319)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
End of Stack Trace
at org.postgresql.jdbc2.optional.PoolingDataSource.getPooledConnection(PoolingDataSource.java:406)
at org.postgresql.jdbc2.optional.PoolingDataSource.getConnection(PoolingDataSource.java:338)
at csfwdbillingmodules.dbConnect.<init>(dbConnect.java:73)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.processAccountAR(frmAgingOfAccounts.java:794)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.genDetailedReport(frmAgingOfAccounts.java:1102)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.doInBackground(frmAgingOfAccounts.java:406)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.doInBackground(frmAgingOfAccounts.java:400)
at javax.swing.SwingWorker$1.call(SwingWorker.java:279)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:208)
at org.postgresql.Driver.connect(Driver.java:139)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.postgresql.jdbc2.optional.BaseDataSource.getConnection(BaseDataSource.java:72)
at org.postgresql.jdbc2.optional.BaseDataSource.getConnection(BaseDataSource.java:55)
at org.postgresql.jdbc3.Jdbc3ConnectionPool.getPooledConnection(Jdbc3ConnectionPool.java:39)
at org.postgresql.jdbc2.optional.PoolingDataSource.getPooledConnection(PoolingDataSource.java:406)
at org.postgresql.jdbc2.optional.PoolingDataSource.getConnection(PoolingDataSource.java:338)
at csfwdbillingmodules.dbConnect.<init>(dbConnect.java:73)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.processAccountAR(frmAgingOfAccounts.java:794)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.genDetailedReport(frmAgingOfAccounts.java:1102)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.doInBackground(frmAgingOfAccounts.java:406)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.doInBackground(frmAgingOfAccounts.java:400)
at javax.swing.SwingWorker$1.call(SwingWorker.java:279)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at javax.swing.SwingWorker.run(SwingWorker.java:319)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
java.lang.NullPointerException
at csfwdbillingmodules.dbConnect.query(dbConnect.java:96)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.processAccountAR(frmAgingOfAccounts.java:798)
at csfwdbillingmodules.frmAgingOfAccounts$genAgingOfAccounts.genDetailedReport(frmAgingOfAccounts.java:1102)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at javax.swing.SwingWorker.run(SwingWorker.java:319)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
End of Stack Trace
here's my dbConnect.class:
/*
* dbConnect.java
*
* Created on November 14, 2006, 5:06 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/**
*
* @author darkoasis
*/
package csfwdbillingmodules;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketException;
import java.net.SocketImpl;
import java.sql.*; // All we need for JDBC
import javax.naming.NamingException;
import org.postgresql.jdbc3.Jdbc3PoolingDataSource;
public class dbConnect
extends java.lang.Object
{
private Socket socket;
private SocketImpl socketImpl;
private int refPosition = 0;
private Jdbc3PoolingDataSource source = new Jdbc3PoolingDataSource();
private DriverManager drvMgr;
private Connection db = null; // A connection to the database
private Statement sql; // Our statement to run queries with
private ResultSet results; // A result container
private DatabaseMetaData dbmd; // This is basically info the driver delivers
// about the DB it just connected to. I use
// it to get the DB version to confirm the
// connection in this example.
/** Creates a new instance of dbConnect */
public dbConnect()
{
try
{
this.source.setServerName("10.10.10.10");
this.source.setDatabaseName("myDB");
this.source.setUser("xxxx");
this.source.setPassword("xxxx");
this.db = this.source.getConnection();
this.socket = new Socket();
dbmd = this.db.getMetaData(); //get MetaData to confirm connection
sql = this.db.createStatement(); //create a statement that we can use later
}
catch (Exception ex)
{
System.out.println("***Exception:\n"+ex);
ex.printStackTrace();
}
}
public ResultSet query(String strSQL)
throws SQLException
{
this.results = this.sql.executeQuery(strSQL);
return this.results;
}
public void update(String strSQL)
throws SQLException
{
this.sql.executeUpdate(strSQL);
}
public void close()
throws Exception
{
this.db.close();
this.socket.close();
this.source.close();
}
public boolean isClosed()
throws SQLException
{
return this.db.isClosed();
}
}
i ran into some forums and found this:
"
Hi Graham
I'm making a bit of progress. I found a website that suggested the following
//////////////////////////////////////////////////////////////////////
This is a problem of the used sockets with Windows NT. You can request the active sockets with the command netstat. The problem is a function of:
MaxUserPort (default 5000)
KeepAliveTime (default 120)
////////////////////////////////////////////////////////////////////
it suggested the workaround was connection pooling
I have run netstat to look at the number of connections when the problem occurs and waited for the timeout to reset the os back to the minimum and on each occasion my report has run
Does this sound logical?
If so
do you have any examples on connection pooling
"
it seems that even if i have closed my database connection it still doesn't free my port that was used, that's why i get this error
i am looking for a way to close my db connection and free its socket or port used at the same time, hope you can help,
thanks in advance

