
2006年11月10日
這段時(shí)間看了不少的文章都是關(guān)于
SCA
與
OSGi
之間比較的。且不論他們之間到底有沒(méi)有關(guān)系,我們來(lái)看看他們的定義
SCA
??????
服務(wù)構(gòu)件架構(gòu)
(Service Component Architecture)
是一套規(guī)范,它描述了采用面向服務(wù)的體系結(jié)構(gòu)來(lái)搭建應(yīng)用和系統(tǒng)時(shí)的模型。
SCA
擴(kuò)展并完善了以前實(shí)現(xiàn)服務(wù)的方法,并且
SCA
構(gòu)建在開(kāi)放的標(biāo)準(zhǔn)之上,
例如:
Web Service
服務(wù)構(gòu)件架構(gòu)
SCA
(
Service Component Architecture
)為建設(shè)基于面向服務(wù)的體系結(jié)構(gòu)的應(yīng)用和系統(tǒng)提供了一種編程模型。這基于一種觀點(diǎn),即業(yè)務(wù)功能以一系列服務(wù)的形式被對(duì)外提供出來(lái),然后它們被組合在一起去實(shí)現(xiàn)滿足特定業(yè)務(wù)需求的解決方案。這些復(fù)合的應(yīng)用,可以包含專門為此應(yīng)用程序創(chuàng)建的新服務(wù),也可以包含來(lái)自已有的系統(tǒng)和應(yīng)用程序的業(yè)務(wù)功能,重復(fù)利用就像其中的一部分一樣。
SCA
即為組合服務(wù)提供了模型,也為服務(wù)構(gòu)件的創(chuàng)建,包括在
SCA
組裝中重用已有應(yīng)用系統(tǒng)的功能提供了模型。
?
OSGi
?????? OSGi
是什么,
OSGi
是一種服務(wù)運(yùn)行平臺(tái)。通過(guò)實(shí)現(xiàn)能夠提供服務(wù)的符合
OSGi
規(guī)范的組件,用戶可以將其組件發(fā)布到
OSGi
運(yùn)行平臺(tái),供用戶和其他組件使用。
OSGi
組件提供的服務(wù)具有兩個(gè)層面的含義:系統(tǒng)層面,即一個(gè)組件為其他組件提供服務(wù),這些服務(wù)體現(xiàn)為
Java
接口的實(shí)現(xiàn);業(yè)務(wù)層面,即一個(gè)組件為外部系統(tǒng)或用戶提供某種業(yè)務(wù)服務(wù)實(shí)現(xiàn)。
?
從概念看我們可以很快發(fā)現(xiàn)他們的相同點(diǎn)和不同點(diǎn)。
????????
他們都是一種組件模型,而且是面向服務(wù)的編成模型,都對(duì)服務(wù)組件模型作了相應(yīng)的定義。在兩種模型中都有“模塊”,“組件”,“服務(wù)”這
3
種共同的概念。我們分別從這三種感念來(lái)看看他們之間的差別
模塊:
????????
可能
OSGi
對(duì)于模塊的概念定義的更完善一點(diǎn),支持模塊的動(dòng)態(tài)更新和依賴,而
SCA
對(duì)于模塊的概念中沒(méi)有涉及動(dòng)態(tài)更新的概念
(
實(shí)際如果把
SCA
中的模塊映射到
JEE
中的
EAR
塊就可以做到了
)
,對(duì)于模塊間依賴關(guān)系的定義也沒(méi)有
OSGi
中
Export/import
定義的完美,對(duì)于一個(gè)包的引用,要存在
2
個(gè)不同的副本,至少
WPS
(
IBM
中
SCA
的實(shí)現(xiàn))中是這樣。所以說(shuō)模塊的定義
OSGi
要比
SCA
要完善,實(shí)際上這樣是兩種模型出發(fā)點(diǎn)是完全不同的,
OSGi
設(shè)計(jì)之初主要是面向網(wǎng)絡(luò)設(shè)備的,最后被
Eclipse
所采用才為大家所知的,而
SCA
從一開(kāi)始就是面向企業(yè)級(jí)應(yīng)用的,所以這方面沒(méi)有
OSGi
定義的完善。模塊的定義
OSGi
是在
MANIFEST.MF
文件中通過(guò)元數(shù)據(jù)定義的,而
SCA
是在
sca.module
文件中定義的
xml
格式。從這點(diǎn)上我們就可以看出來(lái),
OSGi
只能是在
java
平臺(tái)上(他的規(guī)范中說(shuō)明也是只適合
java
平臺(tái)的,規(guī)范的
0layer
定義了它的最小
runtime
),而
SCA
是一種跨平臺(tái)的規(guī)范,它不依賴于平臺(tái),你可以是
Java
環(huán)境也可以
C++
環(huán)境。
?
????????
對(duì)于組件的概念,個(gè)人感覺(jué)
OSGi
是在
DS
(
OSGI R4
的
Declarative Services
)出來(lái)以后才有了比較定性的定義,而
SCA
從一開(kāi)始就非常強(qiáng)調(diào)組件的定義,對(duì)于
SCA
組件可以是一個(gè)
webservice
,一個(gè)
java
對(duì)象,一個(gè)有限狀態(tài)機(jī)中的規(guī)則對(duì)象,也可以是一個(gè)
BPEL
流程對(duì)象,還可以一個(gè)人工干預(yù)的工作流對(duì)象,更可以是許多組件的組合對(duì)象,這一點(diǎn)
OSGi
組件是做不到,也不要想
OSGi
能夠做到,因?yàn)樗麄兊脑O(shè)計(jì)出發(fā)點(diǎn)根本是不同的,不要把企業(yè)級(jí)應(yīng)用的東西強(qiáng)加到
OSGi
中來(lái),在
OSGi
中的組件可以發(fā)布
/
查找服務(wù),
SCA
也可以這么做,對(duì)于服務(wù)的引用,
OSGi
只能是在
single JVM
中,不要怪
OSGi
要知道他當(dāng)初設(shè)計(jì)的目標(biāo)就是網(wǎng)絡(luò)設(shè)備,不用考慮企業(yè)級(jí)應(yīng)用中的分布式,服務(wù)質(zhì)量什么的。但是組件概念上
SCA
有一點(diǎn)還是弱于
OSGi
,
OSGi
對(duì)服務(wù)的引用可以做到動(dòng)態(tài)更新,一個(gè)服務(wù)改變了,它可以動(dòng)態(tài)的或者是靜態(tài)的更新應(yīng)用它服務(wù)的組件對(duì)象,這一點(diǎn)在網(wǎng)絡(luò)設(shè)備中是非常重要的,但是在
SCA
這種企業(yè)級(jí)應(yīng)用中到底需不許多要我們還需要考慮,畢竟如果我們是面向接口編成,而不用關(guān)心細(xì)節(jié)是什么,你的服務(wù)再怎么更新,只要我們的接口不變就不會(huì)用什么問(wèn)題。
????????
而服務(wù),最大的差別可能就是
OSGi
是在
single JVM
內(nèi)的所以對(duì)于服務(wù)的引用永遠(yuǎn)都是直接的內(nèi)存引用吧,而
SCA
在服務(wù)的引用上附加了
Binding
的概念也就多了一個(gè)協(xié)議的選擇層,很象
jmx
中
distributed layer
,
SCA
對(duì)于服務(wù)的
Export/Import
都需要
Binding
一個(gè)具體的實(shí)現(xiàn),你的服務(wù)可以通過(guò)
WebService
來(lái)發(fā)布,也可以通過(guò)
RMI
,
JMS
等等來(lái)發(fā)布。這一點(diǎn)是
SCA
的設(shè)計(jì)出發(fā)點(diǎn)來(lái)決定的(面向企業(yè)級(jí)的應(yīng)用開(kāi)發(fā))。對(duì)于服務(wù)的調(diào)用,不僅僅是必須在環(huán)境內(nèi)的調(diào)用,也可以在環(huán)境外進(jìn)行調(diào)用,比如你在一個(gè)
JSP
頁(yè)面想要調(diào)用
SCAExport
出來(lái)的服務(wù),你就可以通過(guò)
SCA
提供的
Tools
直接調(diào)用,
OSGi
是不支持環(huán)境外調(diào)用的。
?
????????
從以上來(lái)看
OSGi
和
SCA
除了基于同樣的設(shè)計(jì)方法,其他的不具什么可以比較性,因?yàn)樗麄冊(cè)O(shè)計(jì)的根本意圖上是不同的,一個(gè)是用在單一個(gè)的
JVM
中的面向網(wǎng)絡(luò)設(shè)備或者像
Eclipse
這種應(yīng)用,不需要考慮服務(wù)質(zhì)量,服務(wù)的可靠性,分布式,等等。而
SCA
從誕生之初就為了解決
SOA
應(yīng)用中的規(guī)范性,而且與他同級(jí)別的還有
SDO
來(lái)定義服務(wù)的數(shù)據(jù)對(duì)象,這一點(diǎn)也是
OSGi
中沒(méi)有定義的。
????????
有人會(huì)說(shuō)
OSGi
最近正在定義在企業(yè)級(jí)應(yīng)用的規(guī)范(
EEG
),
Eclipse
的
RSP
也在做相應(yīng)的努力。但是如果是在
SCA
之外另開(kāi)辟出一個(gè)新的模型空間,個(gè)人覺(jué)得不太可能,畢竟
SCA
是
IBM
,
BEA
,
Oracle
,
Sap
這些廠商在認(rèn)識(shí)到許多現(xiàn)有技術(shù)的不足之后總結(jié)出來(lái)的設(shè)計(jì)模型,是這些廠商經(jīng)驗(yàn)的積累,就像
OSGi
是
OSGi
組織在網(wǎng)絡(luò)設(shè)備應(yīng)用中的積累的一樣,這兩種技術(shù)只能出現(xiàn)互補(bǔ)性,再說(shuō)
SCA
模型的定義充分體現(xiàn)的軟件界一貫的規(guī)則“重用”,不管是
IBM
的
WPS
,還是
Apache
的
Tuscany
都是以現(xiàn)有平臺(tái)為出發(fā)點(diǎn)設(shè)計(jì)的,是把
SCA
這種模型與現(xiàn)實(shí)技術(shù)做一定的映射,例如,如何實(shí)現(xiàn)異步調(diào)用就可以以借助
JEE
環(huán)境中的消息或者
Corba
中消息機(jī)制。
????????
真希望看到
OSGi
的
EEG
組織和
SCA
規(guī)范定制組織合作的場(chǎng)景。這樣不僅可以讓組件服務(wù)思想得到升華,還能為企業(yè)級(jí)開(kāi)發(fā)開(kāi)辟一個(gè)新的天地。
????????
以上觀點(diǎn)純屬個(gè)人感觸,不代表任何特別的言論,其實(shí)最近正打算吧原有的平臺(tái)遷移到
OSGi
平臺(tái)上,在研究過(guò)程中發(fā)現(xiàn)了許多有趣的地方。
????????
歡迎大家一起討論
OSGi
和
SCA
技術(shù)。
posted @
2006-11-10 17:20 我愛(ài)夏花,更愛(ài)秋葉 閱讀(2408) |
評(píng)論 (3) |
編輯 收藏

