文档章节

Tiny快速入门之服务开发

悠悠然然
 悠悠然然
发布于 2014/11/23 10:38
字数 1783
阅读 6275
收藏 89

周五发了Tiny框架即将全面开源一文,有不少同学给了不少有意义的意见和建议,其中一条就是感觉太虚了,期望来点实的,因此本文将从实打实的快速开发方面讲起,来说明一下用Tiny框架开发一些业务是如何操作的,本文中的内容全部来源于Tiny快速入门手册,希望亲自动手实践的同学们,可以直接去下载并按照手册进行即可进行验证。

下面是一些常网的链接,供大家使用:

GIT地址(必须是OSC家的):https://git.oschina.net/tinyframework/tiny
问题报告:https://git.oschina.net/tinyframework/tiny/issues
官方网站:http://www.tinygroup.org

一、服务的定义

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配置方式开发服务

public class HelloWorldXmlService{
	public String sayHello(String name) {
		if (name == null) {
			name = "world";
		}
		return "hello," + name;
	}
}
不需要引入任何Tiny框架的类和接口,因此是0侵入性。

如果是采用其它IDE,就需要手工配XML了,不过采用Eclipse的童鞋们有福气了,安装了Tiny插件之后,可以看到在代码编辑窗口下面会多出一个服务管理的Tab页。

点击一下切换过去,就可以看到下面的页面了:

只要把要发布发服务的方法前面的检查框选中,一个服务就发布成功了。 

当然,这个类里面也可能有许多要发布成服务的方法,那也简单,方法名前 面的检查框,点击一次会全部选中,再点一次会全部取消选中。

总结一下,如果用Eclipse开发,有了Tiny服务开发插件,要发布成服务,就是增加“一点”的工作量。

2.注解方式开发服务

注解开发Tiny服务方式如下 :


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框架来开发服务,享受飞一般的体验。

如果有什么问题,请回复提问,有问必答。


© 著作权归作者所有

共有 人打赏支持
悠悠然然

悠悠然然

粉丝 2373
博文 184
码字总数 360373
作品 14
杭州
架构师
加载中

评论(12)

悠悠然然
悠悠然然

引用来自“Gherkin”的评论

非常好,就是快速入门手册的链接不能用了哦!

到主站看在线文档,900页规模,足够看一阵子了
悠悠然然
悠悠然然

引用来自“anduo”的评论

非常好的入门,开发服务非常快速,另外不知道在服务异常处理方面的支持如何?

支持aop异常拦截
G
Gherkin
非常好,就是快速入门手册的链接不能用了哦!
restmad
restmad

引用来自“restmad”的评论

这个服务发布思路非常好。就是不知道是不是标准webservice的实现。

引用来自“悠悠然然”的评论

文章里有说,可以按照标准WebService,Json,Xml等各种方式访问
牛叉。
悠悠然然
悠悠然然

引用来自“lenyuan”的评论

有问题问题请教,如果需要将多个原子服务封装成一个服务接口对外提供服务,怎么保证事务一致性呢?谢谢
你就一个一个写方法,然后Spring会搞定这一切。
yuanly
yuanly
有问题问题请教,如果需要将多个原子服务封装成一个服务接口对外提供服务,怎么保证事务一致性呢?谢谢
悠悠然然
悠悠然然

引用来自“简单代码”的评论

和Web Service一回事吧?
如果是按WS方式访问,是一回事,但是实际上可以支持N种访问方式。
简单代码
简单代码
和Web Service一回事吧?
悠悠然然
悠悠然然

引用来自“restmad”的评论

这个服务发布思路非常好。就是不知道是不是标准webservice的实现。
文章里有说,可以按照标准WebService,Json,Xml等各种方式访问
restmad
restmad
这个服务发布思路非常好。就是不知道是不是标准webservice的实现。
Tiny快速入门之控制层开发

下面是一些常用的链接,供大家使用: GIT地址(必须是OSC家的):https://git.oschina.net/tinyframework/tiny 问题报告:https://git.oschina.net/tinyframework/tiny/issues 官方网站:http:...

悠悠然然
2014/11/27
0
8
TinyFramework 1.2.0 预览版正式发布

TinyFramework 1.2.0 预览版正式发布,更新内容如下: Tiny框架 虽然整体体量比较大,但是它的每个模块都分得非常小,因此非常容易掌握 它的各种组件都可以方便的进行扩展,通过扩展可以不断...

悠悠然然
2014/11/28
8.1K
56
Tiny1.2.0预览版全面开源

感谢 感谢OSChina为我们提供了这么好的共享与交流平台。 感谢红薯及OSChina管理团队所有打过没打过交道同仁对Tiny一直以来的支持与帮助。 感谢所有鼓励和批评我的同学们,鼓励者为我们添加勇...

悠悠然然
2014/11/28
0
33
OSChina 技术周刊第十一期 —— 每周技术抢先看

每周技术抢先看,总有你想要的! 前端开发 【软件】Chartist.js —— 基于 SVG 的响应式图表库 【博客】node.js构建http服务器(一) 【博客】AngularJS SEO 简易教程 【资讯】Semantic UI 1...

OSC编辑部
2014/11/30
2.9K
0
J2EE应用开发框架--TinyFramework

值得拥有的企业级j2ee应用开发框架套件,专业团队开发,完整的生态体系,活跃的社区氛围,无限的水平扩展能力,724不间断运维能力。 我心目中理想的开源框架 她应该是小的、简单的,满足Sim...

悠悠然然
2013/08/09
19.9K
13

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
15
4
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部