部落客廣告聯播

2010年12月31日 星期五

GAE上使用JPA的inheritance

GAE/J上的data store並不是關聯式資料庫所以對於JPA不的功能並不是百分百的支援,像是對於JPA對應於物件繼承的支援就只支援InheritanceType.TABLE_PER_CLASS
(關於InheritanceType.TABLE_PER_CLASS詳見:http://caterpillar.onlyfun.net/Gossip/EJB3Gossip/TableperConcreteClass.html),若是指定其他InhreitanceType則在執行時會拋出Exception~

另外JPA Query物件的方法getSingleResult()若撈取到無資料料會丟出NoResultException,若撈取到的資料超過一筆會丟出NonUniqueResultException。而getResultList()若撈取無資料則會傳回一個size為空的List物件(詳見:http://download.oracle.com/javaee/5/api/javax/persistence/Query.html#getSingleResult()

2010年12月22日 星期三

jQueryWTP - 讓你在eclipse寫jQuery時也有程式碼提示

寫java程式的工程師是很幸福的,隨便一款IDE都會有程式碼提示功能,那麼在寫jQuery script時呢?
有的。如果你使用Eclipse,使用jQueryWTP就可以達到。jQueryWTP並不是Eclipse的plugin,他只提供一個工具來patch現有的Eclipse WTP plugin 來加入對jQuery的支援~

話不多說,就裝來用用看吧~

  1. 首先到http://sourceforge.net/projects/jquerywtp/下載jQueryWTP 工具,我使用的Eclipse是Helios(3.6)的JavaEE英文版,在這我便下載了jqueryWTP0.40foEn.jar
  2. 執行java -jar jqueryWTP0.40foEn.jar
    〔Jar File〕選擇你eclipse\plugin目錄下的org.eclipse.wst.jsdt.core_?????.jar
    〔Output Folder〕選擇另一個暫存的資料夾,這裡我先選存到我的桌面
    按下Generate會在〔Output Folder〕產生一新的org.eclipse.wst.jsdt.core_?????.jar
  3. 先備份你eclipse\plugin目錄下的org.eclipse.wst.jsdt.core_?????.jar,在將新產生的org.eclipse.wst.jsdt.core_?????.jar覆蓋掉原本eclipse\plugin目錄下的檔案
  4. 接著使用-clean參數來執行eclipse (用來清除plugin快取,使新的jar生效)
  5. 接著開啟你的eclipse,就可以快快樂樂的在Eclipse裡面使用jQuery的程式碼提示功能囉~爽的啦~
另外,如果你使用DreamWeaver也想要有jQuery程式碼提示功能,可以到http://xtnd.us/dreamweaver/jquery下載jQuery Extension for DreamWeaver來使用~

2010年12月13日 星期一

HibernateTransactionManager 與 TransactionDefinition.PROPAGATION_REQUIRES_NEW


關於Spring+Hibernate裡設定HibernateTransactionManager的TransactionDefinition.PROPAGATION_REQUIRES_NEW一直都沒有作用,
關於問題描述可參考此篇: http://forum.springsource.org/archive/index.php/t-50039.html
一直不了解為什麼?

搞了半天原來只有JTATransactionManager支援REQUIRES_NEW,
詳參考: http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/transaction/TransactionDefinition.html#PROPAGATION_REQUIRES_NEW及以下截圖:
點圖放大


蔡董,原來一切都是我們把它想得太完美了...

2010年11月30日 星期二

EJB3 & JPA 筆記簡報

基於JAVA的開源碼RIA - Apache Pivot

相較於Java FX令人懷疑的前途,Apache Pivot相對穩健。
或許Java FX非常"炫",但體驗過Pivot後相形下執行很順暢。

Pivot能以Java 或其他JVM language(如Groovy、JavaScript等)開法,可以Standalone方式或是Applet方式執行。
Pivot和Swing一樣是Base on Java2D,也使用MVC pattern來分離元件與資料,此外它還有宣告式的UI(WTKX: XML方式宣告UI)、data binding、web service整合、特效等功能。


2010年11月26日 星期五

Amazon 雲端服務免費試用 - AWS Free Usage Tier

Amazon最近終於在2010/11/1為其雲端服務提供了免費方案,以提供新客戶能在有限的額度內體驗、評估Amazon的雲端服務。

Google App Engine在很早前就可以在有限額度的免費使用了。
Amazon如今總算是敞開了試用的大門了。

關於AWS Free Usage Tier請參考:

詳細的中文介紹,可參考 軟體玩家 的文章:

2010年11月17日 星期三

ChinShelf勤學 學習資源管理系統

如果你也和我一樣有下載蒐集電子書的習慣,或許可以試試看這套軟體「ChinShelf勤學 學習資源管理系統」。

ChinShelf可以用來管理、紀錄您電腦裡的電子書(PDF、CHM、DOC等)、教學網頁書籤、您轉存在電腦硬碟裡的教學光碟等,該系統使用Java開發,只要有安裝Java 6執行環境的電腦都可以安裝、使用該系統。

ChinShelf以GPL v3授權發布,原始碼開放並Hosting在Google code專案代管。

ChinShelf的專案網址:http://code.google.com/p/chinshelf/

2010年9月7日 星期二

Java Lobby: Storing passwords in Java web application

在儲存密碼時,要如何增加安全性以防止被破解呢?
此文提到使用加密的話,因為加密是雙向性的,加密過後的結果只要使用正確的方法解密就可以得到原來的密碼。所以此文建議使用密碼雜湊(Password Hashing)來演算後再將密碼存入檔案或資料庫。
那麼,要如何使用密碼雜湊呢? 
 請直接看原文的程式碼範例,該範例簡單明瞭,很快就能將該方法套用在您的系統上使用了~

全文詳見:


2010年8月29日 星期日

2010年8月15日 星期日

Oracle與開放原始碼:一列表的不滿與抱怨


詳全文請閱原文:
http://java.dzone.com/articles/oracle-and-open-source-list?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+javalobby/frontpage+(Javalobby+/+Java+Zone)

5. 拔掉Postgres的插頭
    幾周前,Oracle無預警的中止之前Sun同意Postgres SQL專案開發使用的伺服器。毫無預警與知會。完全就是顧慮Postgres對Oracle和MySQL的競爭~

4. 浪費Sun有才幹的開發人員,尤其是Gosling(Java之父)
   一堆有才幹的人因為Sun被Oracle併購而走人,有些甚至在併購完成前就走了

3. 殺了OpenSolaris

2. JCP和Harmony建議書 開倒車

1. 控告Google

-----------------------------------------------------

希望官僚的Oracle能有所體悟,不要把Java Developer一個個的給氣走....
看來已經有許多人開始懷念被併購前的SUN了....

2010年8月1日 星期日

Dolph's Toolbox - Dolph的工具箱

http://dolphstoolbox.appspot.com/


這個小型WebApplication主要是我體驗GAE(Google App Engine)的一個小作業,主要的功能有:

1. 資料遮蔽SQL指令產製 -->
使用者輸入table名稱、column名稱,此程式產出SQL statement可以用來做資料表格更新,將在資料庫的一些敏感資料以遮罩字元取代,如「王曉明」--> 「王*明」
2. native2ascii、URL encode/decode、base64 encode/decode、Hex encode/decode

實作用到的技術也很簡單,主要只用到了JSP、JSP custom tag lib、jQuery,
而GAE方面的service有用到JDO API做資料儲存、User Service做登入檢查、Java Mail配合Mail service做建議的電子表單結果寄送。

這類簡單的小程式各位應該也能很快就做出來的,一起來玩玩GAE吧。


http://code.google.com/intl/zh-TW/appengine/

2010年7月28日 星期三

Eclipse在Oracle/Sun Java 6 Update 21上會當掉問題

最近重裝了電腦,並且下載了Eclipse Helios來使用,但很奇怪的是都用沒幾分鐘就當掉,剛開始一直以為是Eclipse的問題,後來才發現是因為Oracle在JDK6u21裡改了Vendor name才造成Eclipse會當掉。

最快的解決方法,直接在eclpse.ini裡加上一行
-XX:MaxPermSize=256m

詳細請參閱:
Latest Java Update Fixes Eclipse Crash Issue

2010年6月28日 星期一

Native2Ascii 程式碼參考

許多framework會使用到.properties檔案來做為多國語言的訊息儲存格式,
而像是非英文語系的語言在存成.properties後還會需要使用JDK內帶的native2ascii.exe將
中文字轉換成unicode十六進位的編碼形式,在runtime時才能正確讀取。

今天心血來潮,想看看native2ascii的原始碼,在google code search找到了一個開源碼版本的JVM Kaffe的native2ascii原始碼可參考,而且程式碼比想像中的簡單與簡潔:

2010年6月19日 星期六

Google App Engine開發程式檢視local data store資料方法



在開發Google App Engine程式時,我們會經由JDO/JPA API來將資料寫入data store,
在App Engine上可使用網頁介面的Admin Console來查看我們寫入data store的資料,
但在未部屬上App Engine前,我們在local環境要怎樣查看我們的data store呢?
可直接使用瀏覽器開啟:
http://localhost:8888/_ah/admin/
便可查看~

詳參照:
http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html

操作JavaBeans利器 - Commons BeanUtils


Java  專案裡不免常用到JavaBean,而Commons BeanUtils是操作JavaBean的好用工具,
詳細介紹可參考:

而另外一提的是,BeanUtil裡的 PropertyUtils.copyProperties() 相當的好用,
其用法可參考:http://www.blogjava.net/kenzhh/archive/2008/09/03/226592.html

2010年3月15日 星期一

2010年3月10日 星期三

JBOSS 5.1上使用EJB2與META-INF/jboss.xml的關係

(web client & java client)
1. 沒設定jboss.xml,則用 Object objRef = ctx.lookup("the-ejb-name"); 取得home
2. 若有設定jboss.xml裡的jndi,則會把把Bean綁到global JNDI, 用 Object objRef = ctx.lookup("xx/the-jndi-name"); 取得home

3. jboss.xml範例
<?xml version="1.0"?>
<jboss xmlns:xs="http://www.jboss.org/j2ee/schema"
xs:schemaLocation=
"http://www.jboss.org/j2ee/schema jboss_5_0.xsd"
version="5.0"> 
<!-- 把Bean綁到global JNDI ,
取得用Object objRef = ctx.lookup("ejb/the-jndi-name"); -->
   <enterprise-beans>
      <session>
         <ejb-name>the-ejb-name</ejb-name>
         <jndi-name>ejb/the-jndi-namer</jndi-name>
      </session>
   </enterprise-beans>

</jboss>

JBoss 5.1上WebApp叫用EJB2錯誤...

由於工作需要需要學EJB2,便想在JBoss 5.1上作測試,但遇到在
JBOSS 5上的web app呼叫EJB2 SessionBean,出錯:
javax.ejb.EJBException: Invalid invocation,
check your deployment packaging, method=public .....


1. 下列文章指出在jboss 4的解決設定方法:
http://forums.sun.com/thread.jspa?threadID=557629
http://www.javaworld.com.tw/roller/secretguest0824/entry/
jboss_ejb_%E9%96%8B%E7%99%BC%E6%B3%A8%E6%84%8F%E4%
BA%8B%E9%A0%85%E6%95%B4%E7%90%86_ejb2_0

http://xmh517.javaeye.com/blog/209056

2. 下列文章指出 此問題應該是 classloader策略造成的問題:
http://daivd.tao.jdon.com/jivejdon/thread/35659

3. 下列文章指出 jboss 5上的web程式設定classloader策略的方法:
http://community.jboss.org/wiki/useJBossWebClassLoaderinJboss5

所以我們要做的就是在WAR的web-inf下新增一個 jboss-classloading.xml檔案,讓其classloading path domain能與EJB的domain區隔開來,其內容為:

<?xml version="1.0" encoding="UTF-8"?>
<classloading xmlns="urn:jboss:classloading:1.0"
name="ejb01_web.war"
domain="DefaultDomain"
parent-domain="Ignored"
export-all="NON_EMPTY"
import-all="true">
</classloading>

這篇不關技術~

今天在ZDNet看到一篇報導:
[看HTC被蘋果告] 前昇陽CEO提跟蘋果、微軟交手侵權內幕
撇開技術好壞不講,某些大公司財大氣粗總是拿法律來嚇人,
看了這篇文章覺的:
Jonathan Schwartz幹得好~

(以上純屬小弟個人觀點..)

2010年3月7日 星期日

JavaMail 郵件附檔中文檔名亂碼解決

JavaMail 郵件附檔中文檔名亂碼解決方法~
請參考:
http://www.javaworld.com.tw/jute/post/view?bid=6&id=200880&sty=3

重點在49行的:
mbp2.setFileName(MimeUtility.encodeText(fds.getName(), 
"MS950", "B"));

2010年1月11日 星期一

JSF/Facelet中使用JSTL

在JSF內使用Facelet並要使用JSTL,要注意:

JSTL的URI是 http://java.sun.com/jstl/core,
不能寫成http://java.sun.com/jsp/jstl/core

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"><html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich" 
xmlns:c="http://java.sun.com/jstl/core">
.....(略)

2010年1月3日 星期日

Apache HttpClient 4.x版

新的HttpClient 4.x版(API)在使用上與舊有的3.x版似乎有很大的差異,例如HTTP Post表單資料要設定form parameter時的用法:








//HttpClient 3.x
//......
HttpPost post = new HttpPost( URL );
post.getParams().setParameter("input1", "val1");
HttpResponse response=httpClient.execute(post);
//.....


//HttpClient 4.x
//......
HttpPost post = new HttpPost( URL );
List formparams = new ArrayList();
formparams.add(new BasicNameValuePair( "input1", "val1" ));
UrlEncodedFormEntity postEntity =
new UrlEncodedFormEntity(formparams, "UTF-8");
post.setEntity(postEntity);
HttpResponse response=httpClient.execute(post);
//.....


4.x似乎在資料結構與使用上繁雜許多,除此之外,還有許多不同之處,詳見
http://hc.apache.org/httpcomponents-client/tutorial/html/
然而在4.x版本如上使用3.x的寫法,跑得起來嗎?答案是可以,但是非常不幸的某些加進去的parameter會不見(到底是被其他parameter覆蓋掉還是內部運作時被誤刪掉不得而知), 所以建議使用4.x版還是參照著4.x的文件內的寫法來使用才好.....