1.7 中 javax.sql.CommonDataSource 添加了新方法

2024-04-02

尝试针对 java 1.7 编译我的应用程序,我发现 javax.sql.CommonDataSource (以及 j.s.DataSource 中)添加了一个新方法 - 。getParentLogger()。你可以比较一下通用数据源:1.7 http://docs.oracle.com/javase/7/docs/api/javax/sql/CommonDataSource.html with 通用数据源:1.6 http://docs.oracle.com/javase/6/docs/api/javax/sql/CommonDataSource.html

对我来说,这种变化肯定会破坏向后兼容性。例如,我的应用程序(包含 DataSource 的实现)甚至无法在不更改代码的情况下针对 1.7 进行编译。

在我看来,这应该是这样做的非常充分的理由——但我什至无法用谷歌搜索到一个。有人可以解释这一变化背后的原因吗?它应该如何正确处理它——对我来说,这是我第一次遇到与java向后不兼容的问题,所以我这里没有任何“最佳实践”......


如果您还没有准备好支持针对 Java 7 编译应用程序,您仍然可以使用 Java 7 编译器针对 Java 1.6 进行编译。您需要安装 Java 1.6 运行时环境(或 SDK)。如果你尝试编译一个MyDataSource.java实现存根的类DataSource使用 Java 7 编译器,您可能会看到以下内容:

$ 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:

$ 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1.7 中 javax.sql.CommonDataSource 添加了新方法 的相关文章

随机推荐