跳到主要內容

發表文章

目前顯示的是 2010的文章

java.util.Date存到datetime欄位會遺失時間資訊

使用Hibernate , SQL Server 2008將 Date存到datetime欄位中會遺失時間資訊,只剩下日期。如下:

         2010-11-02 00:00:00.000
原有設定:
bean-hbm.xml




需使用sql-type 來複寫Hibernate default mapping。
The sql-type attribute allows the user to override the default mapping of a Hibernate type to SQL datatype.
(hibernate reference 3.3.2 GA)






引用struts2後無法啟動application server

2010/10/14 下午 04:45:03 org.apache.catalina.core.StandardContext filterStart
嚴重的: Exception starting filter struts2
Unable to load bean: type:com.opensymphony.xwork2.util.ValueStackFactory class:com.opensymphony.xwork2.ognl.OgnlValueStackFactory - bean - jar:file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/epza/WEB-INF/lib/struts2-core-2.1.8.1.jar!/struts-default.xml:70:140
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:431)
    at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)
    at org.apache.catalina.core.StandardContex…

NSIS 啟動 Log功能

NSIS 啟動 Log功能

標準版本的NSIS安裝好之後,編譯時並無法使用以下指令
LogSet yes

編譯時會產生錯誤訊息,指出Log功能並沒有打開。
如閱讀文件會告訴你要將Log功能開啟後,重新build NSIS,對不熟悉的人是很麻煩。

此時其實可以去下載NSIS special builds,就有一個是已經啟動Log的,下載解壓後覆蓋掉原本NSIS的安裝目錄即可。

ZK - open source Ajax Framework介紹

ZK介紹
數年前因IThome的報導就有注意到ZK,以framework作為產品的台灣公司,真的是非常少見,而ZK的表現也是令人激賞。
除了ZK 這個主軸的framework以外,其相關的產品也很全面,介紹部份如下:
ZK studio
一個eclipse plugin,用來加速ZK開發的工具。內含一些簡化開發過程的工具如:
ZUL Visual Editor, 可以預覽zul所設計的UI在瀏覽器上顯示的樣子,方便設計UI。
Properties, 點選某個zul中的UI元件,即會顯示該元件的所有可設定的properties。
ZUL Palette, 元件調色盤,可以將UI元件用拖拉的方式放至zul文件中。ZK JSP tag
將zk的元件整合至jsp中,若不想完全改寫既有jsp頁面,可以採用此一選擇,可以立即獲得Ajax的特性。ZK Spreadsheet
類似Google docs中試算表的元件ZK calendar
類似Google calendar的元件
ZK線上展示,直接以畫面示範所有元件的用法與外觀,你可以手動修改原始碼並立即觀看修改後的結果,很棒的一個作法。