2006年5月31日
這幾天總算有點(diǎn)時(shí)間,可以看看手頭的書了。
手頭一直有本書從買來(lái)就沒(méi)有翻一下——《
expert one-on-one J2EE Development without EJB
》,這幾天沒(méi)事翻了一下。覺(jué)得大師就是大師一上來(lái)就把我們的苦衷說(shuō)的清清楚楚,還是實(shí)踐出真理阿。
最讓我記憶猶新的是這幾句話:
?
??????
檢驗(yàn)一個(gè)體系結(jié)構(gòu)是否合理,判斷一種實(shí)現(xiàn)選擇是否合適,都要看他是否符合這一主旋律。
??????
主旋律是:
2???????
簡(jiǎn)單
2???????
高產(chǎn)
2???????
面向?qū)ο鬄楸?/span>
2???????
業(yè)務(wù)需求至上
2???????
重視檢驗(yàn)過(guò)程
2???????
重視可測(cè)試性
|
所謂的主旋律,個(gè)人理解就是一種審美觀點(diǎn),就像大家看到漂亮的
MM
一樣,為什么
MM
這么漂亮,因?yàn)樗先藗儗?duì)漂亮的機(jī)電看法
——
國(guó)色天香
傾城傾國(guó)
沉魚落雁
閉月羞花
如花似玉
花容月貌
美若天仙
艷如桃李。。。反正就是美。
從設(shè)計(jì)模式角度說(shuō)明主旋律,就是設(shè)計(jì)中常常遵守的幾點(diǎn)原則——可維護(hù)性,可擴(kuò)展性,可復(fù)用性,要面向接口去設(shè)計(jì),等等。
以上這些都是從理論角度出發(fā)考慮的,而
Rod Johnson
是從實(shí)踐的角度來(lái)考慮問(wèn)題,大學(xué)學(xué)了點(diǎn)哲學(xué)原理都運(yùn)用在這里了。以前在設(shè)計(jì)第一個(gè)框架的時(shí)候沒(méi)有太多的考慮到程序員的實(shí)用型,只是為了設(shè)計(jì)而設(shè)計(jì),最后把框架設(shè)計(jì)的及其復(fù)雜,最后的結(jié)果只有進(jìn)行重新設(shè)計(jì),進(jìn)行框架的重構(gòu)。而在設(shè)計(jì)中遇到的問(wèn)題很多是
Rod
在書中描述的場(chǎng)景,真是深有感觸阿。
2???????
簡(jiǎn)單
設(shè)計(jì)中常常應(yīng)該遵守
2/8
原則,系統(tǒng)中
80%
是最長(zhǎng)用的,應(yīng)該以這
80%
為重點(diǎn)去設(shè)計(jì),如果只是為了設(shè)計(jì)中的完美而過(guò)多地考慮其他的
20%
就會(huì)陷入復(fù)雜的漩渦。就拿我們現(xiàn)在設(shè)計(jì)的
JBrain
(我們的框架代號(hào))框架中的元數(shù)據(jù)系統(tǒng)來(lái)說(shuō)把,本來(lái)是為了對(duì)系統(tǒng)中的所有元素的一個(gè)建模過(guò)程,涉及到顯示模型建模,業(yè)務(wù)模型建模,數(shù)據(jù)模型建模,工作流模型建模,(這個(gè)就好比在基礎(chǔ)框架基礎(chǔ)上又抽象出一層),我們?cè)诮V芯褪强紤]到那
80%
常見(jiàn)的情況,對(duì)模型系統(tǒng)進(jìn)行設(shè)計(jì),但是每一個(gè)業(yè)務(wù)都會(huì)涉及到報(bào)表系統(tǒng),這就是那
20%
的情況,如果我們?cè)倩ňθパ芯繄?bào)表系統(tǒng)的建模,就會(huì)把自己帶入無(wú)比復(fù)雜的深淵中,所以我們決定用這
80%
的模型建模來(lái)描述這
20%
的報(bào)表建模,這樣問(wèn)題就簡(jiǎn)單多了,對(duì)于報(bào)表的設(shè)計(jì)來(lái)說(shuō),雖然有點(diǎn)麻煩,但是我們的設(shè)計(jì)可以適應(yīng)大多數(shù)的情況。實(shí)際只要我們作一些輔助的工具就可以簡(jiǎn)化報(bào)表模型的建模,這是我們?cè)诳蚣荛_(kāi)發(fā)的后期發(fā)現(xiàn)的,經(jīng)過(guò)實(shí)踐證明我們當(dāng)初的想法是真確的。
這種情況還出現(xiàn)在我們當(dāng)初在做一個(gè)業(yè)務(wù)系統(tǒng)的時(shí)的框架選擇上,當(dāng)時(shí)我們?yōu)榱丝蚣苣軌虺惺芨蟮呢?fù)載度,而考慮使用
EJB
的多層開(kāi)發(fā)(幸運(yùn)的是沒(méi)有用實(shí)體
Bean
),這使我們的開(kāi)發(fā)量整整增加的一倍,還在不考慮測(cè)試的情況下。項(xiàng)目結(jié)束了上線使用,用戶根本沒(méi)有當(dāng)初設(shè)想的并發(fā)量,我們當(dāng)時(shí)真的還考慮了
Rod
所說(shuō)的是否能夠在客戶端支持
Swing
程序,幸虧后來(lái)被否定了。有時(shí)候我們?cè)谠O(shè)計(jì)中總是追尋完美,為了設(shè)計(jì)而設(shè)計(jì),這種做法正如
Rod
所說(shuō)的是不科學(xué)的。
簡(jiǎn)單才是美,因?yàn)楹?jiǎn)單出現(xiàn)了
POJO
對(duì)象,因?yàn)楹?jiǎn)單出現(xiàn)了
Hibernater
,因?yàn)楹?jiǎn)單出現(xiàn)了
Annotation
,因?yàn)楹?jiǎn)單出現(xiàn)了
EJB3.0
。因?yàn)楹?jiǎn)單才是
java
的開(kāi)源社區(qū)如火如荼,人聲鼎沸。
?
2???????
高產(chǎn)
有時(shí)候,設(shè)計(jì)者注重的是設(shè)計(jì),這也是我們?cè)O(shè)計(jì)中常常存在的一種習(xí)慣,程序員總是追求完美,追求
perfect
,而一個(gè)企業(yè)在完成項(xiàng)目中要的是生成率,要的是質(zhì)量,一個(gè)功能用那種完美的框架需要
2
周的時(shí)間才能開(kāi)發(fā)完,而使用簡(jiǎn)單的框架只需要
3
天的時(shí)間就可以完成了,你說(shuō)我們應(yīng)該使用那種框架。
去年在開(kāi)發(fā)一個(gè)項(xiàng)目的時(shí)候,因?yàn)槲覀兪呛推渌块T一起合作開(kāi)發(fā),在項(xiàng)目開(kāi)始的調(diào)研當(dāng)中,我們極力推薦使用我們的
JBrain
元數(shù)據(jù)框架,而另為一個(gè)部門卻強(qiáng)調(diào)使用
JSF
所建立的框架(
JSF
剛出來(lái),而且那個(gè)部門的人員還沒(méi)有太多的理解
JSF
的深刻含義,他們覺(jué)得
JSF
非常好,非常的完美),最后因?yàn)槲覀兊目蚣苁呛诤械模蛻舨幌氚阉麄兊捻?xiàng)目綁死在我們的框架上,所以最后決定使用
JSF
來(lái)設(shè)計(jì)框架(不說(shuō)開(kāi)發(fā)一個(gè)企業(yè)級(jí)框架所需要的時(shí)間),這里我不是說(shuō)
JSF
不好,我研究過(guò)
JSF
,覺(jué)得他的設(shè)計(jì)哲學(xué)真的很好,尤其他的組件樹(shù)和生命周期設(shè)計(jì)的非常完美,尤其他的
Render
機(jī)制,真的就是我們以前在使用
jsp Tag
的時(shí)候一直想要又沒(méi)有的功能(我們框架中的顯示模型有很多思想是從他的組件數(shù)概念而來(lái)的),但是如果用
jsf
開(kāi)發(fā)企業(yè)級(jí)程序,而且是在國(guó)內(nèi)這種客戶要求非常苛刻的情況下是非常不足的。因?yàn)槲覀兊?/span>
JSF
框架是在
Apache
的
MyFace
基礎(chǔ)上開(kāi)發(fā)的,實(shí)際上后來(lái)他的標(biāo)簽我們沒(méi)有用多少,大部分都是我們自己在他的基礎(chǔ)上重新開(kāi)發(fā)的。后來(lái)框架設(shè)計(jì)出來(lái)了,生產(chǎn)率太低,完成一個(gè)工作需要做很多很多的事,我實(shí)在看不下去了,看著我周邊的同事一邊又一邊的嘆氣(而且項(xiàng)目結(jié)束前幾乎是天天加班到
9
點(diǎn)),根據(jù)我們?cè)锌蚣艿脑獢?shù)據(jù)原理,寫了一個(gè)
JSF
框架的代碼生成機(jī),這才把生產(chǎn)率稍微提上了一點(diǎn)。
實(shí)際有時(shí)候我們?cè)O(shè)計(jì)框架的時(shí)候不必要考慮過(guò)多,一定要從開(kāi)發(fā)和實(shí)用的角度去考慮,多考慮一下程序員的工作方式。
?
??????
今天就寫到這里,可能是和
Rod
的
Without EJB
中的想法產(chǎn)生了共鳴才有了這么多費(fèi)話,其他的感觸將在后續(xù)的隨筆中寫到。寫這篇文章也是為了提醒自己開(kāi)發(fā)的時(shí)候一定要從實(shí)際出發(fā),一切的靈感都是來(lái)源于實(shí)踐的。
posted @
2006-05-31 23:18 我愛(ài)夏花,更愛(ài)秋葉 閱讀(1261) |
評(píng)論 (0) |
編輯 收藏

