C++调用java工作流思路
工作背景介绍:
首先看一下项目的整体架构。通过图来介绍一下项目负责的部分:
![](http://img-my.csdn.net/uploads/201210/30/1351567526_5025.png)
项目的需求任务是工作流引擎,因为使用Java工作流比较方便,因此,公司选择使用普元平台做了基于普元平台的工作流引擎。通过图,可以观察到客户乃是C++系统,我们做的工作流引擎是相当于客户C++系统的一个插件而已。并且客户的C++系统已经投入使用中了。
为了使公司中的Java引擎能够兼容嵌入到客户的C++系统中,基于这个需求下,我的工作任务诞生了——中间部分的C++通信客户端。
项目技术分析:
整体的架构有了,通过图,大概能够知道我负责的C++通信客户端这块的大概技术要求了。中间部分就相当于协调者,协调的主要任务就是通信。
通过这个小内容技术分析,目的不是吹嘘技术,更不是炫耀自己的技术或公司或客户。而是真实的表达出目前市场技术形势以及技术需求,需求有了,才会有明确的学习目标。
首先:C++通信客户端<——>Java工作流引擎
通信方式共有三种:
- webserivce,与语言无关的接口。并且是个基于w3c标准。其中,在项目中,我就是通过webserivce来实现C++与Java通信的。其中,C++客户端使用的soap或gsoap。
- JNI方式。统称为Java Native Interface,Java本地调用方式。JNI标准已经是Java平台的一部分,允许Java与其他的语言进行通信,一般情况下,主要是为了C或C++设计的。只要他们约定好接口就行。 在JNI方式中,因为本地调用,所以在Java声明方法时,是使用native关键字,说明是非Java语言实现。具体的方法实现则是在C++或C中。
- socket通信。socket通信,这部分内容,确实很重要,做过Java客户端的,基本都接触过这socket部分,而我从未接触过java客户端,而是直接上手的java web,所以当时对socket通信,确实有点点难理解。所以没有选择socket通信方式。但是socket通信,在项目中也是重大的部分。
其次:B/S工作流——>C/S客户端
基于普元的Java工作流是B/S网页形式,而客户C++系统,则是纯纯的C/S模式,如何把后台的B/S工作流转化成C/S客户端哩?
因为是初次接触MFC,对于陌生的东东,是需要时间来熟悉的。由于初次接触,所以组长好心提示,做成类似网银加载提示的Active控件。自己手动开发Active控件,对于C++开发者,也许还有难度,更何况对于我呢?呼呼,经过自己上网查资料,嘻嘻,发现B/S转C/S很简单,一个自带的IE控件即可。OK,加载IE控件,URL地址设置成后台引擎的首页,一切搞定。YES,一个IE控件,搞定B/S转C/S。
哈哈,有网的地方,就会有天使。
然后:JSP<——>C++
根据业务的需求,通过后台Java返回的结果,调用本地的业务窗口。通过webserivce,每次都是在服务器端弹出,而不是客户端,所以webserivce这种方式失败。为了实现这个业务功能,所以直接让C++客户端调用,就可以实现客户端弹出相应的业务窗口。因此,JSP需要与C++打交道。所以,通过写js事件,调用C++方法,即可实现。
这部分通信,需要JS与C++通信。主要实现的是Iimdispatch接口。主要是根据名称,循环查找相应的id,然后通过id,查找相应的方法。
还有,C++通信客户端<——>客户C++系统
C++之间的通信,主要是通过函数依赖完成。函数依赖,也就是通过静态链接库或动态链接库方式加载。只要从事C++的,这部分也算是常识了。
这部分重点不是函数依赖,而是socket通信。
因此socket通信,这部分内容,也是我们需要掌握的。
无论是windows底层的socket32 api,还是mfc封装的Csocket,原理都是一样的,只不过,mfc封装的Csocket或java封装的socket,相对于socket32简单些。
在通信的过程中,使用udp方式,因为udp相对于tcp简单,不需连接,不许监听,但是有优点,就会有缺点。udp不如tcp安全。
但是,udp依然可以做到tcp的三次握手。由于业务的需要,在udp之上,又添加了tcp连接。只要udp用的合适,用的好,与tcp无差别。
其中,内部还涉及到了解析xml,创建xml,这部分的内容也是为通信做准备。
在技术分析这块,只要总体介绍了工作项目中应用到的技术,而没有具体介绍,在后期博客中会有相应的详细介绍,目的:记录工作经验,同样方便别人。
其实,我对知识并不是太看重,知识,技术,是永远学不完的,只要会学习,想学习,没有学不会的。