文档章节

Tiny快速入门之服务开发

悠悠然然
 悠悠然然
发布于 2014/11/23 10:38
字数 1783
阅读 6246
收藏 89
点赞 10
评论 12

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

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


© 著作权归作者所有

共有 人打赏支持
悠悠然然

悠悠然然

粉丝 2365
博文 173
码字总数 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 ⋅ 8

TinyFramework 1.2.0 预览版正式发布

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

悠悠然然 ⋅ 2014/11/28 ⋅ 56

Tiny1.2.0预览版全面开源

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

悠悠然然 ⋅ 2014/11/28 ⋅ 33

OSChina 技术周刊第十一期

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

OSC编辑部 ⋅ 2014/11/30 ⋅ 0

OSChina 技术周刊第十一期 —— 每周技术抢先看

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

OSC编辑部 ⋅ 2014/11/30 ⋅ 0

J2EE应用开发框架--TinyFramework

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

悠悠然然 ⋅ 2013/08/09 ⋅ 13

TinyFramework 2.0 火热推出,J2EE 应用开发框架

Tiny 框架历经一年的开发,提交数千个 Commits,终于可以发布 2.0 了。 2.0版本较1.0版本,有太多太多的提升,有许许多多解决了有无的问题,因此,也可以看成是一个有显著提升的版本。 Issu...

悠悠然然 ⋅ 2015/06/10 ⋅ 71

Tiny快速入门之Web界面快速开发实践

前面讲了基于Tiny做服务,这篇来讲讲用Tiny怎么做界面。f 下面是一些常用的链接,供大家使用: GIT地址(必须是OSC家的):https://git.oschina.net/tinyframework/tiny 问题报告:https://git...

悠悠然然 ⋅ 2014/11/25 ⋅ 43

OSChina 技术周刊第十期,每周技术抢先看!

每周技术抢先看,总有你想要的! 移动开发 【软件】Android 表单验证框架 - AValidations 【软件】Git@OSC 的 iPhone 客户端 【软件】Git@OSC 的 Android 客户端 【博客】使用gradle构建and...

OSC编辑部 ⋅ 2014/11/24 ⋅ 10

Tangram 配套的服务端解决方案 - TAC

TAC (Tiny API Cloud ) 是与 Tangram 配套的服务端解决方案,当然也支持脱离 tangram 使用。TAC 不是平台,也不是框架,而是一种开发模式。Tangram,七巧板,是天猫团队开源的跨平台模块化 ...

匿名 ⋅ 05/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【elasticsearch】 随笔 Date datatype

一。时间类型的本质 首先json是没有时间类型的,对于es来说,时间类型的标示可以是下面三种情况 1.一个时间格式的字符串,如:"2014-11-27T08:05:32Z","2015-01-01" or "2015/01/01 12:10:3...

xiaomin0322 ⋅ 27分钟前 ⋅ 0

阿里云资源编排ROS使用教程

阿里云资源编排ROS详细内容: 阿里云资源编排ROS使用教程 资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、...

mcy0425 ⋅ 30分钟前 ⋅ 0

适配器设计模式

1、适配器模式 把一个类的接口变换成客户端所期待的另一种接口 使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 分为类的适配器模式和对象的适配器模式 2、类适配器模式 类的适配...

职业搬砖20年 ⋅ 34分钟前 ⋅ 0

npm操作报错 _stream_writable.js:61

有一天 不知道什么原因(估计和node的版本有关),无论你做什么npm的操作 都会报错/usr/local/lib/node_modules/npm/node_modules/readable-stream/lib/_stream_writable.js:61 这时候只要执...

lilugirl ⋅ 38分钟前 ⋅ 0

Eclipse安装插件的几种方式

Eclipse魅力之一就是支持可扩展的插件,来丰富自身的功能,这种方式也是建立在开源思想之上的。具体使用什么方式去安装插件,要看我们拿到的是什么。 1. 拿到的是一串URL,如http://subclips...

GordonNemo ⋅ 40分钟前 ⋅ 0

div图片叠加

css实现代码如下: <div style="position: relative;"><!--这个层为外面的父层,需设置相对位置样式--> <div style="position: absolute;"><!--子层,需设置绝对位置样式--> <i......

niithub ⋅ 41分钟前 ⋅ 0

作用域slot

如果父组件需要使用子组件中的内容怎么办,比如父组件需要控制子组件的显示 <div id="root"><child><template slot-scope="props"><h1>{{props.item}} <div>编辑</div></h1><......

金于虎 ⋅ 44分钟前 ⋅ 1

HongHu commonservice-eureka 项目构建过程

上一篇我们回顾了关于 spring cloud eureka的相关基础知识,现在我们针对于HongHu cloud的eureka项目做以下构建,整个构建的过程很简单,我会将每一步都构建过程记录下来,希望可以帮助到大家...

明理萝 ⋅ 47分钟前 ⋅ 1

xml和对象的相互转化

@Data//setter和getter方法,toString和equals,hashcode方法@EqualsAndHashCode//代表重写equals和hashcode方法@XmlAccessorType(XmlAccessType.FIELD)public class Classroom {@X......

拐美人 ⋅ 47分钟前 ⋅ 0

tableView cell的高度 分组头部尾部的高度 自适应

@property (nonatomic) CGFloat rowHeight; // default is UITableViewAutomaticDimension@property (nonatomic) CGFloat sectionHeaderHeight; // default is UITableViewA......

娜一片蓝色星海 ⋅ 48分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部