2006年5月10日
?
在現(xiàn)在的應(yīng)用系統(tǒng)中幾乎都能看到xml和database的身影,與這兩個(gè)東西正交的是OO.
?
(這里不說(shuō)用于xml解析的dom和sax模型,只是說(shuō)xml與pojo的影射關(guān)系:)其實(shí)再怎么影射也是通過(guò)dom或者sax接口的實(shí)現(xiàn)進(jìn)行解析的,還是通過(guò)新的javaSE規(guī)范Streaming API for XML (StAX), xml和OO的影射只不過(guò)進(jìn)行了抽象封裝,把xml到pojo之間的解析部分透明化了,我們這里實(shí)際說(shuō)的其實(shí)是JavaEE5.0中一個(gè)新的規(guī)范Java Architecture for XML Binding (JAXB))
比較有名的框架有:
+ castor 比較有名的一個(gè)O/X影射框架,可以根據(jù)xsd生成解析框架.(個(gè)人比較喜歡使用她)
+ apache 的xmlbean和Commons-Digester(不知道為什么會(huì)存在兩個(gè)同樣領(lǐng)域的東西,可能是digester相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,因而它被許多的apache的開(kāi)源項(xiàng)目使用);
+ JAXB 是JAVAEE中的對(duì)于xml和OO對(duì)象Binding定制的新的規(guī)范(標(biāo)準(zhǔn)阿!);
實(shí)際要研究xml和OO的影射框架,大家不妨看看現(xiàn)有的web service框架就會(huì)了解很多了,建議看Codehaus的 XFire 他是一個(gè)比較輕量級(jí)的WS框架,AXIS2也不錯(cuò).
我了解的XML Binding框架就這么多,如果誰(shuí)知道更好用的可以告訴我,相您請(qǐng)教.
+ hibernate ,ibatis ,jdo ,castor jdo(期待EJB3.0種的Persistence規(guī)范JPA)對(duì)于這幾種框架的介紹就不說(shuō)明了,google一下會(huì)出來(lái)無(wú)數(shù).
?
?這里不是想討論兩種技術(shù),而是想聽(tīng)大家對(duì)XML到database的影射有什么更好的辦法,因?yàn)镺/X,O/R都有很好的框架了,是否有X/R的好的框架.
這里我只知道castor 中對(duì)從xml到database有一定的支持,但支持的還是不夠,hibernate3.0種好象對(duì)xml到database進(jìn)行了支持,但是也是一些簡(jiǎn)單的支持.
不斷整理中。。。
posted @
2006-05-10 17:37 我愛(ài)夏花,更愛(ài)秋葉 閱讀(1209) |
評(píng)論 (3) |
編輯 收藏

