Thread: BUG #1065: JDBC DataSource Serializability

BUG #1065: JDBC DataSource Serializability

From
"PostgreSQL Bugs List"
Date:
The following bug has been logged online:

Bug reference:      1065
Logged by:          R. Lemos

Email address:      rslemos@nce.ufrj.br

PostgreSQL version: 7.4

Operating system:   Linux

Description:        JDBC DataSource Serializability

Details:

The JDBC2 pooled datasource(org.postgresql.jdbc2.optional.ConnectionPool),
although implements java.io.Serializable, cannot be correctly serialized.
Its superclass does not implement java.io.Serializable and have important
fields marked as private.

Either should the superclass be Serializable or its fields non-private
(protected, friend or public).

To reproduce the issue just create and setup a ConnectionPool, serialize and
desserialize it (ByteArray*Stream will do). The new object doesn't have the
properties correctly set.

This may apply to other DataSource implementations (JDBC3 and non-pooled).

PS: I could have corrected this and submitted the patch, but I don't know
why are those properties private nor why isn't the superclass Serializable,
so I could not preview the impact those changes would make.

Re: BUG #1065: JDBC DataSource Serializability

From
Kris Jurka
Date:
> The following bug has been logged online:
>
> Bug reference:      1065
> Logged by:          R. Lemos
>
> The JDBC2 pooled datasource(org.postgresql.jdbc2.optional.ConnectionPool),
> although implements java.io.Serializable, cannot be correctly serialized.
> Its superclass does not implement java.io.Serializable and have important
> fields marked as private.

The BaseDataSource class cannot be made Serializable because one of its
subclasses (PoolingDataSource) cannot be serialized.  The
PoolingDataSource class has member variables which can contain active
database connections which can't be persisted.

> Either should the superclass be Serializable or its fields non-private
> (protected, friend or public).
>

Simply marking the fields with a weaker access level won't magically
persist them.  This requires manually using writeObject and
readObject.  This problem also occurs in SimpleDataSource.  I've
attached the patch I've applied to the gborg cvs repository.

Thanks for the report.

Kris Jurka