jxTMS--java与python的协作

41 篇文章 0 订阅

jxTMS:低成本快速定制的业务系统个人开发平台。

java与python的协作

在jxTMS中,有两种java和python的协作模式:

  • 叠加:python运行于java之上,即java准备好环境,python受限运行于此环境中

  • 平行:python运行于java之外,两者是独立的两个进程,通过IPC进行交互完成协作,python全功能运行

叠加模式

如jxTMS模块的五个组成文件中的capa.py,其定义了一个继承自java所定义的affairMgr类的python业务类,在模块加载时capa.py会被自动执行,会创建该业务类的一个python实例,然后将该实例保存到java空间的ORG对象中。在用户触发了相应的事件后,java代码完成前述所介绍的运行环境准备,包括上下文、数据库事务、分页查询逻辑、事件映射、web控件映射等,然后根据该python实例创建一个新的python实例,然后投入到运行环境中运行来响应相应的事件。

该capa.py是利用jython加载处理的,但jxTMS没有为其准备第三方python包的路径设置,所以本模式下的python代码只能引用两种python包:jxTMS开放的java类和python的系统模块。也就是说叠加模式下的python代码只能执行jxTMS和python本身所提供的功能,而不具备导入第三方包的强大扩展能力,所以称其为受限运行。

注:笔者自己从没有在叠加模式下引用过任何python内置的系统模块,所引用的全部都是jxTMS提供的java类

本质上,叠加模式只是利用python的运算与条件判断等形式计算能力来完成业务的计算与逻辑处理,而整体框架全部已经由jxTMS搭建完毕了,给开发者已经提供了一个完整的业务处理框架,开发者只需要根据当前的业务需要执行计算与逻辑判断。

但本模式有一个问题,即jython已经停止更新了,所以其所支持的python语法停留在python2.7。但这个问题在jxTMS不是问题,因为jxTMS只用到了python的如下功能:

  • 对象编程

  • 数值计算

  • 常用数据结构,主要是有时可能需缓存数据

  • 遍历,包括python内置数据结构和jxTMS提供的某些迭代器,如excel文件的行、数据表的行等

  • 逻辑判断

  • 函数回调,用的非常少,只在用户登录时的用户信息获取以及模块加载到组织中的模块初始化两个场景中会用到

  • 函数说明【doc字符串】,笔者信奉的是:多定义少编码,所以jxTMS有大量的各种定义,如简易流程、业务规则、统计、兴趣点、硬件状态机等,而这些都是利用python的这一特性定义的

  • 函数修饰【@修饰】,所有需要jxTMS在加载时感知的预处理都需要利用该特性,包括所有的定义,包括capa.py中的cmd事件和prepairDisp事件、硬件操控逻辑中的事件、通知等

而这些,python2.7自然都已满足,所以不会影响到jxTMS的使用。甚至在开始设计jxTMS时,笔者首先选择的业务逻辑处理语言是lua,因为其足够的小巧快速【lua的java环境jar包只有354K,而jython则高达37M,这也间接导致jxTMS的加载慢、内存开销大,而jxTMS其实并不需要太多的python功能】,而且其函数回调的处理也比python自然的多,但奈何python已成为国民编程语言,而jxTMS的首要设计原则就是最大化的降低开发者的门槛,那么lua再好也自然抵不过python的学习曲线低。

平行模式

本来jxTMS是设计用来供个人快速完成业务开发的。但笔者却又接连遇到需要全python功能编程的需求,包括少儿python编程大赛、文本情感分析等。经过前面的说明,可以看出叠加模式这种受限功能的python代码执行模型是肯定无法适应这样的需求的。所以jxTMS增加了平行模式来满足类似的全python编程需求。

平行模式很简单:

  • jxTMS提供了一个jxPython.py文件,其中定义了一个基础的python类:jxCmd

注:目前镜像提供的jxTMS版本中未提供jxPython.py文件

  • 开发者在自己的python文件中引用jxPython并自定义继承了jxCmd的python类

  • 该自定义的python类中的每一个自定义的函数都自动被jxCmd转化为事件,可以从jxTMS直接调用

  • jxCmd同时提供了相应的响应函数,自定义函数处理完毕直接调用该函数即将处理结果返回到jxTMS

  • 在自定义的python文件中创建一个管道并用该管道和jxTMS通信

  • 将该文件和jxPython.py放入./pythonFunc目录下,在需要时jxTMS会调用python执行该python文件

平行模式的好处自然是既拥有python的全功能,可以快捷的获得python在AI、数据处理等方面的强大扩展能力,同时又可利用jxTMS快速而低成本的开发业务管理系统来将python增强的这些能力应用到业务上。

注:少儿编程是jxTMS将源码发给自定义函数然后由python动态加载后执行,所以还需要额外增强代码安全处理

平行模式下jxTMS和python之间使用命名管道的IPC方式以json格式来传递事件及其响应。其可靠性决定于系统资源。笔者只遇到过一次工作失效,原因是前端的兄弟写错了参数,将原本应发给c++模块的c++代码发给了python模块,同时因结果校验错误还反复发送,最终导致python崩溃【开发机只有2G内存,却启动了三个java程序、python进程、mysql、rabbitMQ等】。

目前,jxTMS已经打包为云服务器镜像,开发者开箱即用:
jxTMS-腾讯云市场​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值