2005年6月25日
這幾天在研究框架架高層次的抽象問(wèn)題,還有框架的一些集成問(wèn)題,可能要沒(méi)時(shí)間維護(hù)Blog;框架的初期版本已經(jīng)開(kāi)發(fā)完畢了,在幾次初期的使用中,反映還是不錯(cuò)的,真是高興。但是還有很多不足的地方,下一階段對(duì)框架的開(kāi)發(fā),主要就是在調(diào)試和測(cè)試方面。
JBrain框架的設(shè)計(jì)的初期目的就是要提供一個(gè)基本的企業(yè)級(jí)運(yùn)行環(huán)境,就好比JVM一樣。而下一期開(kāi)發(fā)的目標(biāo)就是在JBrain框架的這一個(gè)運(yùn)行環(huán)境的基礎(chǔ)上,開(kāi)發(fā)一套建模語(yǔ)言,而JBrain框架就是這種模型語(yǔ)言的運(yùn)行環(huán)境。
我們?yōu)榱诉@個(gè)目標(biāo)都在研究MDA,個(gè)人覺(jué)得MDA的思想是 “ Perfection”,但是實(shí)現(xiàn)他談何容易,我們研究它只是研究它的思想,通過(guò)這種思想,能夠給我們以啟發(fā)。
posted @
2005-06-25 12:31 我愛(ài)夏花,更愛(ài)秋葉 閱讀(413) |
評(píng)論 (0) |
編輯 收藏