優點
快速擁有Ajax效果
對JavaEE工程師來說,在不換平台的情況下(Flex, Silverlight)要做出RIA,擁有的選擇不多,直接透過Javascript使用AJAX或採用Ajax相關的library(Jquery,DWR)需要一段時間學習,RichFaces也可能是個選擇,但JSF似乎不是很多人採用,對於JavaEE工程師來說,可以透過學習成本不高的ZK來快速打造RIA。
支援MVC架構
zul配合ZK composer(Controller),可以使zul頁面純粹擔任View的角色,完全不需寫程式碼在頁面上,作到清楚的MVC切分。
composer更可對頁面UI進行動態新增、刪減或修改屬性之變化,皆透過zK ajax engine來完成。可純粹以Java開發
雖然ZK 5已讓懂javascript的人作前後端整合開發,甚至支援其他的script語言,但是幾乎所有既有元件功能都仍然可以透過Java控制。Component-based, Event-Driven
UI畫面以UI元件為基礎配置,也可以某個程度的客製化元件。zul頁面上的各種UI動作都可觸發成event並傳到後端的composer(Controlle…

Java 執行檔(exe)路徑問題

要讀取應用程式下相對目錄的檔案,要瞭解java File解析相對路徑的方式。
JavaDoc java.io.File中提到
A pathname, whether abstract or in string form, may be either absolute or relative.
...resolve relative pathnames against the
current user directory. This directory is named by the system property
user.dir, and is typically the directory in which the Java
virtual machine was invoked.
路徑可以是「相對」或「絕對」,相對路徑依照目前使用者的所在目錄,也就是JM被啟動的目錄。
在eclipse中,啟動的目錄是project根目錄,例如: myProject下執行"run as Java Application"
current user directory就是 [workspace目錄]\myProject

如果用JSmooth之類的custom launcher工具封裝成exe後,current user directory就是exe所存在的目錄。
建立成捷徑後,則current user directory會以捷徑內容中「開始位置」為準,所以如果「開始位置」與exe存放位置相同的時候,則與直接雙擊exe執行的current user directory相同。


但若以bat執行,則current use directory會以bat所在目錄為準。
例如一個bat檔如下
d:\filePath.exe
pause

若filePath會建一個新檔在current user directory,若bat放在桌面,則該新檔會建立在桌面,而不是exe檔所在位置。

但透過JSmooth設定可以改變此情形。
勾選"Set the executable folder as current directory of application"之後,無論bat檔在什麼位置,都以exe檔的所在位置為current user direcotry。







準姊姊的樣子

亮亮活潑又愛管東管西,連他爸爸都敢管,我們都相信以後一定會把弟弟妹妹管得死死的,只是沒想到老二還沒出生我們就已經隱約看到她做姊姊的樣子了。
昨天晚上亮亮媽躺在床上休息時,感覺到胎動,說了一句:「圈圈在踢我」。
亮亮立刻在旁邊大聲說:「不准踢媽媽!」,讓我跟亮亮媽都嚇了一大跳,沒想到老二還沒出生就已經開始被「管」囉。
真是管得太早了吧!

ZK整合Hibernate, Spring的lazy loading問題簡單解法

ZK是個好學易用的component-based, event-driven AJAX framework,可以只用Java語法開發,而擁有AJAX的技術達成的更新部份網頁效果。
Hibernate用在web-based application時,在view layer會有眾所周知的lazy loading problem,如果使用JSP等會發出HTTP request的前端技術,可以透過OpenSessionInViewFilter來解決這個問題。
不過,如果使用AJAX技術時,網頁畫面的更新通常不會發出HTTP request,因此上述解法將無法用在ZK這樣的AJAX framework中。
典型的master-detail情況是,在ZK的元件中,點選listbox中一筆紀錄(master),要顯示該筆資料的詳細資料欄位(detail),例如點了一筆員工姓名,要顯示員工詳細資料。但是這些詳細資料中,有些欄位或集合是在hibernate中設定為lazy initialization的,也就是在抓出listbox中的簡要資料時,沒有被hibernate載入的。
這時hibernate會透過model物件中附帶的Session物件去做再次查詢,如果該Session已經關閉則會拋出lazy initialization exception。
有一種作法稱為Long Session,也就是開啟一個session直到應用程式結束才關閉。
我的解法比較適用在DAO層採用 繼承Spring的 HibernateDAOSupport的架構,他的特性是CRUD的method多半用 HibernateTemplate來實做各類查詢。這樣的架構Session會在HibernateTemplate 中開啟、關閉,也就是查詢結束後Session就關閉了。如果採用這樣的架構,Long Session的解法跟此架構格格不入,ZK所提供的OpenSessionInViewListener也跟這樣的架構無法共同運作,因為DAO層與OpenSessionInViewListener不是使用同一個Session。
所以我的解法是在頁面點選一筆資料的同時,先initialize該筆的lazy-loaded collection,樣本程式碼如下:

public void initializeProxy(Employee…

SAP自我學習資源

SAP Training : Guide to Free SAP Study Materialhttp://www.youtube.com/watch?v=6GQeHnbT1k4