spring+tuscany集合

1、创建一个接口和该接口的实现类,并在接口下随便声明一个方法,而且要在实现类中实现方法
还有一个重要的:要在接口定义的上面加上@Remotable属性
<例子>:
@Remotable
public interface BusinessService

@Remotable
public interface ProductService

2、配置composite文件和application的xml文件:
在composite文件中配置一个<service>,
1)该元素有两个属性要配置,一个为name还有一个是promote
name:服务名,自己定义
promote:组件名,选取该文件下的一个组件,该组件的name属性要相同,
并且该组件下有一个元素<implementation.spring
location="spring配置文件名即:application-context.xml" />
2)该元素有两个子元素
<interface.java interface="所定义的接口名" />
<binding.ws uri="该名字可以乱取,这个只是一个服务访问的uri地址,一个定义为services/任取Service" />

<例子>:
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
targetNamespace="http://basecrm/business"
name="business">
<service name="businessService" promote="businessSpring">
<interface.java interface="com.huawei.basecrm.service.BusinessService" />
<binding.ws uri="services/businessService" />
</service>
<component name="businessSpring">
<implementation.spring location="application-context.xml" />
</component>
</composite>

3、在composite文件配置后,需在spring配置文件中配置一个元素<sca:service>
该元素是与composite文件的服务相对应,并将tuscany与spring完好的联系起来
有三个属性
1)name:对应与composite文件<service>元素中的属性,两个必须要相同
2)type:是接口名字,与composite文件中的<interface.java>元素的interface
属性相同,都是同一个接口
3)target:对应与该spring配置文件一个<bean>元素,与<bean>元素的id属性相同

<例子>:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sca="http://www.springframework.org/schema/sca"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/sca http://www.osoa.org/xmlns/sca/1.0/spring-sca.xsd">
<sca:service name="businessService"
type="com.huawei.basecrm.service.BusinessService"
target="businessImpl"/>
<bean id="businessImpl" class="com.huawei.basecrm.service.BusinessServiceImpl">
</bean>
</beans>


4)上面就完成了spring和tuscany的结合,并可以发布服务成功

5)再重新建一个项目,将上面发布的服务打开,将开始在上面那个项目中的接口重新导入到
该项目中,不过最好还是将该接口打包。
打包步骤:1)cmd
2)找到该接口的.class文件所在的目录,最好是定在classes目录下
3)jar cvf *.jar 包名.接口名.class
将该包放在WEB-INF/lib中,并添加到项目中去

6)在新项目中创建一个新的接口和新接口的实现类,并要求该接口和实现类要包含jar包中的接口下的所有方法,
在实现类中定义一个原有接口的一个属性
并在该属性上加上@Reference属性,表示从外面引用的服务将会注入到该属性上,并可以通过
该属性调用原有项目中的方法和方法的一些实现
<例子>:
@Reference
private ProductService productService = null;

@Reference
private BusinessService businessService = null;

7)为新项目配置composite文件,该文件要配置一个组件<component>
属性:name可以随便取
子元素:<implementation.java class="实现类名" />配置一个实现类,该实现类是和(6)中的接口必须是要
同一个
<reference name="(6)中的接口对象" > 该元素还有两个子元素
<interface.java interface="" /> 导入的接口名
<binding.ws uri="" /> 发布服务的uri地址
<例子>:
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
targetNamespace="http://basecrm/customer"
name="customer">
<component name="productServiceComponent" >
<implementation.java class="com.huawei.basecrm.service.ProductManageImpl" />
<reference name="productService" >
<interface.java interface="com.huawei.basecrm.service.ProductService" />
<binding.ws uri="http://localhost:8080/product/services/productService" />
</reference>
<reference name="businessService" >
<interface.java interface="com.huawei.basecrm.service.BusinessService" />
<binding.ws uri="http://localhost:8080/business/services/businessService" />
</reference>
</component>
</composite>

8)再再新项目中配置spring文件,即在application-context.xml文件中配置相关内容
由于在项目中引用了两个服务,需要在spring中配置两个引用
<sca:refence name="" type="" />
name:随便取
type:导入的包名

再定义一个bean元素,将两个引用注入到该项目中的实现类的两个属性中
<bean id="" class="" >
<property name="" ref="" />
</bean>
id:随便取
class:为新项目中的实现类名
name:跟实现类中的两个接口的对象名要一致
ref:即要跟上面<sca:refence>元素中的name属性值相同
<例子>:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sca="http://www.springframework.org/schema/sca"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/sca http://www.osoa.org/xmlns/sca/1.0/spring-sca.xsd">
<sca:refence name="businessServiceComponent"
type="com.huawei.basecrm.service.BusinessService">
</sca:refence>
<sca:refence name="productServiceComponent"
type="com.huawei.basecrm.service.ProductService">
</sca:refence>
<bean id="productManage" class="com.huawei.basecrm.service.ProductManageImpl">
<property name="productService" ref="productServiceComponent"></property>
<property name="businessService" ref="businessServiceComponent" ></property>
</bean>
</beans>

9)创建一个测试实现类
在该类定义一个SCADomain对象 该对象是用来读取composite文件
再用该对象调用getService方法
<例子>:
SCADomain domain = SCADomain.newInstance("META-INF/composite/customer.composite");
ProductManageImpl manage = domain.getService(ProductManageImpl.class, "productServiceComponent");
getService方法里的两个参数分别为一个为class对象,该对象是定义的实现类的class对象,另一个是composite文件
中的组件的name属性值,再可以通过manage调用实现类中的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值