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,