1.SOA存在的目的?
傳統(tǒng)的java類庫要解決是的代碼的復(fù)用
而SOA架構(gòu)的目的是服務(wù)復(fù)用,因?yàn)閖ava代碼的復(fù)用是無狀態(tài),而服務(wù)的重用則是有狀態(tài)的(此處的無狀態(tài)或是說跟環(huán)境相關(guān)的,如中國移動(dòng)提供一個(gè)短信發(fā)送網(wǎng)關(guān),那么我們通過這個(gè)網(wǎng)關(guān)即可以發(fā)送短信,這就是服務(wù)),并且一般還有跨語言的重用要求(這樣可以更加的保障投資價(jià)值,所以經(jīng)常選擇webserice soap作為傳輸協(xié)議).
2.為什么說SOA是一種風(fēng)格?
為何說是一種風(fēng)格呢?因?yàn)橛泻芏嗳艘詾閣ebservice就是SOA,如前所述,SOA需要解決是的服務(wù)的重用問題,所以為達(dá)這個(gè)目的,不管你使用何種傳輸協(xié)議.只要能夠解決服務(wù)復(fù)用問題即可. 在這里要給EJB平反一下,EJB的無狀態(tài)Session Bean應(yīng)該是專屬于JAVA的SOA服務(wù)架構(gòu)(它解決了服務(wù)復(fù)用問題及服務(wù)集成問題,但沒有解決跨語言復(fù)用,但如果是企業(yè)內(nèi)部系統(tǒng),跨語言也并不是EJB的致命缺點(diǎn))
3.SOA解決了服務(wù)集成(依賴)問題
服務(wù)與服務(wù)之間可能存在依賴問題, EJB中使用jndi用于查找ejb對(duì)象,而SOA架構(gòu)中也需要該項(xiàng)措施,采用集中式的服務(wù)查找服務(wù).將交叉且復(fù)雜的依賴關(guān)系轉(zhuǎn)變?yōu)橐子诶斫獾男切完P(guān)系.
service使用者 ==========> service服務(wù)注冊中心 <========= service提供方
查找服務(wù) 注冊服務(wù)
而在webservice協(xié)議中辦演該角色是的UDDI, 并且通過service服務(wù)注冊中心,我們可能還提供可以做到如服務(wù)的負(fù)載均衡,服務(wù)的故障自動(dòng)檢測等集中式管理功能.(自己擴(kuò)展實(shí)現(xiàn)一個(gè)類似UDDI的功能也可)
現(xiàn)實(shí)存在的情況是很多程序員以為簡單的webservice調(diào)用即是SOA,如果在服務(wù)過多的情況下,會(huì)導(dǎo)致服務(wù)依賴關(guān)系復(fù)雜