2005年6月16日
再一次的看設(shè)計(jì)模式的時(shí)候,感覺(jué)自己對(duì)設(shè)計(jì)模式,有了一個(gè)進(jìn)一步的理解(自我感覺(jué)的J).
在數(shù)學(xué)計(jì)算中我們要求AàB點(diǎn)的最短路徑,可能從A點(diǎn)到B點(diǎn)有很多種走法,但是追求完美的我們(尤其是程序員),總是希望找到一條最短的路徑。設(shè)計(jì)模式也是相同,在設(shè)計(jì)中我們想要找到設(shè)計(jì)中的最短路徑,也就是設(shè)計(jì)的永恒之道(就是設(shè)計(jì)模式中常說(shuō)的無(wú)名的質(zhì)),說(shuō)白了,就是如何設(shè)計(jì)才能使系統(tǒng)更容易擴(kuò)張,更靈活,更穩(wěn)定。模式追求的是一種最佳的解決方案,在這個(gè)方案的指導(dǎo)下,我們能夠跟好的去實(shí)現(xiàn)我們所想要實(shí)現(xiàn)的東西。
數(shù)學(xué)計(jì)算的時(shí)候有一定的法則,軟件設(shè)計(jì)的時(shí)候也是有一定的法則的,而這些法則,都是在追求軟件設(shè)計(jì)的守恒定律時(shí)形成的——什么開(kāi)/閉原則,面向接口原則,依賴倒置原則等等,但是軟件設(shè)計(jì)中的原則也是可變的,而且是時(shí)刻發(fā)展的,要不然就不會(huì)出現(xiàn),今天的spring非常火的場(chǎng)面,Ioc原則。
數(shù)學(xué)計(jì)算是通過(guò)許多的公式推倒出結(jié)果的,但是我們求解的時(shí)候,會(huì)出現(xiàn)這種情況,C結(jié)果,是通過(guò)A和B兩個(gè)公式推導(dǎo)出來(lái)的,模式也是一樣,有一些較小的模式,而這些較小的模式是一些較大的模式的基礎(chǔ)。
在理解模式的時(shí)候我們可以從對(duì)象的生命周期來(lái)理解。
對(duì)象產(chǎn)生的時(shí)候需要描述對(duì)象的屬性,它的存在形式,創(chuàng)建模式就是用來(lái)描述這個(gè)的;而這個(gè)對(duì)象存在就會(huì)和其他對(duì)象發(fā)生聯(lián)系,就會(huì)和其他對(duì)象發(fā)生作用,如何描述他們之間的聯(lián)系和作用就是結(jié)構(gòu)模式要做的事了;前面這些都是靜態(tài)的,對(duì)象的存在,不可能永遠(yuǎn)靜止不動(dòng)的,它會(huì)根據(jù)自己的需要,完成一些動(dòng)作,語(yǔ)言中還有動(dòng)詞,名詞,形容詞之分呢!模式就跟語(yǔ)言一樣需要有動(dòng)詞來(lái)描述對(duì)象,行為模式就是用來(lái)描述對(duì)象的行動(dòng)的;
設(shè)計(jì)模式,實(shí)際就是一種設(shè)計(jì)中的語(yǔ)言,很多的最基本的模式,就是組成這種語(yǔ)言的基礎(chǔ),我們?cè)诶斫饽J降臅r(shí)候不能只是背模式,而應(yīng)該靈活的運(yùn)用他們,讓他們有機(jī)的結(jié)合在一起,形成一個(gè)生動(dòng)的句子。這個(gè)就好比我們學(xué)英語(yǔ),不是光背一些單詞,就能寫出一篇好文章的,還需要我們有語(yǔ)感,理解了以后才能寫出來(lái)。
這個(gè)只是我對(duì)模式的一點(diǎn)點(diǎn)個(gè)人的理解,不代表所有人的觀點(diǎn)!:)
posted @
2005-06-16 22:07 我愛(ài)夏花,更愛(ài)秋葉 閱讀(800) |
評(píng)論 (3) |
編輯 收藏

