Cd Chen's Services

ba ba ba la~~

Java

Java Scan Classes in Packages...

以前若要掃描隸屬於某些 Package 的 Classes,非常的麻煩。很多人都喜歡用 Spring 來解決這個問題,但可能還是要類似這樣做:

MacOS X 10.7 (Lion) Java Swing 無法輸入中文

升級到 Lion 也一段時間了,一切都還好。唯一美中不足的是,在 Java Swing 下無法順利輸入中文,以及 Refresh 常常出錯的狀況。

記得很早以前,好像在 10.5 的年代裡,也遇過類似無法輸入中文的狀況。後來在某一個版本的 JDK/JRE 後,這個問題就順利解決了。不過,到了 10.7 這個老問題卻又再度出現。

爬了文章,發現了「是时候放弃swing了」這篇文章,裡面提到這是 Swing 的 Bug。目前最簡單的解決方法,就是在開啟 Java Swing 應用程式前,先把中文輸入法打開,這樣就正常了。經過試驗,真的有效!!

幾篇與 Hibernate "no session or session was closed" 有關的文章

最近常搞 Jpa/Hibernate,但常發現如下的錯誤訊息:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: myerstone.dilas.core.entities.School.semesters, no session or session was closed

查過一些文獻後,將相關有用的參考資料整理於下,作為以後參考的依據:

How to implement polymorphic JPA entities with generic relations

以前玩 Django 時,非常喜歡其 ContentType 的機制,可以讓我非常愉悅的儲存各種不同型態的資料之間的關係。然而換用 JPA 後,卻大大的失去這樣的樂趣,因為 Java 是一個強型別的程式語言,若型態不多,是無法順利進行對應。

今天在找資料的時候,看到了「How to implement polymorphic JPA entities with generic relations」這篇文章,提到了一些可能的解決方案。改天可以來試試看!!

Java 鬆綁 (三):利用 ServiceLoader 實作動態載入

在前兩篇文章中,我們看到了如何利用 Java 多型的技巧,鬆綁類別之間的關係;也看到如何透過動態載入的技巧,來鬆綁 Package。不過還不是很完美,至少我是這樣認為。

在「Java 鬆綁 (二):利用 Package 與動態載入徹底鬆綁」這篇文章中,係利用 Class.forName() 這個古老的方法來實作動態載入的功能,個人覺得非常的麻煩且缺乏彈性。比較理想的作法,係利用 Java EE 或者 SpingFramework 提供的 CDI (Contexts & Dependency Injection) 來實作這樣的要求。

不過 Java EE 容器雖然是 Java 世界中的標準,但重量級的執行環境,對於一個小的專案來說,非常的不值得;而 SpingFramework 雖然夠輕量化 (但近期的發展也趨向於重量),但卻不是標準的作法,實作與部署時必須考慮執行的環境中是否提供所需的條件。

Java 鬆綁 (二):利用 Package 與動態載入徹底鬆綁

先前的例子裡,我們利用 Java 多型的技巧,來鬆綁類別之間的依賴關係。但在這個例子裡,變更實作類別時,還是需要重新編譯程式,還是不夠方便!!

有沒有更棒的方法呢??

有的。

Java 鬆綁 (一):利用多型鬆綁類別的依賴關係

在學習 OO 的過程中,很多前輩先進都會強調「鬆綁」的原則。所謂的鬆綁,就是把元件與元件之間依賴關係降到最低。鬆綁之後可以讓我們未來維護與擴充功能時,能夠更加的方便。為達成鬆綁原則,會充分利用 OOP 語言本身提供的機制來實作之,以 Java 為例,我們會利用多型來完成鬆綁的效果。

例如:我需要寫一個打招呼的程式,沒有考慮鬆綁原則時,可以這樣寫:

package org.cdchen.serviceloaders.apps;

public class SayHelloMain {
	public static void main(String[] args) {
		System.out.println("Hello to cdchen.");
	}
}

這樣的寫法非常的直接與單純,但卻產生了一個問題:如果以後要改用其他方式打招呼,就得重新修改程式,並且重新編譯才行。為此,我們可以考慮這樣做:

Sharing session data between contexts HOW-TO

Sharing session data between contexts HOW-TO」好東西,收錄起來!!

JBoss Tools 3.2 is Finally here!

眾所期待的 JBoss Tools 3.2 終於問世了!!

這次的版本,主要是針對 Eclipse 3.6 (Helios) 進行改版,並加入了一拖拉庫的新功能。有興趣的朋友可以玩玩看~~  :)

Eclipse Dynamic Web Project 使用 Maven

最近在玩 Maven2,覺得蠻有意思的。若用 Eclipse 開發 Dynamic Web Project 時,要讓專案支援 Maven,通常方法有兩種:

  • Maven to Eclipse Dynamic Web Project
  • Eclipse Dynamic Web Project to Maven

Maven to Eclipse Dynamic Web Project

這種方法是先使用 Maven 產生專案的目錄,再透過 eclipse 這個 Maven Plugin 來轉成 Eclipse Dynamic Web Project。步驟如下:

You are here