Обсуждение: Database reset connection

Поиск
Список
Период
Сортировка

Database reset connection

От
Manoj Palhade
Дата:

Hi,

I have Java class which implements the Database(Postgres) related functionality.

The problem is if Database stopped and then restart then My this class throws SQLException as connection got reset(database is up and running).

Is there any way that after Database restarted; my class automatically Connection to database and work as expected instead of throwing SQLException.

Is there anyway with Properties as a parameter to DriverManager.getConnection().

Thanks and Regards,

Manoj Palhade

Re: Database reset connection

От
Dave Cramer
Дата:

On 30 November 2016 at 06:18, Manoj Palhade <reply.manoj@gmail.com> wrote:

Hi,

I have Java class which implements the Database(Postgres) related functionality.

The problem is if Database stopped and then restart then My this class throws SQLException as connection got reset(database is up and running).

Is there any way that after Database restarted; my class automatically Connection to database and work as expected instead of throwing SQLException.

Is there anyway with Properties as a parameter to DriverManager.getConnection().

Thanks and Regards,

Manoj Palhade


It really isn't that simple. What happens if the database never comes back? This is why the application has to handle this. It should be trivial for you write a wrapper that retries intelligently to reconnect. 

Regards,



 

Re: Database reset connection

От
rob stone
Дата:
On Wed, 2016-11-30 at 16:48 +0530, Manoj Palhade wrote:
> Hi,
>
> I have Java class which implements the Database(Postgres) related
> functionality.
>
> The problem is if Database stopped and then restart then My this
> class throws SQLException as connection got reset(database is up and
> running).
>
> Is there any way that after Database restarted; my class
> automatically Connection to database and work as expected instead of
> throwing SQLException.
>
> Is there anyway with Properties as a parameter to
> DriverManager.getConnection().
>
> Thanks and Regards,
>
> Manoj Palhade
>



From the javdoc's:-

 isValid

boolean isValid(int timeout)
                throws SQLException

    Returns true if the connection has not been closed and is still
valid. The driver shall submit a query on the connection or use some
other mechanism that positively verifies the connection is still valid
when this method is called.

    The query submitted by the driver to validate the connection shall
be executed in the context of the current transaction.

    Parameters:
        timeout - - The time in seconds to wait for the database
operation used to validate the connection to complete. If the timeout
period expires before the operation completes, this method returns
false. A value of 0 indicates a timeout is not applied to the database
operation.

    Returns:
        true if the connection is valid, false otherwise 
    Throws:
        SQLException - if the value supplied for timeout is less then 0
    Since:
        1.6

    See Also:
        DatabaseMetaData.getClientInfoProperties()



Re: Database reset connection

От
Dave Cramer
Дата:

On 30 November 2016 at 06:18, Manoj Palhade <reply.manoj@gmail.com> wrote:

Hi,

I have Java class which implements the Database(Postgres) related functionality.

The problem is if Database stopped and then restart then My this class throws SQLException as connection got reset(database is up and running).

Is there any way that after Database restarted; my class automatically Connection to database and work as expected instead of throwing SQLException.

Is there anyway with Properties as a parameter to DriverManager.getConnection().

Thanks and Regards,

Manoj Palhade


It really isn't that simple. What happens if the database never comes back? This is why the application has to handle this. It should be trivial for you write a wrapper that retries intelligently to reconnect. 

Regards,



 

Re: Database reset connection

От
rob stone
Дата:
On Wed, 2016-11-30 at 16:48 +0530, Manoj Palhade wrote:
> Hi,
>
> I have Java class which implements the Database(Postgres) related
> functionality.
>
> The problem is if Database stopped and then restart then My this
> class throws SQLException as connection got reset(database is up and
> running).
>
> Is there any way that after Database restarted; my class
> automatically Connection to database and work as expected instead of
> throwing SQLException.
>
> Is there anyway with Properties as a parameter to
> DriverManager.getConnection().
>
> Thanks and Regards,
>
> Manoj Palhade
>



From the javdoc's:-

 isValid

boolean isValid(int timeout)
                throws SQLException

    Returns true if the connection has not been closed and is still
valid. The driver shall submit a query on the connection or use some
other mechanism that positively verifies the connection is still valid
when this method is called.

    The query submitted by the driver to validate the connection shall
