Tiny快速入门之服务开发

2014-11-23  来源:本站原创  分类:Tiny框架  人气:0 

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

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

GIT地址(必须是OSC家的):https://git.quweiji.com/tinyframework/tiny
问题报告:https://git.quweiji.com/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页。

Tiny快速入门之服务开发

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

Tiny快速入门之服务开发

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

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

总结一下,如果用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服务

Tiny快速入门之服务开发

创建一个流程,然后拖入一个HelloWorld组件,然后在扩展属性的名字里输入“ ${name}”表达式,在结果键值中输入“ result”

然后,就没有然后了,OK了。

有同学问,你这个HelloWorld组件哪里来的??这个是另外一个话题,就是如何创建流程组件了。

在Tiny开发框架中,流程组件和使用流程组件开发是两种类型的角色。

三、Tiny服务开发进阶

有人说了,你这个就是个HelloWorld有毛用,我真正的业务逻辑是非常复杂的呢。

问题问得非常好,实际上能把HelloWorld做出来,还有什么复杂的做不出来呢?

你里面要用Spring+Hibernate/ibatis来开发服务的业务逻辑,当然没有问题;你想用其它的方式来开发,也没有问题;这也是Tiny框架在设计时的一个设计目标,就是要与现有各种开源框架有良好的集成能力。

如果你想复用原来开发的代码,完全可以不改一行代码,通过Xml配置方式,发布成Tiny服务,而享受Tiny框架带来的水平扩展能力、分层部署能力、各种通道访问能力、模块化管理。

当然,你也可以使用Tiny框架来开发服务,享受飞一般的体验。

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

