Showing posts with label Appfuse. Show all posts
Showing posts with label Appfuse. Show all posts

Thursday, January 8, 2009

如何用 appfuse 2.0.2 透過 gmail 發信

若需要發信但又沒有 SMTP servr 時,可以利用 gmail 的帳號發信
因為 gmail 用的 SMTP 走的是 SSL 機制,所以設定上比較麻煩一點

以下是用 gmail 發信的 mail.properties 範例

mail.default.from=Name <xyz@gmail.com>
mail.debug=true
mail.transport.protocol=smtp
mail.smtp.starttls.enable=true
mail.host=smtp.gmail.com
mail.username=xyz@gmail.com
mail.password=secret
mail.port=587

mail.mime.address.strict=false
mail.mime.charset=UTF-8

雖然有點 tricky, but it works

Tuesday, December 9, 2008

Appfuse 2.0.2 的 displaytag 繁體中文檔

最近在試 Appfuse 2.0.2 發現沒有 displaytag 繁體中文檔,於是把簡體檔轉成繁體中文再改語意,可以從 這邊 下載,記得放到 src/main/resources 下就可以了

Run appfuse 2.0.2 with JPA

最近發現一件事,似乎越來越多的軟體公司,若是用 J2EE + MVC 架構,以 JPA 取代 Hibernate 的情況越來越多。說實在的,看了一下 JPA 的 spec,跟以往 EJB 一樣,他是一個空殼子,真正的 implementation 可以是任何 framework。

目前看到的 JPA implementation 有 Hibernate 、TopLink 及 OpenJPA,在 appfuse 2.0.2 中用的是 Hibernate 最新版 3.3.0 GA 版,但在試 appfuse 2.0.2 with JPA 中發現一些問題,讓我摸索好久才試出來,提供那些卡住的人一些解法。試之前請先參考
Appfuse 2.0.2 安裝步驟(steps for appfuse 2.0.2 installation) 中的
1. 安裝 maven-2.0.9 及設定環境變數


1. 建立 appfuse 2.0.2 的 archetype 到 d:\projects 中
d:\projects> mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.2 -DgroupId=com.mycompany.app -DartifactId=myprojectjpa

PS : 有別於之前的範例,這裡用 struts 2.0 作為 MVC 的 framework,artifactId 也改為 myprojectjpa,避免與之前的範例衝到

2. 安裝 mysql (若尚未安裝)
mysql 的網站下載 mysql for Windows 並安裝 (此時裝的是 v5.0.x )。root 的密碼暫定為 root

3. 修改 root 的密碼及更改 dao framework 為 jpa

3.1 因 預設在 myproject 中的 pom.xml 的 mysql 密碼為 "空白",所以必須將此部份的空白填入真正的 root 密碼,在做 install 時才能將 table 及 測試資料放到 mysql 的資料庫中。編輯 pom.xml 並在 line 975 修改
<jdbc.password>
</jdbc.password> 為
<jdbc.password>root</jdbc.password> (假設 mysql root 的密碼為 root)

3.2 修改 line 938 將 hibernate 改成 jpa

3.3 修改 line 142 將 annotationconfiguration 改成 jpaconfiguration

3.4 這時候別急著跑 mvn jetty:run-war ,因為你一跑,會出現
javax.persistence.PersistenceException: No name provided and several persistence
units found
我因為這個 error 卡了 2,3 個小時,後來 google 後才知道要

3.4.1 remove D:\projects\myprojectjpa\src\main\resources\hibernate.cfg.xml
3.4.2 remove D:\projects\myprojectjpa\src\test\resources\hibernate.cfg.xml
3.4.3 remove D:\projects\myprojectjpa\src\main\resources\META-INF\persistence.xml

4. 取得 appfuse 的 source code 以便日後 debug 用
d:\projects> cd myproject
d:\projects\myproject> mvn appfuse:full-source

5. 利用 command line 啟動 appfuse
d:\projects\myproject> mvn clean jetty:run-war
執行 clean 的目的是要把 war 中的 hibernate.cfg.xml 清除掉,不然會造成 error

org.hibernate.DuplicateMappingException: Duplicate collection role mapping com.m
ycompany.app.model.User.roles

一旦執行此 mvn jetty:run-war,appfuse 就會直接啟動在 port 8080。此時可以用 firefox 檢測 appfuse 是否啟動成功。將 url 指向 http://localhost:8080 可以得到此畫面

