Java Reference
In-Depth Information
may be required than you're used to. Remember that local proxies of remote services
will have the service.imported property set.
10.6.3
Exporting remote services
We're sure you know how to write code for handling errors, so rather than demon-
strating that, we'll skip straight on to ensuring the remote service is available, which is
much more fun.
You'll use a bundle similar to the foreign food department bundle from section 10.3.
The Blueprint for the foreign food service is nearly identical to listing 10.3, but you'll
need to add some extra service properties to tie together the exported service and some
extra SCA configuration:
<service interface="fancyfoods.offers.SpecialOffer">
<service-properties>
<entry key="service.exported.interfaces" value="*"/>
<entry key="service.exported.configs" value="org.osgi.sca"/>
<entry key="org.osgi.sca.bindings" value="ForeignFood"/>
</service-properties>
<bean class="fancyfoods.department.foreign.ForeignFoodOffer">
<property name="inventory" ref="inventory"/>
</bean>
</service>
The extra SCA configuration file is exactly the same as that of the client-side bundle
(listing 10.8), and is configured with a similar SCA-Configuration: reference in the
bundle's manifest.
With the new fancyfoods.department.foreign.sca installed in the server-side
framework, if you access http://localhost:8081/foreignfood?wsdl, you'll be able to see
the generated WSDL description for the foreign food service.
10.6.4
Interfaces and services
The process of remoting services using SCA is similar to that of remoting them using
CXF , although SCA does need some extra configuration files. But when you link up the
remote service client to the remote services provider, an important difference
between SCA and CXF becomes clear (see figure 10.24).
Remember that in section 10.2, we mentioned that distribution providers are only
required to support distributed invocations with simple parameter types. Although
CXF allowed you to use interfaces with much more complex parameters, such as Food ,
Tuscany's WSDL binding doesn't. This means the SpecialOffer interface can't easily
be used for Tuscany remote services.
Remoting complex types is often handled by writing an XMLAdapter class to con-
vert between complex and simpler types, and annotating method declarations or
classes with the @XmlJavaTypeAdapter annotation. In the case of Fancy Foods, you'd
add an annotation to the SpecialOffer class, as follows:
@XmlJavaTypeAdapter(value=fancyfoods.FoodAdapter.class,
type=fancyfoods.foods.Food.class)
Search WWH ::




Custom Search