03.05 ActFramework 1.8.32 發佈


ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架


1. ActFramework 1.8.32

ActFramework 是一款高質量的 Java Web 應用框架. 最新的 1.8.32 版本帶來了 20 項錯誤修復和更新. 其中值得關注的有:

1.1 通過 HTTP 訪問 CLI 命令 #1305

熟悉 Act 的用戶都知道在 Act 提供了大量的內置 CLI 命令, 也提供了非常方便的 CLI 命令創建機制. 如果需要在後端創建一個用戶, 只需寫出這樣的代碼即可:

<code>@PropertySpec("id")
@Command(name = "user.create", help = "create user")  
public User create(  
        @Required("specify user email") String email,  
        @Required("specify user password") char[] password,  
        @Optional("specify user role") Role role  
) {  
  User user = findByEmail(email);  
  badRequestIf(null != user, "email[%s] registered already", email);  
  user = new User(email);  
  user.setPassword(password);  
  user.role = null == role ? Role.SUPER_USER : Role.RESTRICTED_USER;  
  return save(user);  
}/<code>

使用這個命令則需要在後臺通過 telnet 或者 nc 等工具訪問服務器的 CLI 服務端口:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

這個機制非常方便但在開發時鏈接 CLI 服務端口會有個問題, 就是服務器在代碼更新觸發熱加載的時候斷開 TCP 鏈接, 因此調試命令需要重新連上 CLI 服務端口, 有點小麻煩. 在 1.8.32 中我們帶來了方便的 CLI Over Http 服務機制, 讓開發人員在開發時通過 /~/cmd 來訪問命令:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

這樣開發人員無需在後臺不停鏈接 CLI 端口即可隨時通過 HTTP 網頁來調試 CLI 命令.

1.2 增強 SampleData API, 允許在創建 List/Set 的時候指定創建 Mock 數據的數量 #1301

ActFramework 的 SampleData 提供了強大的 Mock 數據生成 API, 在這個版本中我們進一步增強了這個特性, 可以指定創建 Mock 數據的條目了.

示例代碼:

<code>public static class User {  
  public String firstName;  
  public String lastName;  
  public String email;  
}
@GetAction("users/mock")
public List<user> test() {  
  return SampleData.generateList(User.class, 7);  
}/<user>/<code>

測試:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

1.3 從瀏覽器直接訪問返回 Iterable 類型數據的端點, 自動以 HTML table 形式生成響應 #1298

這個增強的結果在上面已經顯示出來了. 以前的版本從瀏覽器訪問直接數據返回端點都是以 JSON 形式顯示結果的. 看官可能會提問題了, 如果我通過 ajax 形式訪問數據端點也會拿到 HTML table 形式的響應嗎? 答案是在 ajax 請求中設定好 Accept=application/json ActFramework 會以 JSON 形式發回數據的. 拿剛剛上面的例子來測試:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

較真的看官可能又要問了, 如果我就想在瀏覽器中看 JSON 數據而不是 HTML table 數據怎麼辦. 這個也不是問題, 使用 _accept=json 請求參數即可:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

1.4 HTML-Table 增強 - 表頭始終處於頁面頂部

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

1.5 IStorageService 對錯誤處理的增強 #1295

以前當 IStorageService 發生存儲項目未找到, 或者訪問受限的錯誤, 都會導致發出 500 服務器錯響應. 現在 ActFramework 能更好地處理這些錯誤情況, 當發生資源未找到時, 會處理為 404 響應. 訪問受限會處理為 403 響應.

1.6 異步結果處理增強 - 使用最初指定的 Content-Type 來生成異步處理結果 #1286

在 ActFramework 中如果有工作是耗時較長的, 比如某些數據報表生成, 可以採用異步處理方式.

示例代碼:

<code>@Async  
@ReportProgress  
@GetAction("/users/async")  
public List<user> simulateLongTimeOperation(ProgressGauge gauge) {  
  final int sz = 100;  
  List<user> userList = new ArrayList<>(sz);  
  gauge.updateMaxHint(sz);  
  for (int i = 0; i < sz; ++i) {  
  $.sleep(50);  
  userList.add(SampleData.generate(User.class));  
  }  
  return userList;  
}/<user>/<user>/<code>

