delphi + java 的分布式应用
结合Delphi
客户端桌面开发的优势和Java的稳健强壮特性,采用Delphi
Client + Java Server的系统架构应该是很有市场的,经过一段时间的实际项目实践,实现架构是这么实现的,供讨论:
1.后台应用服务层可采用基于Spring+Hibernate的轻量级J2EE实现,并使用Apache XML-RPC
提供客户端调用接口;
2.前台采用 Delphi
XML-RPC
调用服务器端业务实现接口;
3.后台和前台分别实现XML-对象序列化;
4、可选用SLL,可支持数据压缩;(这个需要对Delphi
XML-RPC
实现作一些扩展)
系统架构实现基于几点考虑:
1、XML-RPC
同SOAP比较:由于Delphi
SOAP客户端存在一些性能问题和同Java实现存在一些兼容性问题,因此考虑采用XML-RPC
实现,而且XML-RPC
实现同SOAP实现相比较,性能要好很多;
2、XML-RPC
同SOCKET比较:采用HTTP协议可以有效穿透不同网络防火墙;
3、采用XML格式交换数据,而不采用XML-RPC
标准格式交换数据,主要是由于XML-RPC
格式比较简单,复杂的数据格式很难满足需求,直接使用对象XML数据流方式,有利于系统扩展;
使用的第三方软件列表(开源产品,可用于商业开发)
Spring Framework:http://www.springframework.org
Hibernate ORM:http://www.hibernate.org
Apache XML-RPC
:http://ws.apache.org/xmlrpc/
Delphi
XML-RPC
:http://sourceforge.net/projects/delphixml-rpc/
Delphi
Indy VCL:http://www.indy.org
重点几个问题说明:
1、采用XML-RPC
机制实现数据交换
2、客户端采用Cookie机制实现保存客户端登录相关信息,Delphi
XML-RPC
实现应用了Indy Cookie VCL,因此我们不需要重复发明轮子
3、Java 端 XML-RPC
实现比较多,Apahce XML-RPC
是不错的选择
4、客户端和服务器端各实现一套 对象-XML序列化/反序列化,客户端调用请求前,将对象转换为XML数据流并封装为XML-RPC
格式请求远程方法调用,服务器端解析XML数据流,并转换为对应的对象,执行实际的业务操作;这一步是非常关键的
客户端通过XMLHTTP进行请求处理的技术
:采用XML-RPC方式处理客户端和服务器端交互
客户端和服务器端传递的数据格式
:采用XML格式交换数据
如何处理上下文信息
:客户端采用Cookie机制来保存上下文关系,服务器端可以采用HTTP Session方式来来保存客户端信息,类似于浏览器
如何设计服务器端的接口
:使用 XML-RPC方式提供最原始、最简单的RPC方式调用
如
相关文档:
距离Java7的MR版本发布有段时间了,通过安装试用之后的总体感觉是:速度又快了。仔细阅读了Java7的相关文档发现,Java7拥有如下的一些新的特性。
首先是模块化特性:如果您安装和使用过NetBeans6.7的话,是不是会有一个很大的感觉,就是NetBeans6.7的启动速度比以前快了很多,当然并不是NetBeans已经使用了Java7,而是NetB ......
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。
一、Java编程入门类
对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这 ......
一、概述及示例代码
Delphi中包括许多已经封装好的类及控件,其中的非可视化控件库以功能方式划分可处理诸多应用需求。若使用C++实现系统时对某些功能简单调用delphi中现成的库时即可。因此将delphi中的库以DLL形式封装好之后如何将方法导出可供C++调用是本文记录的重点。C++调用的方式有多种,在这里只讨论一种静 ......
1、首先将delphi中Controls单元提取
2、修改Controls单元中如下部分:
procedure TWinControl.CreateParams(var Params: TCreateParams);
begin
FillChar(Params, SizeOf(Params), 0);
with Params do
begin
Caption := FText;
Style := WS_CHILD or WS_CLIPSIBLINGS;
&nbs ......
屏幕的分辨率用这个
x=GetSystemMetrics(SM_CXSCREEN)
y=GetSystemMetrics(SM_CYSCREEN)
同上。
.而且获得屏幕上的像素好像应该使用
screen.pixelsperinch函数
int GetDeviceCaps(
  ......