目前分類:Java Related (42)

瀏覽方式: 標題列表 簡短摘要
  • Oct 12 Thu 2006 10:34
  • XQuery

專為XML設計的查詢語言

Java 理論與實踐: 用 XQuery 進行畫面剪輯
XQuery Tutorial
揭穿 XQuery 的神話和誤解

yaocl 發表在 痞客邦 留言(0) 人氣()

由於傳統的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還不是很成熟的軟體。

yaocl 發表在 痞客邦 留言(0) 人氣()

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策略。

yaocl 發表在 痞客邦 留言(0) 人氣()

這期的商業週刊電子報,裡面有這篇文章「弱點攻一百次,巨人也會倒」。salesforce.com 總裁 Marc Benioff 打著「反軟體(No software)」的旗幟,行銷自己的軟體事業。

salesforce.com最重要的成功之處並不在於軟體技術,而是他成功地從客戶的角度為出發點,行銷了自己的商業模式,觀察他們目前推出的CRM系統線上demo,可以發現介面上提供的功能很多,對公司的服務內容來說,重要的是功能齊全,介面要簡潔有力。

World Wide Web對於一般使用者已經不是一件新鮮事,由於web介面語言標準化,使得user在安裝一套瀏覽器軟體之後,就能使用各式各樣的網頁服務。網頁應用目前可分為兩種,一種是web service,建構在網頁標準之上,提供不同web伺服器之間透過網頁標準互相溝通傳送資料,另一種則是單純的網頁介面,這是提供給終端使用者來直接使用服務的介面。

yaocl 發表在 痞客邦 留言(0) 人氣()

Note: prototype.js Javascript Framework

yaocl 發表在 痞客邦 留言(0) 人氣()

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。

yaocl 發表在 痞客邦 留言(0) 人氣()

感謝一位不知名的網友提醒 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的確幫了我一個大忙。

yaocl 發表在 痞客邦 留言(1) 人氣()

因為某些原因,我開始接觸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裡面。

yaocl 發表在 痞客邦 留言(1) 人氣()

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

yaocl 發表在 痞客邦 留言(0) 人氣()

症狀:使用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持續為忙碌狀態效能下降

yaocl 發表在 痞客邦 留言(5) 人氣()

傳統Telecom市場必須建置一套SS7電信網路,自從VOIP出現後,Telecom跟IT已經開始有整合的趨勢,電信交換機的環境是封閉市場,掌握在廠商的手中,新穎的加值服務必須一直仰賴廠商支援(一直付錢),一旦IT領域藉由VOIP切入電信市場,將會侵蝕電信業的利基。

VOIP是通話的協定,但在協定之上,必須建置一套應用程式開發伺服器,並提供管理與計費等功能。

Ivelin Ivanov's blog比較了三套標準:

yaocl 發表在 痞客邦 留言(0) 人氣()

Why J2EE Projects Fail by Rod Johnson

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

yaocl 發表在 痞客邦 留言(2) 人氣()

邏輯與視覺圖像遊戲

這篇舊文章提到了"發現小船"這本書,書裡面有一些邏輯遊戲,最近在javaworld技術論壇又有人提起,所以就寫了程式可以解 sudoku 的solution。

Class 的關係為
Puzzle --- PuzzleSquare ------- PuzzleData
 |      |        |

yaocl 發表在 痞客邦 留言(0) 人氣()

先前曾經用 lucene 製作網站上的搜尋功能,最近因應老友Timothy的要求,希望我幫他找到一個搜尋工具。

根據他的要求,他在寫BIOS程式時都是用ASM組合語言,但因為組合語言目前沒有像Java一樣,有許多大廠幫忙製作適當又好用的IDE,例如:Eclipse、JBuilder,所以他現在還得用簡單的文字處理工具寫程式,在這種情況下,常常需要在專案裡面搜尋哪個檔案有什麼特定字串。

他說Windows的搜尋功能,或是Norton的FileFind速度超慢,時間就是金錢,如果沒有好的工具,再有耐心的人,也會一下子被消磨殆盡。

yaocl 發表在 痞客邦 留言(0) 人氣()

現在大家使用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索取資料,問題就發生在這類畫面上。

yaocl 發表在 痞客邦 留言(0) 人氣()

Swing從誕生的一開始, 就被侷限住了, 因為設計的時候把 View跟Control這兩個部分放在一起, 相對於Swing的混淆設計, Web部分的Servlet跟JSP天生就有controller跟view的特性, 所以在開發Java Web專案的時候, 很自然地就可以套用出一個 MVC Model 2 的架構 (參考J2EE Patterns), 然而在rich client上, 似乎沒有見到什麼Patterns的集合, 以下這兩個專案, 就是為了解決 Swing的 Control與View混雜的問題而誕生的.

ScopeMVC
JStaple

yaocl 發表在 痞客邦 留言(0) 人氣()

永中應該是繼金山軟件公司之後, 大陸的第二家可與微軟抗衡的專業軟件公司. 以Java為實作語言, 擺脫了MS作業系統的包袱, 並能巧妙運用Open Source Java的套件工具, 加上獨創的資料集成技術, 成功地以250個員工在幾年內便製作出重量級的Office軟件.

永中身在大陸的環境也是得天獨厚的, 因為大陸官方傾向於以民族意識的型態治國, 國人自製的軟件相信會是官方另一個新選擇, 有了官方的支持, 就有了資金基礎, 再加上外銷的市場, 永中EIOffice的未來值得多加注意.

總經理曾參專訪

yaocl 發表在 痞客邦 留言(0) 人氣()

http://www.topcoder.com

它們用獎金吸引一些人開發component與軟體, 另外也跟 廠商合作, 線上舉辦coding比賽, 還有一個地方可以做coding練習, 他們出了一些題目, submit code後當場測試 並給分數

這個網站延伸了open source的想法, 把軟體開發分成 Software Component, Application Development, Review Board三個level, 而開發的流程專為全世界open source programmer設計, 也整合了business method, 希望能把所有programmer的貢獻轉換成金錢, 回饋給這些人.

yaocl 發表在 痞客邦 留言(0) 人氣()

搜尋的功能, 首要選擇就是 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的範例裡面提供的方法, 這個方法學術味濃厚, 不是一般人可以做到.

yaocl 發表在 痞客邦 留言(0) 人氣()

主要希望能夠修改出一個適合討論數學問題的討論區, 提供了方程式與繪圖的編輯,
如果有任何人使用這個修改的程式製作數學討論區, 又需要任何技術支援的話, 請通知我.
不需要技術支援的話, 也請通知我, 讓我知道有這樣的討論區.


yaocl 發表在 痞客邦 留言(0) 人氣()

«12 3