一、服务的定义
Tiny中的服务与Spring中的Service的概念是不一样的,这里的服务是有确定的输入和输出,有唯一标识,并且在处理上具有原子性的一种处理逻辑。它与Java中的一个方法是有对应关系的,与类或接口无关。另外,这里的服务是无状态的,也就是说它是没有会话保持等相关性的,你不能期望第一次调用的时候传入一个用户ID,以后的访问就是针对这个用户的处理了,而是应该每次都传入要处理用户的ID及其它数据。
Tiny中的服务具有跨域特性,也就是说一旦你把一个方法发布成一个服务,当用服务的方式调用的时候,你就无法确定这个服务的的真实执行逻辑是在本机或是远程计算机,所以不能假定其所在的位置而获取机器相关的一些内容。当然,如果你只安装一台服务器来提供服务,这个时候是可以确定调用者和真正执行逻辑是在一台计算机的,但是这样你将失去水平扩展能力。
不要期望在服务的处理逻辑中可以访问Http相关的对象,比如:request, response,cookie等Web应用相关的内容,因为在Tiny的服务体系中,服务是环境无关的,它是不知道调用的服务是来自哪个渠道(网站,手机APP,WAP,其它服务调用方式),所以,所有的入参就是提供给服务的输入,输出就是它的响应,如此而已。
Tiny的服务具有外部多样性,且开发了一个Tiny服务,你就可以通过各种渠道来访问它,而不用做额外的开发和处理。比如:通过Java调用,通过WebService调用,通过Json调用,通过Xml调用等等,你也可以扩展自己期望的其它访问方式(Fix,Fast,8583等等),但是不论如何,一次开发,到处可以使用。
Tiny的服务与Java的方法的区别在于:使用方法你得保证部署在一个虚拟机,而用Tiny服务就是我只要知道你存在就行了,才不管你是在哪里;Java方法的调用者必须是Java类,而Tiny服务的调用者就可以跨平台,跨语言;Java方法当然是用Java开发的,Tiny服务的开法是无所谓了,可以是Java,也可以是流程,还可以是通过通道对接的其它语言实现的。
到目前为止,您对Tiny的服务可以已经有了一点模糊的印象,Let's go!
二、利用Tiny开发服务
用Tiny开发服务是非常简单的事情,Tiny内嵌提供了多种服务开发方式,有Xml配置方式,注解方式,流程编排方式,三种各有优缺点:
下面一个一个介绍。
1、Xml配置方式开发服务
1
2
3
4
5
6
7
8
|
public
class
HelloWorldXmlService{
public
String sayHello(String name) {
if
(name ==
null
) {
name =
"world"
;
}
return
"hello,"
+ name;
}
}
|
如果是采用其它IDE,就需要手工配XML了,不过采用Eclipse的童鞋们有福气了,安装了Tiny插件之后,可以看到在代码编辑窗口下面会多出一个服务管理的Tab页。
点击一下切换过去,就可以看到下面的页面了:
只要把要发布发服务的方法前面的检查框选中,一个服务就发布成功了。
当然,这个类里面也可能有许多要发布成服务的方法,那也简单,方法名前 面的检查框,点击一次会全部选中,再点一次会全部取消选中。
总结一下,如果用Eclipse开发,有了Tiny服务开发插件,要发布成服务,就是增加“一点”的工作量。
2.注解方式开发服务
注解开发Tiny服务方式如下 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import
org.tinygroup.service.annotation.ServiceComponent;
import
org.tinygroup.service.annotation.ServiceMethod;
import
org.tinygroup.service.annotation.ServiceResult;
import
org.tinygroup.service.annotation.ServiceViewMapping;
@ServiceComponent
()
public
class
HelloWorldAnnotationService{
@ServiceMethod
(serviceId =
"sayHelloA"
)
@ServiceResult
(name =
"result"
)
public
String sayHello(String name) {
if
(name ==
null
) {
name =
"world."
;
}
return
"hello,"
+ name;
}
}
|
@ServiceComponent 标识这个类里面有些方法会被发布成服务
@ServiceMethod(serviceId = "sayHelloA")标识这个方法要被发布成服务
@ServiceResult(name = "result")标识这个服务返回值的用标识result表示。
清楚还是清楚的,就是有侵入性。(本人有点代码洁癖,说实际的不太喜欢代码当中夹着这一堆的注解,但是不排除有人喜欢,因此还是提供了这种方式)
3.流程编排方式开发Tiny服务
创建一个流程,然后拖入一个HelloWorld组件,然后在扩展属性的名字里输入“ ${name}” 表达式,在结果键值中输入“ result” 。然后,就没有然后了,OK了。
有同学问,你这个HelloWorld组件哪里来的??这个是另外一个话题,就是如何创建流程组件了。
在Tiny开发框架中,流程组件和使用流程组件开发是两种类型的角色。
三、Tiny服务开发进阶
有人说了,你这个就是个HelloWorld有毛用,我真正的业务逻辑是非常复杂的呢。
问题问得非常好,实际上能把HelloWorld做出来,还有什么复杂的做不出来呢?
你里面要用Spring+Hibernate/ibatis来开发服务的业务逻辑,当然没有问题;你想用其它的方式来开发,也没有问题;这也是Tiny框架在设计时的一个设计目标,就是要与现有各种开源框架有良好的集成能力。
如果你想复用原来开发的代码,完全可以不改一行代码,通过Xml配置方式,发布成Tiny服务,而享受Tiny框架带来的水平扩展能力、分层部署能力、各种通道访问能力、模块化管理。
当然,你也可以使用Tiny框架来开发服务,享受飞一般的体验。
如果有什么问题,请回复提问,有问必答。