目前分類:Java Related (42)
- Oct 12 Thu 2006 10:34
XQuery
- Oct 12 Thu 2006 00:22
Java Content Repository
由於傳統的Ralational & Object DB缺少了資料倉儲的彈性,沒有版本控制等等功能,Content Repository API (JSR 170) 定義標準的資料倉儲介面API。JSR 170值得注意的地方,除了要囊括不同儲存媒體的遠大目標之外(就是以同樣的API面對不同的儲存媒體,例如RDB、File System等等,單純地以設定的方式決定儲存媒體),還有它是從誕生開始就以Open Source為出發點的一個標準(ref: Java Community Process (JCP) 2.6 - More Ways to Get Involved),就連TCK也是使用Apache的授權。
Apache Jackrabbit提供了JSR 170的open source implementation,在使用Jackrabbit之前,要先決定deployment的方式(Jackrabbit Example Deployment Models),分為三種:Model 1: The (Web-) Application Bundle、Model 2: Shared J2EE Resource、Model 3: The Repository Server,但三種model的設定方式差異不大,問題的重點在決定配置伺服器的架構。
JSR 170制訂了JCR 1.0的標準,Day Software 已經提出修改的JSR 283:JCR 2.0標準,目前還在草案階段,Apache Jackrabbit是JCR的open source實作,現在已經完成JCR 1.0而且正在實作2.0當中,但Jackrabbit還不是很成熟的軟體。
- Aug 30 Wed 2006 11:33
AP server上重要的Cache機制
Hibernate現在可說是ORM的代言人,但其中的cache機制直接影響到Hibernate的效能表現,目前 Hibernate 內建支援 EHCache, SwarmCache, OSCache, and JBoss Cache,不知道什麼原因Apache的JCS並沒有納入Hibernate,但JCS Usage in Hibernate這篇文章也提到,Apache提供的JCS也可以透過製作Hibernate Cache plugin的方式用在Hibernate裡面。
Cache可說是一種以空間換取時間的機制,利用local的memory或是disk,將AP使用的資料暫存起來,以供後面AP的使用,舉例來說,一個取所有文件列表的查詢,事實上就可以放入cache機制當中,因為每一位登入的使用者,沒有必要重複向資料庫查詢所有的文件列表,只要將資料放入cache,就可以讓其他使用者節省向DB查詢的時間,減少DB系統與網路資源的浪費。
在真實的AP使用上,cache也要分成不同等級,例如AP等級、使用者等級,甚至可以加上單位等級,不同等級的cache有不同的作用,也需要對應不同的cache策略。
- Jul 31 Mon 2006 14:29
salesforce.com
這期的商業週刊電子報,裡面有這篇文章「弱點攻一百次,巨人也會倒」。salesforce.com 總裁 Marc Benioff 打著「反軟體(No software)」的旗幟,行銷自己的軟體事業。
salesforce.com最重要的成功之處並不在於軟體技術,而是他成功地從客戶的角度為出發點,行銷了自己的商業模式,觀察他們目前推出的CRM系統線上demo,可以發現介面上提供的功能很多,對公司的服務內容來說,重要的是功能齊全,介面要簡潔有力。
World Wide Web對於一般使用者已經不是一件新鮮事,由於web介面語言標準化,使得user在安裝一套瀏覽器軟體之後,就能使用各式各樣的網頁服務。網頁應用目前可分為兩種,一種是web service,建構在網頁標準之上,提供不同web伺服器之間透過網頁標準互相溝通傳送資料,另一種則是單純的網頁介面,這是提供給終端使用者來直接使用服務的介面。
- Jul 26 Wed 2006 22:45
Note: prototype.js Javascript Framework
- May 15 Mon 2006 08:16
AJAX & Ruby on Rails
5/13是我第一次參加SA@台中的活動,「AJAX & Ruby on Rails心得分享!」,對這個活動的規模與場地覺得蠻令人感動的,一個免費的活動能吸引將近一百個人,場地雖然在偏遠的清水國小,還能把整間視聽教室坐滿,演講的內容與品質也令人印象深刻。因為不熟悉路況,提早出發也蠻早到場,看到了一位人物坐在後面,沒認錯的話應該是jserv,但我這個檯面下的人物並沒有大方地趨前致意。
有段時間沒有聽這麼專業的演講了,獲益良多。對我來說,AJAX帶來的困擾並不只是技術上的工具支援問題,更重要的是,我必須要思考在網站的介面上的哪個部分的功能,應用AJAX的「非同步」功能,另外一個問題,就是在跟美工人員配合時,要怎麼共同以「非同步」的概念為前提,設計網站的人機介面。就我觀察演講者James展示的AJAX網站,多數運用AJAX的網站畫面都是單純儉樸,以「提供資訊」為主要訴求,這些網站的重點放在資訊與內容,沒有非常複雜的美工,而最好的人機介面就是要讓使用者用得愉快,不管你用了什麼技術。
「讓人愉快Make User Happy」最後這句話,也是第二個Ruby on Rails的講題重點,Ruby的設計理念,就是要「Make Programmer Happy!」,就演講者demo的過程看來,Ruby做了很多「預設選項」的工作,以節省程式設計師繁雜的coding與configuration工作,能節省這麼多工作內容,的確是蠻神奇的。也許真的該花點時間,瞭解Ruby。
- Apr 18 Tue 2006 11:18
令人苦惱的Paradox(第二集)
感謝一位不知名的網友提醒 Hxtt Paradox JDBC Driver 能存取Paradox資料庫,再加上業主對這個軟體 Single Server License 180USD售價爽快地付錢,我才能順利地使用Java去操作 Paradox DB。BLOB欄位也可以在慢慢地 try error 方式下,撰寫一個utility method解決Rich Text格式的text formatting轉換,在過程中,JUnit幫了大忙。
但這並不代表所有的問題都已經被解決了,在實作搜尋功能的過程中,我發現搜尋結果要在網頁上分頁呈現,對於Paradox來說是一件很辛苦的事情,我找不到類似Oracle的 rownum SQL語法(select * from table where rownum >=21 and rownum 產生Value Object->存入Session裡面,不但耗時又耗記憶體。這個時候,偉大的 Lucene 出現了,對Lucene沒有深入研究的我,在Javaworld上所幸有 hkdennis2k 回答,我知道了當欄位資料以Keyword方式產生index時( document.add(Field.Keyword("field", "abcd")) ),就可以使用 "a*"這種搜尋語法支援字首搜尋。這無疑是一個大好的消息,我馬上就能讓這個案子能以類似字典搜尋的方式,以非常快的速度支援"a*" 1000多筆資料 ->"ab*" 500多筆資料 ->"aba*" 50幾筆資料 的逐步搜尋。通常在第三個字母的時候,資料的數量就已經縮小到可以接受的範圍了,我無法想像,光用SQL要怎麼處理這種搜尋。
接下來又遇到了另一個問題,就是Hxtt Paradox JDBC Driver在Join table的時候,明顯覺得速度變慢,再將上摧殘DB的 "like" SQL語法(select * from table1, table2 where table1.field1=table2.field1, table1.field2 like '%somestring%'),這個時候,偉大的Lucene又被我搬出來使用,把對應的欄位都存入lucene index之後,犀利的搜尋功能馬上就能提升到「快狠準」的程度。結果現在我如果要重新產生lucene index,每次都得花將近一個小時,得到一個15MB資料夾大小的Lucene index。目前我不知道這麼大一個index到底有沒有任何缺點,但Lucene的確幫了我一個大忙。
- Jan 27 Fri 2006 09:41
令人苦惱的Paradox(首部曲)
因為某些原因,我開始接觸Paradox,這個存活在Delphi系統上的Database,我的任務是,要讓舊有存放在Paradox DB裡面的資料,可以提供Web介面查詢。根據技術的背景Java,我必須要先想辦法讓Java可以存取Paradox DB。
首先想的,就是拿到 Paradox JDBC driver,當我在google "paradox jdbc" 時,再怎麼逛街,都會逛到這個網址 http://bdn.borland.com/article/0,1410,21642,00.html 標題就是 "Corel's Paradox JDBC Driver",很令人興奮,想想不過就是另一個JDBC driver而已,只要再把JDBC URL設定正確就可以了。結果並不是這樣,文章裡面提到的pdxJDBC,還有PdxJdbc.jar,結果根本找不到這個東西,直接 google "PdxJdbc.jar"的話就更神奇了,有 "need jdbc driver for paradox"的文章,但是根本搜尋不到可提供下載的地方。
更慘的是,我後來才知道,這個Paradox資料裡面,存放了很多 BLOB 格式的資料,裡面都是以 Rich Text 的方式編輯過的文字,我必須要在Web上重現這些上下標的效果,那好吧,就開始找工具,如果有個工具可以幫我把paradox db轉成其他熟悉的資料庫,就方便多了,不過這個工具得要能幫我把BLOB資料轉出來。找工具得透過各種不同的管道,合法非法的都試,因為有data export功能的軟體,不一定能處理BLOB欄位。如果能把資料export成csv檔,那麼就可以再寫java程式,轉換Rich Text資料內容,並將資料寫入到比較好用的database裡面。
- Aug 20 Sat 2005 17:03
JavaTwo2005的記錄與感想
8/17 早上
1. Netbeans
Matt Thompson 強調 netbeans 比 Eclipse 強在 J2ME AP 的開發上,但觀察這次 JavaTwo 專家講座,EE 相關有 8 個,SE 相關 3 個,ME 相關 2 個,還有 1 個講憑證 IC 卡,1 個講 Tool,EE 的技術場次明顯比 ME 還多,這是不是表示使用EE 的技術人員比 ME 多?雖然 Java 手機的數量驚人,但開發人口是不是比 EE 少很多?如果是這樣的話,Netbeans 從ME 的角度切入 IDE 市場,要怎麼滿足多數 EE 開發人員的胃口呢?
2. J2ME developement in Netbeans
- Aug 15 Mon 2005 13:48
造字讓 jdbc thin driver 發生"違反協定"錯誤 in Oracle 8.0.6
症狀:使用jdbc thin driver連接Oracle 8.0.6查詢客戶姓名時,jdbc顯示 "違反協定" 錯誤,db -> AP server 的網路流量飆高
發生原因:客戶姓名為特殊字,使用造字檔造字
詳細內容:使用jdbc thin driver連接Oracle 8.0.6查詢客戶姓名時顯示 "違反協定" 錯誤,但db持續透過該連線傳送無效資料(裡面都是00的封包資料)給AP,connection pool視該連線為使用中的狀態,db connection pool無法回收該connection,結果使網路流量飆高,db持續為忙碌狀態效能下降
- Jun 24 Fri 2005 11:23
Mobicents 1.0, 1st open JAIN/SLEE implementation
傳統Telecom市場必須建置一套SS7電信網路,自從VOIP出現後,Telecom跟IT已經開始有整合的趨勢,電信交換機的環境是封閉市場,掌握在廠商的手中,新穎的加值服務必須一直仰賴廠商支援(一直付錢),一旦IT領域藉由VOIP切入電信市場,將會侵蝕電信業的利基。
VOIP是通話的協定,但在協定之上,必須建置一套應用程式開發伺服器,並提供管理與計費等功能。
Ivelin Ivanov's blog比較了三套標準:
- Jun 23 Thu 2005 17:30
Why J2EE Projects Fail
Recorded at TheServerSide Java Symposium 2005 - held March 3-5, Las Vegas
1. J2EE has not proven a panacea. Bad technology usage can guarantee failure.
2. General reasons
- Jun 07 Tue 2005 16:05
解 sudoku 的java程式分享
- Mar 31 Thu 2005 23:53
利用 lucene 製作自己的磁碟檔案資料搜尋工具
先前曾經用 lucene 製作網站上的搜尋功能,最近因應老友Timothy的要求,希望我幫他找到一個搜尋工具。
根據他的要求,他在寫BIOS程式時都是用ASM組合語言,但因為組合語言目前沒有像Java一樣,有許多大廠幫忙製作適當又好用的IDE,例如:Eclipse、JBuilder,所以他現在還得用簡單的文字處理工具寫程式,在這種情況下,常常需要在專案裡面搜尋哪個檔案有什麼特定字串。
他說Windows的搜尋功能,或是Norton的FileFind速度超慢,時間就是金錢,如果沒有好的工具,再有耐心的人,也會一下子被消磨殆盡。
- Jan 06 Thu 2005 10:25
不能信任的OracleConnectionPool
現在大家使用JDBC的時候,應該一定會使用Connection Pooling的機制,這個概念已經變成是常識,所以Connection Pooling的Implementation也非常地多,也許是前人開發的時候,覺得Oracle Database當然要使用Oracle的Connection Pool,所以就用了OracleConnectionPoolDataSource(Oracle公司製作的ojdbc14.jar裡面有個 OracleConnectionPoolDataSource ),可是沒想到困擾了我好一陣子的網站效能問題,竟然發生在這個Pool上面。
我們的平時網站運作還算正常,Server Loading也不重,但總會不定期發生一個問題,網頁上的畫面資料,在向Database下sql command取資料的時候,變得異常地緩慢,一開始覺得是廠商程式寫得太差,因為他把JSP畫面內嵌JDBC程式碼,所以花了一些時間,把所有畫面都改成DAO+Java Bean的模式,另外同時為了改進效能,加入了Cache的概念,利用Singleton與一個簡單的Timer機制,將畫面的資料Cache起來。
這樣做的好處可以避免每一個client連線後,都得向Database取出相同的資料,既可以減少AP Server對Database的loading與latency,也可以加快反應速度,至於後端資料維護的部分,就另外作一個畫面,可以讓資料維護人員點選後將timer重設並重新更新Cache資料。自從運用這個方法後,這些畫面都不再會發生問題了,但還是有一些畫面是根據使用者的個人資料呈現的,所以必須要即時向DB索取資料,問題就發生在這類畫面上。
- Dec 01 Wed 2004 10:05
解決Swing的MVC Model問題
- Oct 20 Wed 2004 23:08
大陸永中Java版Office
- Sep 23 Thu 2004 23:12
TopCoder
它們用獎金吸引一些人開發component與軟體, 另外也跟 廠商合作, 線上舉辦coding比賽, 還有一個地方可以做coding練習, 他們出了一些題目, submit code後當場測試 並給分數
這個網站延伸了open source的想法, 把軟體開發分成 Software Component, Application Development, Review Board三個level, 而開發的流程專為全世界open source programmer設計, 也整合了business method, 希望能把所有programmer的貢獻轉換成金錢, 回饋給這些人.
- Sep 13 Mon 2004 23:15
製作網站的搜尋功能
搜尋的功能, 首要選擇就是 Apache 的 Jakarta Lucene, 但是Lucene並不是一個已經包裝好的搜尋工具, 它只是一個軟體套件, 使用它必須要自己額外多下一些功夫, 寫一些程式, 就可以完成搜尋網頁的目的, 也可省下一筆經費.
搜尋的第一個步驟, 就是要產生一份所有網頁的Index, 在Lucene只有製作Index reposity的API, 卻沒有解析html/jsp等網頁的API, 而取得網頁有兩種方法, 第一種就是利用網頁的crawler/spider, 對自己的網站"爬"出所有的網頁, 這個方法可以保證, "爬"到的網頁一定都是 "reachable from user", 對於我們有一堆index_backup1.jsp, index_backup2.jsp的網站來說, 這是比較適合的方法. 另外一種方法是直接從local web server的網站資料夾裡面, 取出所有的網頁, 這種方法比較簡單, 但會把很多有的沒的網頁通通都撈出來.
取得網頁後, 就要用html parser解析html網頁, 一樣有兩種方法, 一種是使用直接解析的方法, Unweaving a Tangled Web With HTMLParser and Lucene 這是人家已經寫好的解析套件, 另一種則是用 html lexical analyzer, 也就是JavaCC, 利用Compiler Compiler製作Html Parser, 這也是Lucene的範例裡面提供的方法, 這個方法學術味濃厚, 不是一般人可以做到.
- Jul 14 Wed 2004 00:02
mvnforum-1.0.0-rc3 修改記實
主要希望能夠修改出一個適合討論數學問題的討論區, 提供了方程式與繪圖的編輯,
如果有任何人使用這個修改的程式製作數學討論區, 又需要任何技術支援的話, 請通知我.
不需要技術支援的話, 也請通知我, 讓我知道有這樣的討論區.