设为首页 收藏本站
查看: 616|回复: 0

[经验分享] Apache OFBiz 学习笔记 之 服务引擎 一

[复制链接]

尚未签到

发表于 2015-8-3 10:18:29 | 显示全部楼层 |阅读模式
概述

    服务定义为一段独立的逻辑顺序,当多个服务组合一起时可完成不同类型的业务需求

    服务有很多类型,WorkFlow、Rules、Java、SOAP、BeanShell等。java类型的服务更像一个静态方法实现的事件,然而使用服务框架就不会局限在web应用程序中。

    服务需要使用Map传入参数,结果同样从Map中返回。这样很妙,因为Map可以被序列化并保存或通过HTTP(SOAP)传输。服务通过服务定义来定义并指派给具体的服务引擎。每个服务引擎通过适当的方式负责调用服务定义。因为服务没有和web应用程序绑定在一起,就允许在没有响应对象可用时仍可以执行。这就允许在指定时间由工作调度程序在后台调用服务

    服务能够调用其他服务。因此,将多个小的服务串联起来实现一个大的任务使重用更容易。在不同应用程序中使用的服务可以通过创建全局服务定义文件(只能创建一个)或者一个应用程序的特定服务(这样的服务受限制且只能用于这个应用程序)。

    当在web应用程序中使用时,服务可以用于web事件,这允许同时在服务框架中并重用现成的逻辑。同样,服务可以定义成“exportable",允许外部程序访问。目前,SOAP EventHandler允许服务通过SOAP来产生。其他形式的远程访问将来会加入到框架中。



特点

1、不可知的服务调用:实现不可知,位置不可知,你需要调用的服务仅仅按照要求知道服务名和传递的参数即可,你不需要知道在哪里实现的,文件在哪个服务器上或者其他的这类事情。你也不必关心是用java、simplemethod、还是其他脚本语言实现的。这就提供了在调用服务代码和服务间的松耦合,提供了高伸缩性、增加重用性。

2、不同类型的服务调用:同步、异步、预定时间。相同的服务定义、相同的服务实现,可以根据应用的需要用不同的方式调用。

3、服务提供输入和输出参数的校验。

4、不同的实现方式:有许多不同方式实现服务,处理这些不同方式实现服务的对象称之为服务引擎。处理不同类型服务实现的每个对象都要实现GenericEngine interface。所以你想实现自己的服务,基本上实现这个接口即可。



服务引擎的定义

在serviceengine.xml文件中定义了存在的引擎






  






















  





属性名


是否必须


描述


name


Y


服务引擎的名字,必须唯一


class


Y


GenericEngine接口的实现类


服务引擎的一些配置

服务引擎的名称:

authorization 标签设置服务授权需要调用的服务。这个标签只有一个属性service-name:属性值应该是用来授权的服务名。默认使用通用的OFBiz的UserLogin服务






        

服务位置:






  


服务引擎的线程池的配置

工作调度器(job scheduler)异步调用工作/服务。它包含池化的线程和几个请求线程。

thread-pool:该标签用来配置每个线程是怎操作。



      






  


如下属性可用




属性名


是否必须


描述


Ttl


Y


每个请求线程的存活时间。达到时间线程将被销毁


wait-millis


Y


每个请求线程在检查通过运行前休眠的时间


jobs


Y


每个请求线程在销毁之前可运行的工作数


min-threads


Y


线程池中保持的请求线程的最小数


max-threads


Y


线程池中将会创建请求线程的最大数
poll-enabledY为‘true’scheduler就会poll数据库来调度工作
poll-db-millisY如果线程池可用,本属性用来定义池化线程运行的频率


几种服务引擎

BeanShell(BSH):是用BeanShell脚本实现一个服务

服务组:你能用一组服务实现一个服务,结果是通过定义的服务组来调用其他服务

HTTP:http方式是通过另一台通过http通讯接口运行的服务引擎的一个服务,它是通过http或https运行的。指定URL联系到另一台服务器,发送请求到远程服务器,远程服务器通过处理后返回响应。

接口:这个是特殊的服务,其根本没有实现服务,只是设定了一个接口,它有属性定义。只是它的作用在于给其他服务继承和扩展

jacl:另一种脚本语言,基本上是java语言写的解释器。

java引擎:用java实现的静态方法(可能在OFBiz中使用较多的方式是这种)

RMI:远程调用接口,基于java的rmi方式调用

SOAP:另一个远程调用接口。将基于服务定义的自动化映射调用在另一台服务器的soap服务上

simple:用minilang实现的服务



服务的定义

服务定义在服务定义文件中,该文件一般在每个组件的servicedef目录下,习惯命名weiservices.xml

服务定义有一个唯一的名字,明确的服务引擎,明确的输入输出参数

参考:framework\common\servicedef\services.xml






   
Create a new note record





  


服务元素

service的属性 详细参考framework/service/dtd/service.xsd


属性


是否必须


说明


缺省值


name


Y


服务的唯一名称





engine


Y


引擎的名称(在serviceengine.xml中定义)





location


N


位置或服务包类的包名





invoke


N


服务的方法名





auth


N


服务是否要求授权?(true/false)


true
debugN当调用服务时,是否启动详细调试?(true/false)true
default-entity-nameN使用自动属性(auto-attribute)的缺省实体
exportN这个服务是否允许通过SOAP/HTTP/JMS访问?(true/false)false
validateN是否对服务参数的名字和类型进行验证?(true/false)true
max-retryN异步调用服务失败时,最大重复次数-1(无限次)
use-transactionN是否使用事务true
require-new-transactionN在使用事务的情况下是否启动新事务true
semaphoreN并发调用服务时使用的信号量:
none:当多个线程调用服务时,并发执行服务
wait:当多个线程调用服务时,采用排队的方法调用服务
fail:当服务正在被执行时,其他任何试图要调用该服务的线程都将调用失败
none
semaphore-wait-secondsN当sempaphore="wait"时,调用服务的线程要等待的超时时间,
超时调用失败
300
semaphore-sleepN当sempaphore="wait"时,1毫秒内做几次检查
(检查服务能否被调用)
300
transaction-timeoutN该服务的事务超时时间,当该服务启动新事务才有效0




属性

attribute的属性 详细参考framework/service/dtd/service.xsd




属性


是否必须


描述


缺省值


name


Y


这个是属性的名字





type


Y


对象的类型(String,java.util.Date)等





model


Y


这个参数是输入、输出或输入输出(IN/OUT/INOUT)





optional


N


这个参数是否可选?(true/false)


false


default-value


N


默认值



form-labelN对应的表单项显示名称
entity-nameN对象名
field-nameN属性名
string-map-prefixNMap类型参数的前缀
string-list-prefixNList类型参数的后缀
form-displayN是否在表单中显示?(true/false)true


我们参考几个service的定义看看service



参考一:framework\service\servicedef\services.xm






   





  参考二:applications/accounting/servicedef/services_finaccount.xml







   
Creates return for reload on failure



  参考三:framework\service\servicedef\services.xml







   

Cleans out old jobs which have been around longer then what is defined in serviceengine.xml





  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-93587-1-1.html 上篇帖子: apache ssl 证书申请 下篇帖子: 512M vps apache内存优化配置方案(perfork)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表