2005年6月11日
對(duì)于中小型的應(yīng)用tomcat作為服務(wù)器就足夠了,但是,在我把框架往tomcat上轉(zhuǎn)移的時(shí)候有了一個(gè)問(wèn)題,工作流引擎的數(shù)據(jù)庫(kù)是獨(dú)立的,如何保證他和業(yè)務(wù)的數(shù)據(jù)庫(kù)事務(wù)上的統(tǒng)一性,這里就涉及到分布式事務(wù)的概念。
像weblogic,websphere,這種企業(yè)級(jí)服務(wù)器,他們有自己的事務(wù)管理器,你可以配置多個(gè)datasource,這些datasource可以指向不同的資源(數(shù)據(jù)庫(kù),消息服務(wù)),事務(wù)管理器就是這些資源的管理中心,當(dāng)一個(gè)事務(wù)開(kāi)始的時(shí)候(begin),事務(wù)管理器會(huì)記錄并監(jiān)視這個(gè)事務(wù)涉及的所有可管理資源,當(dāng)一個(gè)事務(wù)結(jié)束的時(shí)候(commit),他會(huì)把所有的資源提交,而當(dāng)程序出現(xiàn)異常的時(shí)候,他會(huì)把所有的資源回滾(rollback)。在事務(wù)邊界以內(nèi),所有的可管理資源實(shí)際都是沒(méi)有提交的,處于一種等待狀態(tài),只有當(dāng)事務(wù)提交的時(shí)候,事務(wù)管理器才負(fù)責(zé)把它所管理的所有資源提交。事務(wù)管理器就是一個(gè)全局事務(wù)管理中心,它負(fù)責(zé)把許多可管理(可以控制事務(wù))的資源的事務(wù)統(tǒng)一起來(lái)。
出于這種這種考慮,我在管理全局性事務(wù)的時(shí)候,選擇了jtom和xapool。
Jotm是一個(gè)開(kāi)源的JTA實(shí)現(xiàn),是由ObjectWeb組織開(kāi)發(fā)的,實(shí)際就是實(shí)現(xiàn)了事務(wù)管理器的功能,而且他還支持分布式事務(wù),如果把jotm結(jié)合JORAM (也是由ObjectWeb組織開(kāi)發(fā)的JMS實(shí)現(xiàn))使用,就可以實(shí)現(xiàn)JMS的事務(wù)管理。(這里我在想,JBossCache是支持事務(wù)的cache,如果把它們結(jié)合在一起,是不是就可以對(duì)緩存進(jìn)行事務(wù)控制了:))
對(duì)于jotm的使用,你只要記住這個(gè)應(yīng)用中只有一個(gè)Jotm對(duì)象就OK了,對(duì)于分布式事務(wù)也是一樣,如何保證一個(gè)應(yīng)用中只用一個(gè)Jotm實(shí)例呢?
jotmCurrent = Current.getCurrent();
使用上面的方法,如果jotmCurrent 等于null,說(shuō)明現(xiàn)在的jvm中沒(méi)有沒(méi)有jotm實(shí)例,當(dāng)需要分布式的時(shí)候就不能這么判斷了,你必須把jotm對(duì)象放到jndi上,以后使用的時(shí)候從jndi上取就可以了。
如果jotmCurrent不等于空,說(shuō)明jvm中已經(jīng)有jotm實(shí)例了,而如何得到這個(gè)實(shí)例了,如果從這個(gè)角度去考慮,是不行的,你可以看一下Jotm的API,看一下Current的類說(shuō)明:
http://jotm.objectweb.org/current/jotm/jdoc/
public class Current
extends Object
implements UserTransaction, TransactionManager, Referenceable, Serializable
Current 對(duì)象實(shí)際就是一個(gè)事務(wù)管理器,哈哈,我們使用jotm,不就是為了這個(gè)嗎,ok,you got it!
我對(duì)jotm和事務(wù)的研究還不夠深入,以上都是個(gè)人理解,有不對(duì)的地方還請(qǐng)大家指出!
下面的文章,我重點(diǎn)對(duì)xapool進(jìn)行說(shuō)明(使用他的時(shí)候問(wèn)題特別多:))
posted @
2005-06-11 18:13 我愛(ài)夏花,更愛(ài)秋葉 閱讀(2555) |
評(píng)論 (0) |
編輯 收藏