界: API Abuse

API 就像是呼叫者與被呼叫者之間簽訂的規定。最常見的 API 濫用形式是由呼叫者這一當事方未能遵守此規定所造成的。例如,如果程式在呼叫 chroot() 後無法呼叫 chdir(),即違反規範如何以安全方式變更使用中根目錄的規定。程式庫濫用的另一個好例子是期待被呼叫者向呼叫者傳回值得信賴的 DNS 資訊。在這種情況下,呼叫者是透過對其行為做出某些假設 (傳回值可用於驗證目的) 來濫用被呼叫者 API。另一方也可能違反呼叫者與被呼叫者間的規定。例如,如果編碼器衍生出子類別 SecureRandom 並傳回一個非隨機值,則違反了規定。

J2EE Bad Practices: getConnection()

Abstract
J2EE 標準會禁止直接連線管理。
Explanation
J2EE 標準會要求應用程式使用容器的資源管理工具來取得資源連線。

例如,一個 J2EE 應用程式應該以下列方式取得資料庫連線:


ctx = new InitialContext();
datasource = (DataSource)ctx.lookup(DB_DATASRC_REF);
conn = datasource.getConnection();


並且應避免使用下列方式取得連線:


conn = DriverManager.getConnection(CONNECT_STRING);


每一個主要的 Web 應用程式容器都會提供集區資料庫連線管理,並將其做為資源管理框架的一部分。在應用程式中複製這個功能是很困難的,且容易出錯,這也是 J2EE 標準禁止這種行為的原因之一。
References
[1] Java 2 Platform Enterprise Edition Specification, v1.4 Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 245
desc.semantic.java.j2ee_badpractices_getconnection