be executed in the context of the current transaction.

    Parameters:
        timeout - - The time in seconds to wait for the database
operation used to validate the connection to complete. If the timeout
period expires before the operation completes, this method returns
false. A value of 0 indicates a timeout is not applied to the database
operation.

    Returns:
        true if the connection is valid, false otherwise 
    Throws:
        SQLException - if the value supplied for timeout is less then 0
    Since:
        1.6

    See Also:
        DatabaseMetaData.getClientInfoProperties()



Re: Database reset connection

От
Manoj Palhade
Дата:
Hi,

Thanks for your quick reply.

It looks like I am using JDBC3 from the runtime exception I got
 (Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc3.Jdbc3Connection.isValid(I)Z)

I guess postgresql.jdbc3 does not have any way to auto Connection to database with timer.



Thanks and Regards,
Manoj Palhade


On Wed, Nov 30, 2016 at 5:58 PM, rob stone <floriparob@gmail.com> wrote:

On Wed, 2016-11-30 at 16:48 +0530, Manoj Palhade wrote:
> Hi,
>
> I have Java class which implements the Database(Postgres) related
> functionality.
>
> The problem is if Database stopped and then restart then My this
> class throws SQLException as connection got reset(database is up and
> running).
>
> Is there any way that after Database restarted; my class
> automatically Connection to database and work as expected instead of
> throwing SQLException.
>
> Is there anyway with Properties as a parameter to
> DriverManager.getConnection().
>
> Thanks and Regards,
>
> Manoj Palhade
>



From the javdoc's:-

 isValid

boolean isValid(int timeout)
                throws SQLException

    Returns true if the connection has not been closed and is still
valid. The driver shall submit a query on the connection or use some
other mechanism that positively verifies the connection is still valid
when this method is called.

    The query submitted by the driver to validate the connection shall
be executed in the context of the current transaction.

    Parameters:
        timeout - - The time in seconds to wait for the database
operation used to validate the connection to complete. If the timeout
period expires before the operation completes, this method returns
false. A value of 0 indicates a timeout is not applied to the database
operation.

    Returns:
        true if the connection is valid, false otherwise 
    Throws:
        SQLException - if the value supplied for timeout is less then 0
    Since:
        1.6

    See Also:
        DatabaseMetaData.getClientInfoProperties()


Re: Database reset connection

От
Manoj Palhade
Дата:
Hi,

Thanks for your quick reply.

It looks like I am using JDBC3 from the runtime exception I got
 (Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc3.Jdbc3Connection.isValid(I)Z)

I guess postgresql.jdbc3 does not have any way to auto Connection to database with timer.



Thanks and Regards,
Manoj Palhade


On Wed, Nov 30, 2016 at 5:58 PM, rob stone <floriparob@gmail.com> wrote:

On Wed, 2016-11-30 at 16:48 +0530, Manoj Palhade wrote:
> Hi,
>
> I have Java class which implements the Database(Postgres) related
> functionality.
>
> The problem is if Database stopped and then restart then My this
> class throws SQLException as connection got reset(database is up and
> running).
>
> Is there any way that after Database restarted; my class
> automatically Connection to database and work as expected instead of
> throwing SQLException.
>
> Is there anyway with Properties as a parameter to
> DriverManager.getConnection().
>
> Thanks and Regards,
>
> Manoj Palhade
>



From the javdoc's:-

 isValid

boolean isValid(int timeout)
                throws SQLException

    Returns true if the connection has not been closed and is still
valid. The driver shall submit a query on the connection or use some
other mechanism that positively verifies the connection is still valid
when this method is called.

    The query submitted by the driver to validate the connection shall
be executed in the context of the current transaction.

    Parameters:
        timeout - - The time in seconds to wait for the database
operation used to validate the connection to complete. If the timeout
period expires before the operation completes, this method returns
false. A value of 0 indicates a timeout is not applied to the database
operation.

    Returns:
        true if the connection is valid, false otherwise 
    Throws:
        SQLException - if the value supplied for timeout is less then 0
    Since:
        1.6

    See Also:
        DatabaseMetaData.getClientInfoProperties()


Re: Database reset connection

От
Dave Cramer
Дата:
No, as I said this is out of the scope of JDBC


On 1 December 2016 at 00:30, Manoj Palhade <reply.manoj@gmail.com> wrote:
Hi,