相关文章
  • Tiny快速入门之服务开发 2014-11-23

    周五发了Tiny框架即将全面开源一文,有不少同学给了不少有意义的意见和建议,其中一条就是感觉太虚了,期望来点实的,因此本文将从实打实的快速开发方面讲起,来说明一下用Tiny框架开发一些业务是如何操作的,本文中的内容全部来源于Tiny快速入门手册,希望亲自动手实践的同学们,可以直接去下载并按照手册进行即可进行验证. 下面是一些常网的链接,供大家使用: GIT地址(必须是OSC家的):https://git.codeweblog.com/tinyframework/tiny 问题报告:https:/

  • Tiny快速入门之控制层开发 2014-11-27

    下面是一些常用的链接,供大家使用: GIT地址(必须是OSC家的):https://git.codeweblog.com/tinyframework/tiny 问题报告:https://git.codeweblog.com/tinyframework/tiny/issues 官方网站:http://www.tinygroup.org 更多内容,请看本人博客.不一样的内容,一样的精彩! 前面讲了Tiny快速入门之服务开发和Tiny快速入门之Web界面快速开发实践,也就是说开发服务和界面都没有问题了

  • Tiny快速入门之Web界面快速开发实践 2014-11-25

    前面讲了基于Tiny做服务,这篇来讲讲用Tiny怎么做界面.f 下面是一些常用的链接,供大家使用: GIT地址(必须是OSC家的):https://git.codeweblog.com/tinyframework/tiny 问题报告:https://git.codeweblog.com/tinyframework/tiny/issues 官方网站:http://www.tinygroup.org 更多内容,请看本人博客,不一样的内容,一样的精彩! 本来想改改codeweblog.com的界面,但

  • Common Lisp 初学者快速入门指导 2013-05-17

    Common Lisp 初学者快速入门指导 V 0.90 目录 一.简单介绍 1.本文目标 2.适用读者 3.迭代式学习 4.本章内容小结 二.快速上手 1.推荐开发环境 Lispbox 2.开发环境简要介绍 3.第一个简单的 Lisp 程序 4.为程序增加些复杂性 5.这么好的程序一定要保存起来 6.补充阅读:让程序支持中文符号 7.本章内容小结 三.适用于初学者的基本概念 1.Lisp 程序由 S-表达式组成,表达式是列表或单个原子 2.Lisp 中的列表是什么样的? 3.Lisp 中的原子

  • Activiti快速入门 kft-activiti-demo 2012-12-16

    kft-activiti-demo 网站 : http://www.kafeitu.me/activiti/2012/05/26/kft-activiti-demo.html 1.项目简介 1.1 项目信息 本项目旨在让Activiti初学者可以快速入门,使用工作流里面的请假流程作为Activiti企业实战的Hello World. 简单通过这个实例说明如何结合流程与业务,表单.业务.流程之前如何衔接-- 发起这个项目也是目前没有太完整.接近企业真实项目的例子,本项目作为一个补充希望能帮助更多人

  • Android中操作SQLite数据库快速入门教程 2013-10-29

    这篇文章主要介绍了Android中操作SQLite数据库快速入门教程,本文讲解了数据库基础概念.Android平台下数据库相关类.创建数据库.向表格中添加数据.从表格中查询记录等内容,需要的朋友可以参考下 SQLite是Android平台软件开发中会经常用到的数据库产品,作为一款轻型数据库,SQLite的设计目标就是是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够.下面我们一起来看看针对Android平台的SQlite 3的使用.

  • [推荐图书]大规模Web服务开发技术 2014-02-20

    这本书的内容主要来自Hatena株式会为学生们举行的暑期实习课程,因此其形式也是以讲义为主,风格和一般的技术读物略有不同.其内容涵盖范围也很广,从性能优化.分布式,到算法.系统架构,甚至还介绍了硬件的经济成本.最吸引人的就是书中的几个实习课题,介绍了压缩算法.全文搜索等算法的实现方法. 自己开发的Web服务,以后规模增大时系统能否承受得起?如何才能打破系统时常陷入困境的局面?面对成长起来的Web服务,整日愁眉苦脸的人一定存在吧.作者也有过完全相同的经历. Hatena网站,月访问人次1500万,

  • 用穿越火线快速入门php面向对象 2014-07-27

    php目前已经成为国内的主流web developer的首选开发语言,其强大的面向对象容易使初学者找不到思绪,一头雾水,借助此文希望对初学者有所帮助,假设Crossfire用php来开发 <?php /* *用穿越火线快速入门php面向对象! *php目前已经成为国内的主流web developer的首选开发语言,其强大的面向对象容易使初学者找不到思绪,一头雾水! *,借助此文希望对初学者有所帮助,假设Crossfire用php来开发. * 1类与对象 */ class Crossfire {

  • 国产PHP开发框架myqee新手快速入门教程 2014-09-09

    这篇文章主要介绍了国产PHP开发框架myqee新手快速入门教程,myqee中文名称迈启PHP框架,有比较多的高级开发特性,需要的朋友可以参考下 一.环境. 笔者的环境是win7 32bit 旗舰版.用的xampp1.7.4(1.8.x版的php版本太高,个人觉得php 5.3X更实用些)+mq最新版.重点是配置虚拟机, 参考了http://www.jb51.net/article/52123.htm 本机xampp安装在D盘,给出我的配置:虚拟机配置文件路径 D:\xampp\apache\co

  • DB2 9(Viper)快速入门 2014-10-23

    正在看的db2教程是:DB2 9(Viper)快速入门. 为了帮助您快速掌握 DB2 自身的 XML 特性,请完成几个普通的任务,比如: 创建用于管理 XML 数据的数据库对象,包括一个测试数据库.一些示例表和视图. 使用 INSERT 和 IMPORT 语句将 XML 数据填充到数据库中. 验证您的 XML 数据.使用 DB2 开发和注册您的 XML 模式,并在导入数据时使用 XMLVALIDATE 选项. 后续文章将包括其他主题,比如使用 SQL 查询.更新和删除 DB2 XML 数据,使用

  • SVN快速入门1--SVN的安装及常用命令 2014-11-24

    SVN相信大家都有使用过或者听说过吧?它的好处我这里就不说了,网上介绍多的是.因为是版本控制,所以个人认为其设计的原理不需要懂得太多,只需要了解常识即可.小弟google了许久,也没找到一篇介绍快速入门的文章.无奈之下,看了几篇长篇大论,终于学了点点的皮毛.下面我将写一个svn快速入门系列,因为是快速入门,所以一般只讲操作.(这里有些内容都是参考 深入浅出系列之二_SubVersion) 首先,我们下载svn安装文件,输入网址:http://subversion.tigris.org ,找到..

  • AngularJS快速入门 2015-04-20

    本文通过几个循序渐进的例子,给大家详细讲解了如何快速入门AngularJS,十分的实用,这里推荐给大家,有需要的小伙伴可以参考下. 怎么样快速了解AngularJS? 相信很多初学者都有过或者类似的疑问,其实这个问题没有标准的答案,每个人的技术背景.工作经验等等都不经相同,所以学习AngularJS的切入点肯定也就不同,我之前初略使用过knockoutjs,当我第一眼看到AngularJS的Helloworld案例后,顿时就被声明式的语法和强大的双向绑定特性所吸引. 其实AngularJS的官方

  • 百度Hi帮助-快速入门 2014-10-16

    快速入门 系统要求 安装 登录 更改状态 添加联系人 发送即时消息 1.系统要求 操作系统:Windows 2000/XP/Vista 文件大小:5.68MB 硬盘空间:23.3MB 浏览器:IE6.0及以上 返回页首 2.安装 立即下载百度Hi最新版本. 下载完毕后,双击BaiduHi_1.0_Beta1.exee文件开始安装. 返回页首 3.登录 安装完毕,双击桌面快捷图标即可使用您的百度帐号登录百度Hi了. (注意:如果您尚未注册百度帐号,请点击此处立即注册). 返回页首 4.更改状态 登

  • Castle Active Record for .NET2.0快速入门示例 2009-03-26

    单表使用 建立一下表 CREATE TABLE [dbo].[Employees] ( [Employeesid] [int] IDENTITY (1, 1) NOT NULL , [LogonName] [varchar] (40) COLLATE Chinese_PRC_CI_AS NULL , [LastLogon] [datetime] NULL ) ON [PRIMARY] GO 建立一个实体类,代码如下 using System; using System.Data; using S

  • OFBiz快速入门 2011-05-27

    OFBiz快速入门 原文URL:https://cwiki.apache.org/OFBIZ/ofbiz-tutorial-a-beginners-development-guide.html 一个大厦能够建多高,是由其基础决定的:一个软件能够'容纳'多少功能,是由其架构决定的. 一个优秀的架构能够容许很多工程师协同合作,长期不断累积功能:反之,一个脆弱的架构则捆绑住工程师的手脚,每添加一个功能都是困难重重,涉及到很多人的交互,效率非常低下,长期维护也是非常麻烦,代价很高,到一定程度就遇到天花板

  • [PLAY FrameWork]PLAY框架快速入门 2012-02-28

    前言 目前,Ruby on Rails及Grails等动态脚本语言正发展得如火如荼,而在以Java为首的开源最大阵营中,也出现了各种框架.其中最著名的就是Play框架(http://download.playframework.org). Play 框架是一个完整的 Web 应用开发框架,覆盖了 Web 应用开发的各个方面.它借鉴了流行的 Ruby on Rails 和 Grails 等框架,又有自己独有的优势.具体表现在以下几个方面:其一,通过 Play 框架提供的命令行工具,可以快速创建Ja

  • Spread for Windows Forms快速入门(15)---使用 Spread 设计器 2014-06-11

    通过 Spread 设计器用户可以快速地对 Spread 控件进行设计.无论用户是正在做一个关于 Spread 控件特性的原型研究,还是对于一个已经存在的 Spread 控件在某些方面进行进一步的定制,Spread 设计器专有的图形界面可节省大量的时间和精力.Spread 设计器允许用户添加数据,同时设置控件属性,而且还包括那些在 Visual Studio 中无法设置的属性.用户可以同时设置运行时和设计时属性,大多数情况下用户可以在应用设置之前预览效果,设置完成后,就可以将所有的设置应用到 S

  • Spread for Windows Forms快速入门(13)---数据排序 2014-06-11

    开发人员可以对Spread表单中的行和列进行自动排序操作,如根据指定的列,以升序方式自动排序表单中的数据.同时,也可以显示排序指示器.这些操作不会影响数据模型 仅仅涉及数据如何显示. 允许用户自动地对行进行排序 你可以设置表单以允许用户在列首被点击的情况下使用自动排序这一功能.当列首第一次被点击(被选中)时,未排序的图标就会显示.第二次点击时就会显示排序图标并且会将列进行排序.如果用户在相同的列上 连续点击,那么排序的方向就会被反转.这并不影响数据模型,只会影响数据如何显示.下面的图表显示了未排

  • Spread for Windows Forms快速入门(7)---单元格的交互操作 2014-06-11

    单元格的编辑模式 通常情况下,当终端用户双击单元格时,编辑控件将允许用户在该单元格中输入内容.在一个单元格中编辑的能力被称为编辑模式.一些属性和方法可以用来自定义编辑模式的使用. 当一个单元格处于编辑模式时,活动单元格将显示一个I型光标,如下图所示.当该单元格不处于编辑模式时,活动单元格将显示一个焦点长方形,如下图所示. 处于编辑模式下的单元格 被选中但是并不处于编辑模式下的单元格 一个单元格将进入编辑模式(开启编辑模式),当: 用户在单元格中输入内容 用户双击单元格 EditMode属性设置为

  • Spread for Windows Forms快速入门(12)---数据分组(Outlook风格) 2014-06-11

    你可以设置的显示将行分组变成 OUTLOOK样式.对于大量的数据来说,这样会以用户需要的顺序显示数据.用户可以选择要进行的排序(以列为依据),然后控件会以此为依据将行组织起来,分级地显示数据.既可以通过双击列首的方式,也可以通过点击和拖拽此列进入页面头部分组栏的方式 选中要进行分组的列. 允许用户使用行分组 默认情况下,不允许用户在表单中进行行分组. 你可以开启这项特性,以便对整个表单的行进行分组.除了允许进行分组之外,你还需要允许移动列,因为用户通过使用点击和向分组栏中拖拽列首的方式进行分组,