Saturday, December 6, 2008

Run appfuse 2.0.2 in NetBeans 6.5

在 NetBeans 6.1 跑 appfuse 2.0.2 幾乎是不可能,試了半天總是碰壁,但到了 NetBeans 6.5,就像變魔術一般,跑的特別順,尤其是改 jsp 時,不用像 eclipse 需要改 snapshot 裡面的 jsp。在 NetBeans 6.5 可以直接修改 jsp 後在 firefox 中按 F5 就會立即反應改過的結果,對於開發者而言,實在助益不少。以下就 NetBeans 6.5 跑 appfuse 2.0.2 的步驟做一說明

使用 NetBeans 6.5 前,必須先把 appfuse 2.0.2 先安裝好。安裝的步驟可參考
Appfuse 2.0.2 安裝步驟(steps for appfuse 2.0.2 installation)

1. 安裝 NetBeans 6.5
下載 NetBeans 6.5 後安裝到 d:\Java\NetBeans 6.5 下。安裝時須確認裝的元件含 Java Web and EE,及 Run time server Tomcat 6.0.x ,如此跑 appfuse 2.0.2 時才能指定 Tomcat server 為其 Rune time server。

PS : 若你是用 JDK 6.0 Update 10 以上的版本,可以更改 d:\Java\NetBeans 6.5\etc\netbeans.conf 中的 netbeans_default_options (line 6) 在最後加上
--laf com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
可以將 NetBeans 的外觀換成新的介面如下




















此介面比舊的 Windows 好看多了

2. 安裝 maven plugin
安裝完 NetBeans 6.5 後,可透過 Tools > Plugins > Available Plugins 安裝 maven plugin。安裝完可得以下畫面
















3. 匯入 myproject 到 NetBeans 6.5 中
基本上這也不是匯入,因為已經裝了 maven plugin 的關係,可以透過 File > Open Project 的方式就可以直接打開 myproject 了














4. 設定 Rumtime Server
把 myproject 匯入到 NetBeans 後,預設並不會指定 Runtime Server ,這時候需透過 右鍵按Appfuse JSF Application > Properties > Run 去指定 Server。這邊請先設定為 Tomcat 6.0











5. 啟動 Appfuse web application
當 1-4 設定完成後,可以按 F6 ,Appfuse 就會立即 compile 並 deploy 到 Tomcat 6.0 上且直接帶出 Firefox (或 IE) 顯示 Appfuse 的完整功能















Tips
1. 每次按 F6 時,maven 都會先跑 testcase 後再 deploy 到 tomcat 上,若要跳過 testcase ,可以透過 右鍵按Appfuse JSF Application > Properties > Action > Run project > Set Properties 加入 maven.test.skip=true 即可以跳過 testcase

















2. 當修改 java code 後按 F6 重新 deploy appfuse 到 tomcat ,會發現 2 次後便會發生
java.lang.OutOfMemoryError: PermGen space
的錯誤訊息,此時便無法重新 deploy appfuse ,必須透過 Task Manager 將手動 Tomcat 除掉後再重新 deploy 一次,造成很大的不便。這個問題可以透過 Tools > Servers > Apache Tomcat 6.0.18 > Platform(tab) > VM options 加入 -XX:MaxPermSize=256m 便可以至少 redeploy appfuse 至少 10 次以上,減少除掉 Tomcat 所需花費的時間。




















運用這兩個 Tips ,應該可以減少一下開發時的麻煩,把時間花在功能的開發上。

Appfuse 2.0.2 安裝步驟(steps for appfuse 2.0.2 installation)

Appfuse 2.0.2 理論上不是一個 framework,而是一個已經 ready to go 的 project prototype。它集合了最穩定與先進的 framework 再加上最基本的 ACL,Menu ,讓 developer 不用從頭開始建構一個 project 的基礎架構。它的 build tool 用的是 Maven,所以無論在做 demo、test、ContinuousIntegration 都不用在額外撰寫新的,直接使用或就現有的架構再做擴充便可以上手。

以下為安裝 appfuse 2.0.2 的簡單步驟,不用十分鐘(除了喝 coffee 的時間),你就有一個可以 login 、manage user 、 upload file 基本功能的 web application 出現在你的電腦上。