Thanks for your quick reply.

It looks like I am using JDBC3 from the runtime exception I got
 (Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc3.Jdbc3Connection.isValid(I)Z)

I guess postgresql.jdbc3 does not have any way to auto Connection to database with timer.



Thanks and Regards,
Manoj Palhade


On Wed, Nov 30, 2016 at 5:58 PM, rob stone <floriparob@gmail.com> wrote:

On Wed, 2016-11-30 at 16:48 +0530, Manoj Palhade wrote:
> Hi,
>
> I have Java class which implements the Database(Postgres) related
> functionality.
>
> The problem is if Database stopped and then restart then My this
> class throws SQLException as connection got reset(database is up and
> running).
>
> Is there any way that after Database restarted; my class
> automatically Connection to database and work as expected instead of
> throwing SQLException.
>
> Is there anyway with Properties as a parameter to
> DriverManager.getConnection().
>
> Thanks and Regards,
>
> Manoj Palhade
>



From the javdoc's:-

 isValid

boolean isValid(int timeout)
                throws SQLException

    Returns true if the connection has not been closed and is still
valid. The driver shall submit a query on the connection or use some
other mechanism that positively verifies the connection is still valid
when this method is called.

    The query submitted by the driver to validate the connection shall
be executed in the context of the current transaction.

    Parameters:
        timeout - - The time in seconds to wait for the database
operation used to validate the connection to complete. If the timeout
period expires before the operation completes, this method returns
false. A value of 0 indicates a timeout is not applied to the database
operation.

    Returns:
        true if the connection is valid, false otherwise 
    Throws:
        SQLException - if the value supplied for timeout is less then 0
    Since:
        1.6

    See Also:
        DatabaseMetaData.getClientInfoProperties()



Re: Database reset connection

От
Vladimir Sitnikov
Дата:
Manoj,

I would recommend:
1) Upgrade pgjdbc to a recent version
2) Ensure you do not have multiple pgjdbc jars on the classpath
3) Use a decent connection pool. For instance, HikariCP: https://github.com/brettwooldridge/HikariCP 

Hikari performs connection validation automatically, so the application would receive validated connections only.

Vladimir

чт, 1 дек. 2016 г. в 14:41, Dave Cramer <pg@fastcrypt.com>:
No, as I said this is out of the scope of JDBC

On 1 December 2016 at 00:30, Manoj Palhade <reply.manoj@gmail.com> wrote:
Hi,

Thanks for your quick reply.

It looks like I am using JDBC3 from the runtime exception I got
 (Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc3.Jdbc3Connection.isValid(I)Z)

I guess postgresql.jdbc3 does not have any way to auto Connection to database with timer.



Thanks and Regards,
Manoj Palhade


On Wed, Nov 30, 2016 at 5:58 PM, rob stone <floriparob@gmail.com> wrote:

On Wed, 2016-11-30 at 16:48 +0530, Manoj Palhade wrote:
> Hi,
>
> I have Java class which implements the Database(Postgres) related
> functionality.
>
> The problem is if Database stopped and then restart then My this
> class throws SQLException as connection got reset(database is up and
> running).
>
> Is there any way that after Database restarted; my class
> automatically Connection to database and work as expected instead of
> throwing SQLException.
>
> Is there anyway with Properties as a parameter to
> DriverManager.getConnection().
>
> Thanks and Regards,
>
> Manoj Palhade
>



From the javdoc's:-

 isValid

boolean isValid(int timeout)
                throws SQLException

    Returns true if the connection has not been closed and is still
valid. The driver shall submit a query on the connection or use some
other mechanism that positively verifies the connection is still valid
when this method is called.

    The query submitted by the driver to validate the connection shall
be executed in the context of the current transaction.

    Parameters:
        timeout - - The time in seconds to wait for the database
operation used to validate the connection to complete. If the timeout
period expires before the operation completes, this method returns
false. A value of 0 indicates a timeout is not applied to the database
operation.

    Returns:
        true if the connection is valid, false otherwise 
    Throws:
        SQLException - if the value supplied for timeout is less then 0
    Since:
        1.6

    See Also:
        DatabaseMetaData.getClientInfoProperties()



Re: Database reset connection

От
Dave Cramer
Дата:
No, as I said this is out of the scope of JDBC


