From: | "Alexandre Brito" <alexandre(dot)brito(at)wit-software(dot)com> |
---|---|
To: | <pgsql-jdbc(at)postgresql(dot)org> |
Subject: | SocketTimeout and ConnectionTimeout |
Date: | 2016-08-25 11:22:00 |
Message-ID: | 006c01d1fec2$e6152130$b23f6390$@wit-software.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Hi,
We are facing a problem with the JBDC connection being drop silently and the
driver is not throwing a SQL Exception in a timely manner.
Going through the mailing-list and the internet, it seems the problem is not
so rare however the solution is still out of my reach.
What is happening is simple:
1. JDBC connection is open and then stays idle
2. A network component (Fortinet) beyond our control seems to be
dropping idle TCP connections.
3. Our webapp places a query and it takes 1min and 12 seconds (more or
less) for the SQL Exception to be caught.
We've reproduced the issue behaviour (on our environment ) by setting an
iptables rule blocking port 5432 after the DB connection was successfully
established. On the logs I can see the socket read (I think) timeout is
around 12 seconds and then there are 6 retries 10 secs apart. (see the
extracted log file from tomcat attached with EL log to finest)
I would like to have control over the number of retries and timeout.
Basically, I would like the receive an SQL Connection Timeout Exception
within 5-10 seconds.
We are using tomcat 8 and latest JDCB driver (9.4.1209 JDBC42) and JPA.
Our schema is tiny and the data in it very very small.
This is my tomcat's context.xml (for troubleshooting proposes) .
<Resource auth="Container"
driverClassName="org.postgresql.Driver"
maxTotal="1"
maxIdle="1"
maxWaitMillis="3000"
name="jdbc/postgresqlconnection"
type="javax.sql.DataSource"
url="jdbc:postgresql://127.0.0.1:5432/onbbp?
connectionTimeout=2&socketTimeout=2"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
username="user"
password="pass"
/>
This is my apps's persistence.xml
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="bp-persistence"
transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>java:comp/env/jdbc/postgresqlconnection</non-jta-data-s
ource>
<class>com.all.onbbp.database.entities.BpUser</class>
<class>com. all.onbbp.database.entities.BusinessPartner</class>
<class>com. all.onbbp.database.entities.Enterprise</class>
<class>com. all.onbbp.database.entities.Property</class>
<class>com. all.onbbp.database.entities.LokiCookie</class>
<class>com. all.onbbp.database.entities.Report</class>
<class>com. all.onbbp.database.entities.Languages</class>
<class>com. all.onbbp.database.entities.EmailTemplates</class>
<class>com. all.onbbp.database.entities.BpMutex</class>
<class>com. all.onbbp.database.entities.UserSession</class>
<shared-cache-mode>NONE</shared-cache-mode>
<properties>
<property name="javax.persistence.validation.mode"
value="AUTO" />
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
Btw the, this is how the EntityManager is initialized
public class StartupListener implements ServletContextListener {
.
private static EntityManagerFactory entityManagerFactory;
@Override
public void contextInitialized(ServletContextEvent sce) {
try {
try {
entityManagerFactory =
Persistence.createEntityManagerFactory("bp-persistence");
} catch (Throwable ex) {
throw new
BPException(BPErrorCode.INTERNAL_SERVER_ERROR_DB_ERROR);
}
Does anyone has an idea? Why does the connectionTimeout to the database take
so long to return (more than 12 seconds)?
Many thanks in advance for any reply
Alexandre
Attachment | Content-Type | Size |
---|---|---|
connectioTimeout_takes_too_long.txt | text/plain | 24.5 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Dave Cramer | 2016-08-25 17:03:20 | Re: SocketTimeout and ConnectionTimeout |
Previous Message | Evan Meagher | 2016-08-23 18:35:47 | Re: Invoking a function within a batch statement |