準備が整っていなければJava 7用のアプリケーションのコンパイルをサポートするために、Java 7コンパイラを使用してJava 1.6用にコンパイルすることはできます。 Java 1.6ランタイム環境(またはSDK)がインストールされている必要があります。あなたは、Java 7のコンパイラを使用してスタブDataSource
を実装MyDataSource.java
クラスをコンパイルしようとすると、次が表示される場合があります
$ java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Server VM (build 21.0-b17, mixed mode)
$ javac -version
javac 1.7.0
$ javac MyDataSource.java
MyDataSource.java:7: error: MyDataSource is not abstract and does not override abstract method getParentLogger() in CommonDataSource
public class MyDataSource implements DataSource {
^
1 error
あなたは生産、あなたは、Java 1.6のために書かれたソースファイルを使用したいコンパイラに指示する必要がありますJavaのバイトコード1.6とどこのJava 1.6ランタイムJAR見つけるために:@Override注釈なしで要求された新しい方法(複数可)を追加し
$ javac -source 1.6 -target 1.6 -bootclasspath <path to Java 1.6 JRE>/lib/rt.jar MyDataSource.java
$ file MyDataSource.class
MyDataSource.class: compiled Java class data, version 50.0 (Java 1.6)
$ javap MyDataSource
Compiled from "MyDataSource.java"
public class MyDataSource implements javax.sql.DataSource {
public MyDataSource();
public java.io.PrintWriter getLogWriter() throws java.sql.SQLException;
public void setLogWriter(java.io.PrintWriter) throws java.sql.SQLException;
public void setLoginTimeout(int) throws java.sql.SQLException;
public int getLoginTimeout() throws java.sql.SQLException;
public <T extends java/lang/Object> T unwrap(java.lang.Class<T>) throws java.sql.SQLException;
public boolean isWrapperFor(java.lang.Class<?>) throws java.sql.SQLException;
public java.sql.Connection getConnection() throws java.sql.SQLException;
public java.sql.Connection getConnection(java.lang.String, java.lang.String) throws java.sql.SQLException;
}
はこれが初めてではありません。これは、JDBCを更新するときに常に発生します。私はこれがNice Thing(tm)ではないことに同意します。たとえば、多くのドライバは、これのために別のバージョンを維持する必要があります。それは痛みですが、コンパイルエラーだけでなく、実行時エラー(JDK6用にビルドして、それをJDK7に対して実行することもできます)では発生しません。 – Thilo
JDBCインタフェースは過去に数回(メソッドを追加することによって)後方互換性がなくなりました。クラスに追加のメソッドを追加できるはずです。1.7より前の環境で問題なく動作するはずです。 –
Hm ...バイナリ互換性が損なわれませんか?つまり、私のDSの実装は、新しいメソッドを追加することなく、古いDSに対してコンパイルされました。バイナリの互換性のない変更のようですね。 – BegemoT