On 1 December 2016 at 00:30, Manoj Palhade <reply.manoj@gmail.com> wrote:
Hi,

Thanks for your quick reply.

It looks like I am using JDBC3 from the runtime exception I got
 (Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc3.Jdbc3Connection.isValid(I)Z)

I guess postgresql.jdbc3 does not have any way to auto Connection to database with timer.



Thanks and Regards,
Manoj Palhade


On Wed, Nov 30, 2016 at 5:58 PM, rob stone <floriparob@gmail.com> wrote:

On Wed, 2016-11-30 at 16:48 +0530, Manoj Palhade wrote:
> Hi,
>
> I have Java class which implements the Database(Postgres) related
> functionality.
>
> The problem is if Database stopped and then restart then My this
> class throws SQLException as connection got reset(database is up and
> running).
>
> Is there any way that after Database restarted; my class
> automatically Connection to database and work as expected instead of
> throwing SQLException.
>
> Is there anyway with Properties as a parameter to
> DriverManager.getConnection().
>
> Thanks and Regards,
>
> Manoj Palhade
>



From the javdoc's:-

 isValid

boolean isValid(int timeout)
                throws SQLException

    Returns true if the connection has not been closed and is still
valid. The driver shall submit a query on the connection or use some
other mechanism that positively verifies the connection is still valid
when this method is called.

    The query submitted by the driver to validate the connection shall
be executed in the context of the current transaction.

    Parameters:
        timeout - - The time in seconds to wait for the database
operation used to validate the connection to complete. If the timeout
period expires before the operation completes, this method returns
false. A value of 0 indicates a timeout is not applied to the database
operation.

    Returns:
        true if the connection is valid, false otherwise 
    Throws:
        SQLException - if the value supplied for timeout is less then 0
    Since:
        1.6

    See Also:
        DatabaseMetaData.getClientInfoProperties()



Re: Database reset connection

От
Vladimir Sitnikov
Дата:
Manoj,

I would recommend:
1) Upgrade pgjdbc to a recent version
2) Ensure you do not have multiple pgjdbc jars on the classpath
3) Use a decent connection pool. For instance, HikariCP: https://github.com/brettwooldridge/HikariCP 

Hikari performs connection validation automatically, so the application would receive validated connections only.

Vladimir

чт, 1 дек. 2016 г. в 14:41, Dave Cramer <pg@fastcrypt.com>:
No, as I said this is out of the scope of JDBC

On 1 December 2016 at 00:30, Manoj Palhade <reply.manoj@gmail.com> wrote:
Hi,

Thanks for your quick reply.

It looks like I am using JDBC3 from the runtime exception I got
 (Caused by: java.lang.AbstractMethodError: org.postgresql.jdbc3.Jdbc3Connection.isValid(I)Z)

I guess postgresql.jdbc3 does not have any way to auto Connection to database with timer.



Thanks and Regards,
Manoj Palhade


On Wed, Nov 30, 2016 at 5:58 PM, rob stone <floriparob@gmail.com> wrote:

On Wed, 2016-11-30 at 16:48 +0530, Manoj Palhade wrote:
> Hi,
>
> I have Java class which implements the Database(Postgres) related
> functionality.
>
> The problem is if Database stopped and then restart then My this
> class throws SQLException as connection got reset(database is up and
> running).
>
> Is there any way that after Database restarted; my class
> automatically Connection to database and work as expected instead of
> throwing SQLException.
>
> Is there anyway with Properties as a parameter to
> DriverManager.getConnection().
>
> Thanks and Regards,
>
> Manoj Palhade
>



From the javdoc's:-

 isValid

boolean isValid(int timeout)
                throws SQLException

    Returns true if the connection has not been closed and is still
valid. The driver shall submit a query on the connection or use some
other mechanism that positively verifies the connection is still valid
when this method is called.

    The query submitted by the driver to validate the connection shall
be executed in the context of the current transaction.

    Parameters:
        timeout - - The time in seconds to wait for the database
operation used to validate the connection to complete. If the timeout
period expires before the operation completes, this method returns
false. A value of 0 indicates a timeout is not applied to the database
operation.

    Returns:
        true if the connection is valid, false otherwise 
    Throws:
        SQLException - if the value supplied for timeout is less then 0
    Since:
        1.6

    See Also:
        DatabaseMetaData.getClientInfoProperties()