托斯卡尼 tuscany2

1、本地和遠程接口

  sca支持本地和遠程的接口,使用本地接口,那麼只能在同一個進程中調用,遠程接口可以跨越進程或者計算機進行調用。

遠程接口可以當做本地接口使用。使用interface.wsdl定義的接口總是遠程接口,使用interface.java定義的接口可以是本地的或者遠程的。默認使用本地接口。

使用本地接口,參數和結果是按引用傳遞的,使用遠程接口,參數和結果是傳值傳遞的(拷貝),服務端發生的變化在調用端是不可見的。

本地接口是高效的,但是增加了調用端和服務端的依賴關係。

2、雙向接口

   一個雙向接口是兩個接口的組合,一個用來服務調用者向服務提供者發起調用,另一個是服務提供者想服務調用者發起調用(被引用爲callback).

<interface.java
interface="com.tuscanyscatours.common.Search"
callbackInterface="com.tuscanyscatours.common.SearchCallback" />

服務調用者使用interface接口,而服務提供者使用callbackinterface接口。

一個雙向接口必須都是local或者都是remote

服務發起者必須提供callbackinterface接口的實現。

3、會話接口

對於使用java技術的接口,可以使用Conversational註解這個接口,

對於使用wsdl技術的接口,sca定義了一個全局的requires屬性,用來標示一個wsdl1.1的portType或者wsdl2.0的interface元素。

對一個雙向接口使用會話功能是可以的。

4、使用引用和連線來連結組件

4.1定義一個引用

   使用Refrence註解來定義一個引用,可以對類屬性、set方法、構造方法使用這個註解,對於set方法和構造方法,可以添加自己的業務邏輯。

4.2將引用植入服務

<component name="TripBooking">
<implementation.java
class="com.tuscanyscatours.usingsca.impl.TripBookingImpl" />
<reference name="cars" target="CarPartner/Cars" />
<reference name="flights" target="FlightPartner/Flights" />
<reference name="hotels" target="HotelPartner" />
</component>
<component name="CarPartner">
<implementation.java
class="com.tuscanyscatours.usingsca.impl.CarVendorImpl" />
</component>
<component name="FlightPartner">
<implementation.java
class="com.tuscanyscatours.usingsca.impl.FlightPartnerImpl" />
</component>
<component name="HotelPartner">
<implementation.java
class="com.tuscanyscatours.usingsca.impl.HotelPartnerImpl" />
</component>

   引用和服務的連結稱爲植入(wires),tucany在組件部署過程中植入引用,在組件的實現執行之前。

引用被植入到服務,使用reference的target屬性,確定相對於service的uri。如果目標組件只有一個服務,那麼可以只使用目標組件的名稱

上面的hoterpartner就是這個樣子的。

當一個引用被植入到服務裏,那麼這個引用的接口必須和服務兼容。

另一種植入方式;

<component name="TripBooking">
<implementation.java
class="com.tuscanyscatours.usingsca.impl.TripBookingImpl" />
<reference name="cars" target="CarPartner/Cars" />
<reference name="flights" target="FlightPartner/Flights" />
</component>
<wire source="TripBooking/hotels" target="HotelPartner" />

自動植入:

<component name="TripBooking" autowire="true">
<implementation.java
class="com.tuscanyscatours.usingsca.impl.TripBookingImpl" />
</component>
<component name="CarPartner">
<implementation.java
class="com.tuscanyscatours.usingsca.impl.CarVendorImpl" />
</component>
<component name="FlightPartner">
<implementation.java
class="com.tuscanyscatours.usingsca.impl.FlightPartnerImpl" />
</component>
<component name="HotelPartner">
<implementation.java
class="com.tuscanyscatours.usingsca.impl.HotelPartnerImpl" />
</component>

通過在組件(component)上使用autowire=true,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章