訪問該接口:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

以前的版本無論用那種請求類型訪問最後都只能看到上面的結果 - JSON 形式生成的響應. 在這個版本里我們緩存了最初的請求響應類型, 並在最後生成結果響應的時候應用請求的響應類型. 下面是演示:

用 html-table 方式訪問 /users/async:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

用 xlsx 方式訪問 /users/async:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

2. Act-Beetl 1.7.2

更新 beetl 至 3.0.19.RELEASE

3. Act-BeetlSQL 1.8.2

更新 beetlsql 至 2.12.20.RELEASE

4. Act-Morphia 1.9.0

Act-morphia 是轉為 ActFramework 應用程序設計的 MongoDB 訪問庫. v1.9.0 帶來的改進有:

4.1 Dao.update API 改進:

下面的情況如果 firstName 為 null, 則會調用 mongodb 的 $unset 操作刪掉 firstName 字段:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

4.2 加載 Entity 的時候自動初始化集合類型字段

假設你有下面的 Model 類型:

<code>@Entity("emp")
public class Employee extends MorphiaModel<employee> {
    public String firstName;
    public String lastName;
    public List<auditrecord> auditRecords;
}/<auditrecord>/<employee>/<code>

從數據庫中 load 一個 Employee 實例, 假設該記錄沒有 auditRecords 數據, 以前該字段會是 null, 現在則自動將 auditRecords 字段設置為空 List. 這樣做的好處是避免對 auditRecord 字段進行操作的時候還需要進行空值檢查.

5. Act-Excel 1.9.0, Act-Excel-java7 1.9.0

5.1 支持不同的輸出主題

示例代碼:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

默認主題:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

春意盎然:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

五十度灰:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

金秋:

ActFramework 1.8.32 發佈 - 高質量的 Java Web 應用框架

5.2 提供幫助方法讓應用自己控制 Excel 文檔生成

群裡有人提出需要定時生成 Excel 文檔, 不希望還需要從 HTTP 走一遍, 於是將內部的邏輯抽取出來提供了下面的靜態方法方便程序員使用:

<code>ExcelDirectRender.generateExcelFile(Object data, File targetFile);/<code>

6. OSGL-Tool 1.24.0

osgl-tool 是一套 Java 工具庫, ActFramework 中大量使用了 osgl-tool 來簡化開發. v1.24.0 版本帶來一下改變:

6.1 UserAgent 使用 LFU Cache 來替代 HashMap #234

UserAgent 字串解析是一件耗時的工作. 因此我們總是希望將結果緩存下來. 以前的版本採用簡單的 HashMap 來緩存 UserAgent 解析結果. 這個速度當然很快, 然而帶來的麻煩是 UserAgent 的種類基本上是一個開發的數量, 根據 whatismybrowser 的統計, 有超過 2400 萬的不同的 UserAgent 字串. 隨著時間的推移, HashMap 的 UserAgent 緩存將吃光服務器上的堆空間.

這個版本中我們使用了 LFU (最低訪問次數) 緩存來存儲 1000 個 UserAgent 解析結果, 這樣大多數常用的 UserAgent 會被緩存起來, 既滿足了性能的要求, 也不會對服務器堆空間帶來長期的壓力.

6.2 Crypto 增加 RSA 方法 #233

在 Crypto 工具類上增加 RSA 的方法:

<code>public static KeyPair generateKeyPair();
public static KeyPair generateKeyPair(int keysize);
public static String encryptRSA(String value, byte[] publicKey);
public static String encryptRSA(String value, String urlSafeBase64EncodedPublicKey);
public static String decryptRSA(String value, byte[] privateKey);
public static String decryptRSA(String value, String urlSafeBase64EncodedPrivateKey);/<code>

6.3 UserAgent - 支持 Microsoft Edge #230

6.4 添加 S.acronym(CharSequence) 靜態方法

<code>String a = S.acronym("OpenSourceGeneralLibrary"); // a = 'OSGL'/<code>


分享到:


相關文章: