如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2005年8月31日

應用系統整合層次

Fredwang 20050831 (fredwang.blogspot.com)

企業應用系統間如何整合,使用怎樣的整合層次往往與企業的規模,成長與發展過程,商業的需求及投資策略有關,下面是不同的整合層次
1. 系統間整合前 : 每個系統間的介面很少,每個系統就是一個”資訊孤島”,缺乏跨組織的流程,需人工重新輸入讓應用系統間的資料能一致。
2. 層次一 - 點對點的整合 : 使用API或資料同步化工具(如抄寫工具)建立點對點自訂的介面,以訊息導向的中介軟體來整合,系統間耦合性低。
3. 層次二 - 結構化整合 : 介面架構為Hub狀或星狀或Message bus等資訊集中式的架構,中介軟體包含訊息代理(message broker)或應用伺服器,中介軟體的功能包括 : 資料轉換及轉換規則處理,交易處理。這種層次又稱企業應用介面模型(EAI model)。
4. 層次三 - 流程整合 : 以層次二的架構為基礎,系統間的資訊不僅可以分享也可以管理,中介軟體包含流程自動模型化(modeling)工具,中介軟體的功能包括 : 工作流程整合,自動路徑安排(routing)等。
5. 層次四 - 外部整合,以層次三的架構為基礎,系統間有共同的網路基礎架構,如Internet,共同的資料標準,如XML,中介軟體的功能包括 : 交易安全機制,智慧代理程式,資料對映(mapping)等,一致的應用系統,如B2B或B2C

2005年8月17日

[推薦文章]Java能夠成爲完美的技術平臺嗎?

作者:wafd譯 來自:CSDN 2004/03/16
前言

像許多在不斷發展的平臺/語言一樣,Java讓很多程式師又愛又恨。當然,當然這不包括那些狂熱的Java愛好者,對於他們來說Java比.Net,LAMP或任何其他語言或平臺都要好,但是,我們還是不得不面對複雜的Swing,龐大的EJB規範等對硬體的額外要求以及J2ME的變化多端的實現方式等等等等。抛開以上這些Java的弱點,我們可以說Java是一個完美的技術平臺,那麽Java到底有沒有成爲一個完美的技術平臺的潛力呢?這篇文章將從兩個方面討論這一主題,開始,我會詳細的告訴你什麽是完美的技術平臺以及爲什麽Java平臺能夠成爲完美的技術平臺。之後我會偏重於具體的解決方案,如何通過設計的優化避免Java平臺的弱點。 ...

內容詳見Java能夠成爲完美的技術平臺嗎

感想(Fred) : 要了解一個技術, 只有熟悉技術的內容, 功能及優點是不夠的, 熟悉技術的限制與缺點才算真正的懂得這個技術. 唯有如此, 才能在這些限制下靈活的應用這個技術.

使用標準的Java Timer API執行Scheduled Job

