This is very interesting.

However, isn't it the job of the compiler to figure out that the signatures of an interface has been implemented ?

I did the following change to EmbedResultSet40:

I added "implements java.sql.ResultSet" in the class definition. The compilation then failed with:

[javac] /home/ak136785/devel/derbydev/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet40.java:33: org.apache.derby.impl.jdbc.EmbedResultSet40 is not abstract and does not override abstract method updateNCharacterStream(java.lang.String,java.io.Reader,int) in java.sql.ResultSet
.. + warnings


The base class of EmbedResultSet40 also claims that it implements java.sql.ResultSet, however it is compiled against a previous jre version which does not have the new methods. By declaring that the EmbedResultSet40 class implements java.sql.ResultSet, I make the compiler check that the class implements the interface when compiling it with the 1.6 jre.

I think it would be good for all EmbedXXX40 to declare which interface they are supposed to implement, and then the compiler will make sure that all signatures are satisfied.

Also, I think this also indicates that we should consider using delegation instead of inheritance for code reuse.

Andreas



Knut Anders Hatlen (JIRA) wrote:
     [ http://issues.apache.org/jira/browse/DERBY-1146?page=all ]

Knut Anders Hatlen updated DERBY-1146:
--------------------------------------

    Attachment: client.txt
                embedded.txt

The test is not ready to be uploaded yet, but I thought I'd share the
results I have found so far. The attached files embedded.txt and
client.txt list all the methods that were missing or incorrect.

In the embedded driver, 58 methods are missing and one method has
incorrect return value. The methods belong in these classes:

org.apache.derby.iapi.jdbc.BrokeredCallableStatement40
org.apache.derby.iapi.jdbc.BrokeredConnection40
org.apache.derby.iapi.jdbc.BrokeredPreparedStatement40
org.apache.derby.iapi.jdbc.BrokeredStatement
org.apache.derby.impl.jdbc.EmbedBlob
org.apache.derby.impl.jdbc.EmbedCallableStatement40
org.apache.derby.impl.jdbc.EmbedClob
org.apache.derby.impl.jdbc.EmbedConnection40
org.apache.derby.impl.jdbc.EmbedDatabaseMetaData40
org.apache.derby.impl.jdbc.EmbedParameterMetaData30
org.apache.derby.impl.jdbc.EmbedPreparedStatement40
org.apache.derby.impl.jdbc.EmbedResultSet40
org.apache.derby.impl.jdbc.EmbedResultSetMetaData
org.apache.derby.impl.jdbc.EmbedStatement
org.apache.derby.jdbc.EmbedPooledConnection
org.apache.derby.jdbc.EmbedXAConnection
org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource
org.apache.derby.jdbc.EmbeddedDataSource40
org.apache.derby.jdbc.EmbeddedXADataSource

In the client driver, 54 methods are missing. The methods belong in
these classes:

org.apache.derby.client.ClientXAConnection
org.apache.derby.client.am.Blob
org.apache.derby.client.am.CallableStatement40
org.apache.derby.client.am.Clob
org.apache.derby.client.am.ColumnMetaData
org.apache.derby.client.am.LogicalConnection
org.apache.derby.client.am.ParameterMetaData
org.apache.derby.client.am.PreparedStatement40
org.apache.derby.client.am.Statement
org.apache.derby.client.net.NetConnection40
org.apache.derby.client.net.NetDatabaseMetaData40
org.apache.derby.client.net.NetResultSet40
org.apache.derby.jdbc.ClientConnectionPoolDataSource
org.apache.derby.jdbc.ClientDataSource40
org.apache.derby.jdbc.ClientXADataSource

Verify that JDBC4 signatures satisfied
--------------------------------------

         Key: DERBY-1146
         URL: http://issues.apache.org/jira/browse/DERBY-1146
     Project: Derby
        Type: Improvement
  Components: JDBC, Test
    Versions: 10.2.0.0
    Reporter: Rick Hillegas
    Assignee: Knut Anders Hatlen
 Attachments: client.txt, embedded.txt

Add to the jdbc40 suite a test which verifies that our JDBC4 classes satisfy 
the expected class/interface signatures.


Reply via email to