2014年1月22日 星期三

java.lang.NoClassDefFoundError: Could not initialize class

今天遇到的一個奇怪的問題,把某些類別包裝後原本都用得好好的,但移植到另一個專案時就出現無法初始化類別的問題
後來確認了原因是因為程式碼裡在 static 的區塊中做了某個類別的初始化,於是造成執行時無法正確初始化的問題。

static {
  QueryBuilder db = new QueryBuilder(.....);
  db.execute("key", 1).ensureIndex();
}

真實的原因跟對應的理由還不太了解,因此暫時先做個記錄,也許未來哪天會懂背後的問題...。

參考資料:
1、java.lang.NoClassDefFoundError: Could not initialize class XXX

2014年1月16日 星期四

String 和 StringBuilder 之間的差別

這個議題其實在 Java 當中盛行以久,應該大家都知道使用 String 相加是罪大惡極的行為
不過自從 Java 6 開始,基於各種 JVM 的調整,這個概念似乎有稍微修改的需要。

2014年1月15日 星期三

透過 Java driver 做 MongoDB sharding

在 MongoDB cluster 的環境中,即使 MongoDB 已經做成 Mongos 了,預設資料都還是會全部集中在同一台資料庫上
持續對資料庫做資料寫入時,資料越多速度會越慢,而且也可以發現都是同一台伺服器很忙
主因就是因為沒有做 DB 和 collection 的 sharding。

2014年1月9日 星期四

檢查 Collection 中是否有某個自定義的 Object

一般如果使用 Collection 類別去儲存一系列的某種 Object 時,可以直接利用 Collection.contains(obj) 的方法檢查某個 Object 是否在 Collection 內
不過 Java 預設的 Object 的檢查方式是檢查兩個 Object 是否相等,是依據 Object 所在的記憶體位置判斷的
但有時我們想要的是 Object 內的某些屬性相等,就視這兩個 Object 相等
也就是當使用 Collection.contains(obj) 時,想要的結果其實是當 Collection 內的某個項目特定屬性跟 obj 的特定屬性一樣,就預期要回應 true。