1. 安裝 maven-2.0.9 及設定環境變數
下載 maven-2.0.9 到 d:\Java (目錄為 d:\Java\apache-maven-2.0.9)
set M2=D:\Java\apache-maven-2.0.9\bin
set M2_HOME=D:\Java\apache-maven-2.0.9
set MAVEN_OPTS=-Xms256m -Xmx512m
set PATH=%M2%;%PATH%

編輯 d:\Java\apache-maven-2.0.9\conf\settting.xml
line 49 將 localrepository 的內容改成 D:\Java\apache-maven-2.0.9\repository

PS:因 maven 預設值會將 repository 放到 c:\Document2 and Settings\.m2 中,這樣用不同的人 login ,其 repository 就需要跟著異動。放到 d:\Java\apache2-maven-2.0.9\repository 的好處在於將來 team 可以用同樣的設定作業,避免因環境的不同而需要花額外的時間做環境設定

2. 建立 appfuse 2.0.2 的 archetype 到 d:\projects 中
d:\projects> mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-jsf -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.2 -DgroupId=com.mycompany.app -DartifactId=myproject

PS : 此時可以去喝一杯咖啡了,因為要很久。若要節省時間,可以下載 dependency 並解壓縮到 d:\Java\apache-maven-2.0.9\repository

3. 取得 appfuse 的 source code 以便日後 debug 用
d:\projects> cd myproject
d:\projects\myproject> mvn appfuse:full-source

4. 安裝 mysql
mysql 的網站下載 mysql for Windows 並安裝 (此時裝的是 v5.0.x )。root 的密碼暫定為 root

5. 修改 root 的密碼
因 預設在 myproject 中的 pom.xml 的 mysql 密碼為 "空白",所以必須將此部份的空白填入真正的 root 密碼,在做 install 時才能將 table 及 測試資料放到 mysql 的資料庫中。編輯 pom.xml 並在 line 982 修改 <jdbc.password>
</jdbc.password> 為 <jdbc.password>root</jdbc.password> (假設 mysql root 的密碼為 root)

6. 利用 command line 啟動 appfuse
d:\projects\myproject> mvn jetty:run-war
一旦執行此 mvn jetty:run-war,appfuse 就會直接啟動在 port 8080。此時可以用 firefox 檢測 appfuse 是否啟動成功。將 url 指向 http://localhost:8080 可以得到此畫面



















簡單的 6 個步驟,你就有一個功能陽春的 prototype 可以使用,但是若要真的用在 project 上,建議需要有至少 1 年以上的 web 開發功力再使用這一套,因為裡面用的是 MVC + ACEGI + AJAX ,光摸熟這一套就需要花約 2 星期的工夫,但一旦摸熟,則無往不利,因為要加新的功能,除了 domain 的 knowledge 以外,用套的就可以了。

Tuesday, December 2, 2008

如何在 eclipse 3.4 下跑 appfuse 2.0.2

因為工作性質的關係(一堆同時進行的專案),在系統的開發上需要有效率的執行,不能每次都從頭來,但已做過的專案又會因其特性的不同而造成 reuse 的機會降低,所以當時找了一個不是 framework 的 framework 當作開發的 initial startup ,裡面含有當下最新的技術,不用在自行組裝要用的 package,以降低開發時所需的時間與精力

Appfuse 目前最新版的是 2.0.2 ,用的整合工具是 maven 2.0.x ,但只能用 command line 做 build 及 run ,無法直接用在 IDE 的環境上。說實在的,借由 IDE 的輔助,可以省掉一些 coding 的時間,尤其是在 gen getxx 與 setxx 的 java code 時,助益不少

經我測試過,Appfuse 2.0.2 在 Netbeans 6.5 下完全沒有問題,可見 Netbeans 越來越成熟了,但在 eclipse 3.4 下則必須還要做些微修正才能符合 eclipse 的環境,做到 hot deployment 及減少修改 code 後還要重新 deployment 所浪費的時間

以下為修改步驟以便讓 appfuse 2.0.2 適用於 eclipse 3.4
PS : 請先安裝 JDK1.6, eclipse 3.4 JEE, maven 2.0.9, m2eclipse, mysql

1. 安裝 eclipse 3.4
下載 eclipse 3.4 並解壓縮到 d:\Java (目錄為 d:\Java\eclipse)
利用 eclipse 的 Help > Software Update > Available Software > Add site 安裝 m2eclipse plugin。
此 plugin 的 url 為 http://m2eclipse.sonatype.org/update/

