Tuscany简单应用

简单的例子:

配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"

xmlns:t
="http://tuscany.apache.org/xmlns/sca/1.0"

xmlns:c
="http://sample"

targetNamespace
="http://sample"

name
="sample">

<!-- 对外接口 访问地址:http://localhost:8080/echoComponent?wsdl-->

<service name="echo" promote="echoComponent" >

<interface.java interface="com.simple.echo.Echo"></interface.java>

<binding.ws uri="http://localhost:8080/echoComponent"></binding.ws>

</service>

<!--组件声明 -->

<component name="echoComponent">

<implementation.java class="com.simple.echo.EchoImp"></implementation.java>

</component>

</composite>

代码:

@Test

public void 测试组件调用() {

// TODO 获取组件,并设用

SCADomain domain
= SCADomain.newInstance("com/config/simple/echo.composite");

Echo echo
= domain.getService(Echo.class, "echoComponent");

echo.print(
"我是神人");

}



public class EchoImp implements Echo {

public void print(String str) {

System.out.println(
"str等于 "+str)

服务:

简单例子后,我们知道了,我们可以直接调用使用component的实现,而服务是启动域时或启动节点发布的;

此时我们进行服务的编写:

服务 - 屏蔽一些不常用的功能;

<service></service>

主要: interface ,binding,callback

1.interface :

<interface.java interface="com.simple.echo.Echo"></interface.java>

对应的接口:

@Remotable

public interface Echo {

public void print(String str);

}

注意:服务中引用interface,必须要声明远程调用(@Remotable)

2.binging 绑定:

一.正常使用:

<component name="echoComponent">

<implementation.java

class="com.simple.echo.EchoImp" />

<service name="Echo"> // 此处是接口名,当使用组件内部时,一定要这样做

<binding.ws uri="http://localhost:8080/echoComponent"></binding.ws>

</service>

</component>

代码方面:

1.接口要使用 : @Remotable

 

 

2.实现要使用 : @Service(Echo.class)

 

实现提供的多个服务:

@Service(interfaces={HelloService.class, AnotherInterface.class})

public class HelloServiceImpl implements HelloService, AnotherInterface{..}

3. reference 引用

适用于一个组件引用其他组件处理;

XML : reference标签:

属性: 1.name (必须) – 变量名,必须与类的变量名相同

说明: <reference name="reture" target="EchoReture">

private EchoReture reture = null; // 两处名称必须相同;

  2.promote (compusite层时必须) –指定相关的组件实现;

 3.target(可选) – 被引用的组件名字 - 组件名/服务名,声明此属性,则是在同compusite调用;

 

         子标签: 1.binding(选定) -  绑定调用的接口或服务,用于调用不再一个域内的服务;

   2.interface(选定) - 引用接口,暂时只在回调时用到,其他用处不详

@Reference : 属性: name(可选的) — 注入变量名,默认为Java类的数据成员名;

    required(可选的) — 是否必须注入服务。默认为true;

 

 

个人理解:相较与spring的IOC很相似;

如:<bean><属性 名字="" ref=""/></bean>

原理:本component内部声明一个引用,必然是引用另一个组件;


相关代码:

<component name="echoComponent">

<implementation.java

class="com.simple.echo.EchoImp" />

<service name="Echo">

<binding.ws uri="http://localhost:8080/echoComponent"></binding.ws>

</service>

<reference name="reture" target="EchoReture">

</reference>

</component>



<component name="EchoReture">

<implementation.java class="com.simple.Client.EchoRetureImp"/>

</component>

 

 

java代码:

 

@Service(Echo.class)

public class EchoImp implements Echo {

private EchoReture reture = null;

@Reference(name
="reture") // 重点:设置注入方法;

public void setReture(EchoReture reture) {

this.reture = reture;

}

public void print(String str) {

System.out.println(
"str等于 "+str);

}

public void printString() {

reture.getEcho();

}

}

 

其他无用类省略…;



4.property 属性

一个属性可以是简单数据类型或XML可以通过代码实现或者注解;

name(必须)– 定义名字;

many (可选) 是否多个值, 默认false;

mustSupply (可选) –是否必填,默认false;

source(可选) –引用其他属性 - 使用$XXX

简单例子: 注入字符串:

XML:

<component name="loginCompunent_string">

<implementation.java class="com.simple.property.LogionAction_String" />

<property name="username" >wang</property>

<property name="password">123456</property>

</component>

 

代码:

public class LogionAction_String {



private String username = null;

private String password = null;



@Property(name
="username") // 注入XML配置的值

public void setUsername(String username) {

this.username = username;

}

@Property(name
="password") // 注入XML配置的值

public void setPassword(String password) {

this.password = password;

}



public User login() throws Exception {

// TODO 判断输入是否正确,并返回用户对象

// 1.验证传递用户是否符合输入规范;

// 2.记录登录人信息;

// 3.创建用户对象,并赋值;

// 4.返回对象;



/* 1.0 判断用户是否为null */

if(username!=null&&password!=null) {

/* 2.0 登录信息记录 */

System.out.println(
"用户 : "+username+" 密码 : "+password+" 成功登录");

/* 3.0 创建用户,赋值 */

User user
= new User();

user.setUsername(username);

user.setPassword(password);

return user;/* 4.0 返回对象 */

}
else

throw new NullPointerException("username或password - 不存在");

}

}

posted on 2011-06-11 03:00  刄月  阅读(1306)  评论(1编辑  收藏  举报

导航