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