2. 安裝 maven-2.0.9 及設定環境變數
下載 maven-2.0.9 到 d:\Java (目錄為 d:\Java\apache-maven-2.0.9)
set M2=D:\Java\apache-maven-2.0.9\bin
set M2_HOME=D:\Java\apache-maven-2.0.9
set MAVEN_OPTS=-Xms256m -Xmx512m
set PATH=%M2%;%PATH%

編輯 d:\Java\apache-maven-2.0.9\conf\settting.xml
line 49 將 localrepository 的內容改成 D:\Java\apache-maven-2.0.9\repository

PS:因 maven 預設值會將 repository 放到 c:\Document2 and Settings\.m2 中,這樣用不同的人 login ,其 repository 就需要跟著異動。放到 d:\Java\apache2-maven-2.0.9\repository 的好處在於將來 team 可以用同樣的設定作業,避免因環境的不同而需要花額外的時間做環境設定

3. 建立 appfuse 2.0.2 的 archetype
d:\projects> mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-jsf -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.2 -DgroupId=com.mycompany.app -DartifactId=myproject

PS : 此時可以去喝一杯咖啡了,因為要很久。若要節省時間,可以下載 dependency 並解壓縮到 d:\Java\apache-maven-2.0.9\repository

4. 取得 appfuse 的 source code 以便日後 debug 用
d:\projects> cd myproject
d:\projects\myproject> mvn appfuse:full-source

5. 修改 root 的密碼
因 預設在 myproject 中的 pom.xml 的 mysql 密碼為 "空白",所以必須將此部份的空白填入真正的 root 密碼,在做 install 時才能將 table 及 測試資料放到 mysql 的資料庫中。編輯 pom.xml 並在 line 982 修改 <jdbc.password>
</jdbc.password> 為 <jdbc.password>root</jdbc.password> (假設 mysql root 的密碼為 root)


6. 利用 command line 啟動 appfuse
d:\projects\myproject> mvn jetty:run-war
一旦執行此 mvn jetty:run,appfuse 就會直接啟動在 port 8080。此時可以用 firefox 檢測 appfuse 是否啟動成功。將 url 指向 http://localhost:8080 可以得到此畫面



















7. 匯入 myproject 到 eclipse 中
確認 appfuse 執行無誤後, 請執行
d:\projects\myproject> mvn eclipse:eclipse
這時候會在 d:\projects\myproject 目錄下產生 .settings 目錄及 .project, .classpath 檔

然後打開 eclipse ,利用 File > Import > General > Maven Projects 再將 Root Directory 指到 d:\projects\myproject 再按 Finish





























這裡可看到 myproject 已經被匯入到 eclipse 中了


8. 修改 eclipse WTP 專用的設定檔

若要讓 appfuse 可以在 eclipse WTP 上執行,必須做稍微的修正,才能直接在 eclipse 上啟動 tomcat 並 deploy appfuse

修改 .setting\org.eclipse.wst.common.component
刪除 <wb-resource deploy-path="/" source-path="src/main/webapp"/>
刪除 <wb-resource deploy-path="/" source-path="src/main/resource"/>
增加
<wb-resource deploy-path="/" source-path="target/myproject-1.0-SNAPSHOT"/>

修改 .classpath
刪 除 <classpathentry kind="src" path="src/main/resources" excluding="ApplicationResources_de.properties|ApplicationResources_fr.properties|ApplicationResources_ko.properties|ApplicationResources_nl.properties|ApplicationResources_no.properties|ApplicationResources_pt*.properties|ApplicationResources_tr.properties|ApplicationResources_zh*.properties|applicationContext- resources.xml|**/*.java"/>
增 加 <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0"/>
增加 <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>

然 後按 F5 做 refresh 後,接著在 myproject 按右鍵 > Run As > Run on Server > 選 Tomcat v6.0 > Finish 。在畫面可以看到 myproject 直接執行在 eclipse 上




















9. 注意事項
9.1 若要改 jsp ,必須改 target/myproject-1.0-SNAPSHOT 下面的 jsp 檔,測試完後再 copy 回 src\main\webapp 下,因為修改後的 WTP 只吃 target/myproject-1.0-SNAPSHOT 下的 jsp。
9.2 若改 jsp 後 refresh browser 無法立即呈現修改後的狀態,需要 close myproject 在 open myrpoejct。這是因為手動改 wtp 設定檔,需 reopen myproject 才行