托斯卡尼 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,

你可能感兴趣的:(java,service,callback,interface,reference)