FredWang (http://fredwang.blogspot.com)
2005/08/17

有些事情或技術沒有記下來, 時間一過就忘記了, 下次用到又要花許多時間回憶與研究, 因此用Blog做筆記作為備忘

第一節. 在Server端Stand-alone執行的Job

範例一 : 立即執行, 每三分鐘執行一次
/* class ReportGenerator */
package sche.*;
import java.util.Date;
import java.util.TimerTask;
public class ReportGenerator extends TimerTask {
public void run() {
Date now = new Date();
System.out.println("Generating report:"+now.getTime());
//TODO generate report
}
}

/* class MainApplication */
package sche.*;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class MainApplication {
public static void main(String[] args) {
Timer timer = new Timer();
Date now = new Date();
// 立即執行, 每三分鐘執行一次
timer.schedule(
new ReportGenerator(),
now,
1000 * 60 * 3
);
}

範例二 : 每週日午夜零時執行一次
/* class MainApplication */
package sche.*;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class MainApplication {
public static void main(String[] args) {
Timer timer = new Timer();
Calendar date = Calendar.getInstance();
date.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
date.set(Calendar.HOUR, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);
// 每週日午夜零時執行一次
timer.schedule(
new ReportGenerator(),
date.getTime(),
1000 * 60 * 60 * 24 * 7
);
}
註 : ReportGenerator程式不變

第二節. 用JSP來控制Job的啟動與關閉

/* 立即執行, 每三分鐘執行一次 */
package sche.*;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerService {
Timer timer = new Timer();
public TimerService() { };
public void start() throws Exception {
Date now = new Date();
// 立即執行, 每三分鐘執行一次
timer.schedule(
new ReportGenerator(),
now,
1000 * 60 * 3
);
}
public void stop() throws Exception {
timer.cancel();
}
}
註 : ReportGenerator程式不變

JSP程式範例
1. scheControl.jsp : 根據application屬性, 顯示開始或停止的按鈕

<%@ page import="sche.*" %>
<form action="sche.jsp" method="post">
<%
TimerService service = (TimerService)application.getAttribute("timerService");
if(service == null) {
out.print("<input type=submit value='Start Service'>");
} else {
out.print("<input type=submit value='Stop Service'>");
}
%>
</form>


2. sche.jsp : 根據application屬性決定開始或停止

<%@ page contentType="text/html; charset=Big5" %>
<%@ page import="sche.*" %>
<%
TimerService service = (TimerService)application.getAttribute("timerService");
boolean isStart = true;
if(service == null) {
service = new TimerService();
application.setAttribute("timerService",service);
service.start();
System.out.println("Timer service is startup.");
} else {
service.stop();
isStart = false;
service = null;
application.removeAttribute("timerService");
System.out.println("Timer service is stop.");
}

%>
<html>
<body>
<%=(isStart?"start ok":"stop ok")%>
</body>
</html>


第三節 其他
其他進一步的做法有 :
1. 將TimerService改寫為服務多個Job的Service[2]
2. 利用Servlet Context Listerner來啟動與關閉Service (實作javax.servlet.ServletContextListener的contextInitialized() and contextDestoryed() [3]
3. 使用Quzrtz API建構功能更強大的Job-scheduling System, 例如: Persistence(持續性), 可以不因系統當機重開, 造成Jobs的消失, 且提供比Java Timer API更有彈性的定時驅動方式, 例如每週六及周日的中午12點才執行, 可以分別管理許多不同的Jobs與不同驅動方式(Triggers) [1]

參考 :
1. Dejan Bosanac, "OnJava.com : Java Scheduling in Java", 03/10/2004, http://www.onjava.com/lpt/a/4637
2. "一個簡單的timer service", http://66feifei.com/info_Print.asp?ArticleID=140
3. 徐榮勝, "如何在Web工程中實現任務計畫調度"

2005年8月16日

一個軟體開發程序文章整理的網站

http://www.dotspace.idv.tw/sdp/sfpro.htm
含RUP, XP一些不錯的文章簡介與連結

轉貼 徐江屏的"傲慢與偏見"

請見徐江屏的Blog

讀到一篇張大春的文章,談的是批評別人不讀書的傲慢。不知怎地,總讓人想起李敖。這用功至勤但稱不上氣度廣闊的讀書家,總喜歡批評別人不讀書,死讀書,不會讀書,那理直氣壯的態度,相較之下,只能以自己真是如此而悶不吭聲,沈默以對。這究竟能不能看成是「知識的傲慢」,一時之間也說不上來,大家習慣了李敖式的謾罵,在實在拿不出比他更恢宏的知識背景,根本連批評反擊都談不上,只能小家子氣小聲地說諸如:「就算書讀得多也不用那麼刻薄」之類的話語末節批評,或敬而遠之,或忽略他所提出可能是很有見地的觀點或看法。反倒是如南方朔般淊淊說理氣定神閒,引得更多人的尊敬與推崇。終究是制錮在「中道」的民族,不偏不倚才是知識份子該有的態度,儒雅自持才是知識份子該有的風範。

可就有人不同意,艾德華.薩依德就以為,知識份子本來就該有自己的態度與看法,本就該為自我理念的實踐付出應有的心力,所以才有「丟石塊」事件。知識份子上街頭抗議公部門不當舉措與國家暴力發生衝突,又有什麼了不起呢?

這實在也不是什麼馴服或僕役能夠說明清楚的。威權時代的知識份子幾乎都是黨國的文宣機器,在國家機器前噤若寒蟬,能有勇氣向威權抗拒的能有幾人(也許就因此李敖現在說話才會這麼大聲:「你們又算是什麼東西!」)。而在這個意識型態對立的當下,站在兩端發言的學者專家,各自會得到支持者的叫好與掌聲,但激情之後究竟對論述的形成有多少幫助?如果避而不談什麼各擁其主的臆測思考,這其間又有多才知識辯駁中因著情緒而出的「傲慢與偏見」?

說傲慢太沈重,說偏見太平常,生活中相對瑣碎的零零總總,幾乎把一天的時間就要填滿,也沒少有氣力去追究到底讀了多少書才算有點水準,讀了那些書才算有些氣質。但總能看到一些睥睨的眼神,以為讀了些書就了不得,大放厥辭而不以為意,又容不下別人的意見,總認為他人所言不過是婦人之見。真要比較是比較不完的,談人生閱歷,閱人無數的總還有看錯人的時候。讀書千冊就以為與古今智慧交融並進,知識與智彗的積累早遠遠在眾人之上,恐怕也太高估了自己的能力。

古時形容知識份子的謙沖態度,總以「溫文儒雅」形容。那翩翩的風範,不免又讓人懷想著玩弄竹雕雅飾的脫俗樣貌,不論世事,不與政爭,仙風道骨,不食人間煙火,那是象牙塔裏自我保護的清高模樣,只求自我學識的飽脹,不管塵世俗務,不管百姓死活。說傲慢有些誇張,卻也點出擁知識而自重的偏誤心態。除非術業專攻,以市井小民每日營生的困頓境地,能以閱讀為樂已是難得的癖好,談不上以學富五車而敝帚自珍,孤傲起來。怕的卻是學有專精卻吝於與人分享成就,自我隔離而斷絕所有對話的可能,孤傲到了不可一世的地步,而失落恐非三句兩言得以形容。更不要提經國淑世的寬闊襟懷,報國衛民,擁護個人的基本權利而強悍堅持不懼強權的入世精神,將如何動人了。

傲慢與偏見當然會如影隨形,亦步亦趨地跟隨。對知識份子的不與人交,自視甚高,那付醜態,無比厭人。這是偏見,以為知識份子就必然扛著知識的大鼎,不喜與人為善,依附於國家強權之下,趨炎附勢。知識才有力量,卻是鞏固國家權力的御用力量,將自己的人格放在地上踐踏。那是威權時代的知識份子了。許多為民主改革社會再造付出畢生精力的知識份子,所在多有,絲毫看不到任何傲慢與偏見的痕跡。放棄那些先入為主的印象與觀念,重新感受知識的力量,才會有真實的感動。

反而是半吊子的愛書人,讀了幾冊書後就自以為專家,四處賣弄所學的結果,往往是暴露了自己的拙劣容顏,也褻瀆了知識的莊嚴。那種傲慢,反而遲滯了再向前進的步子,那股莫名的偏見,遮掩了觀照全局的視野。故步自封,無以為甚。

再回望那老派的知識份子,為了那份對人的熱愛,對自由與尊嚴的必要堅持,對知識所抱持的尊重態度,讀了這幾冊書又算得了什麼?謙卑地躲在書房裏,踏著前人智慧累積所舖陳的路子,試著走出一條自己的路。觀照四週的風光山水,向著莊嚴的殿堂走去。傲慢與偏見,就不必了!(2002/11/7)

2005年8月12日

優質Blog介紹之一

1. EVHEAD
站主 : Evan Williams
開站日期 : 1999/02
說明 : 這是Blog元老級的人物的網站
網址 : http://www.evhead.com/
語言 : 英文

2. 中文網誌組織(CNBlog)
站主 :
開站日期 : 2002/10
說明 : 許多中國Blog老手的共同創作園地
網址 : http://www.cnblog.org
語言 : 簡體中文

3. Zonble's promptbook
站主 : Zonble
開站日期 : 2003/01
說明 : 一個有特色有個性的Blog, 也有不少技術文章
網址 : http://zonble.twbbs.org/
語言 : 正體中文

4. Judysmile Experimental Blog
站主 : Judy
開站日期 : 2002/08
說明 : 生活記事的網站, 頗有特色
網址 : http://blog.yam.com/judysmile
語言 : 正體中文

5. 中時電子報編輯部落格
站主 :
開站日期 :
說明 :
網址 : http://blog.chinatimes.com/
語言 : 正體中文

2005年8月5日

Blog的發展, 證明了知識經濟的偉大

Blog的發展, 證明了知識經濟的偉大, 大家可以透過網路分享自己的所知所學與心得, 從網路上學習知識也無私的分享給他人, 在這裡不管身分地位學歷背景大家一律平等, 不管見解是否成熟想法是否正確, 大家可以自由的發表言論(合法範圍內).

可笑的是, 在Blog蓬勃發展的今日, 還有人無法了解這些真義, 曲解知識經濟, 將別人發表的的文章視為炫耀性的行為, Peter Senge 第五項修練提到學習性組織, 透過團隊學習可以提升組織的競爭力, 而學習性組織中沒有職位高低之分, 也沒有聞道先後與術業專攻的問題, 大家互相貢獻所學所知, 沒有炫耀與等級, 如此才可以拋開成見, 看到更廣的視野, 一人所知所學, 無法像團隊學習來的廣泛, 一人所見到的問題也不如團隊所看到的問題哪麼全面.

許多專業人員常常陷入專業的盲點, 而無法以更寬廣的角度, 看事情及與人相處, 這在另一篇文章有提到(" 專業的危機,來自於盲目的自信" http://fredwang.blogspot.com/2005/05/blog-post_24.html) 這就是說過於專注與自信, 往往無法接受自己所專注的事物與見解之外的事物與見解.

廣大的Blog作家們, 默默的為知識經濟貢獻著, 而這股潮流將讓這個冷漠, 自私與功利的世界有所不同, 例如, 南亞海嘯的報導透過Blog讓大家更快速的了解到狀況, 並透過許多的共同作者與回應號召援助. 而這群人正不停的增加中.

-- Fred Wang