Java 如何在Eclipse中生成自定义编译器警告?
我正在尝试将其作为DBCP的连接池替代方案。我将Java 如何在Eclipse中生成自定义编译器警告?,java,eclipse,compiler-warnings,suppress-warnings,bonecp,Java,Eclipse,Compiler Warnings,Suppress Warnings,Bonecp,我正在尝试将其作为DBCP的连接池替代方案。我将bonecp-0.8.0rc-1.jar添加到我的运行时类路径中,并将代码从示例页面复制粘贴到我的测试驱动程序中: Connection connection = null; BoneCP connectionPool; try { Class.forName(config.getDatabaseLogger().getJDBCDriver()); BoneCPConfig boneConfig = configureBoneCP
bonecp-0.8.0rc-1.jar
添加到我的运行时类路径中,并将代码从示例页面复制粘贴到我的测试驱动程序中:
Connection connection = null;
BoneCP connectionPool;
try {
Class.forName(config.getDatabaseLogger().getJDBCDriver());
BoneCPConfig boneConfig = configureBoneCP(config);
connectionPool = new BoneCP(boneConfig);
connection = connectionPool.getConnection(); // fetch a connection
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在一行中,内容如下:
connectionPool = new BoneCP(boneConfig);
Eclipse(Juno)给了我一个编译器警告:
资源泄漏:“connectionPool”从未关闭
然后它给了我一个选项“将@SuppressWarnings'resource'添加到newConnectionManager”(newConnectionManager()
引用了其中包含的类)
这怎么可能Eclipse如何知道关于BoneCP
对象的任何信息,以及它如何知道它必须关闭?这是BoneCP库附带的某种“自定义警告”吗?如果是这样,我如何向自己的项目添加/注释代码,以帮助警告下游开发人员他们没有正确使用我的库?提前谢谢
How does Eclipse know anything about a BoneCP object,
and how does it know that it must be closed?
实现接口java.io.Closeable(自JDK 1.5起)和java.lang.AutoCloseable(自JDK 1.7起)的类被视为表示外部资源,当不再需要它们时,应该使用方法close()关闭它们
EclipseJava编译器能够分析使用此类类型的代码是否遵守此策略
对象不直接表示操作系统资源。如果包装的资源已关闭,则包装器不需要关闭。相反,如果包装器被关闭,这将包括关闭包装的资源。该分析还有第二个白名单用于检测包装器资源,并将识别底层实际资源是否将通过包装器直接或间接关闭。任何一个都足以消除有关资源泄漏的警告白名单包含java.io、java.util.zip、java.security、java.beans和java.sound.sampled中的类
您的BoneCP类实现了接口java.io.Serializable,这可能就是原因。警告是由以下语句引起的:
connection = connectionPool.getConnection();
方法
getConnection()
返回自Java 7以来实现的类型的对象。当Eclipse无法确定实现java.io.Closeable
或java.lang.AutoCloseable
的资源是否被所有可能的代码路径关闭时,会生成此警告 你有用于BoneCp的Javadoc吗?我做了同样的事情,但我无法复制它。没有实现这些接口。但是没有实现它们中的任何一个?关于Connection
interface呢?它有一个方法close()…怎么样?…但是警告出现在BoneCP
实例(连接池)上,而不是java.sql.Connection
实例上@Baadshah在那里读到了下面一行:如果一个方法将一个资源返回给它的调用者,它不负责关闭;没有报告任何问题。:)