`

平台开发技术考虑

    博客分类:
  • Java
阅读更多
1.客户端设计

使用基于Applet的访问框架,客户端需要下载一个30M左右的jre,界面元素由Swing实现,可以参照NC的实现.

优点: A学习曲线平滑,不需要大规模的进行技术培训,目前人员大多都有过Swing的开发经历. B 界面表现性较传统Web页面优势较大,可以实现非常复杂的界面展现. C 显示的效率比较高,虽然web开发也已经实现了MVC的设计模式,但基于请求响应的开发方式有时无法满足大数据量下的应用. D 可以借鉴NC的实现方式,而且有很多代码可以使用.

缺点: A 客户端需要下载jre. B 第一次启动会比较慢,但以后会快很多.

2.客户端与应用服务器的数据传输

目前可以考虑的方案:

A 使用EJB的RMI-IIOP协议进行数据传输,为SUN的专属协议,无法穿透部署有防火墙的网络环境,需要使用EJB3的所有技术,平台依赖性较大.

B 使用开源领域的传输协议,此类协议都是通过http协议进行数据传输,比如: hessian,burlap以及Spring集成的HttpInvoker..由于使用了http协议,可以穿透防火墙进行数据传输.同时对于java-to-java的数据传输效率很高,基本上可以媲美EJB使用的RMI协议.在JavaEye上面也有了对Hessian等传输协议的讨论http://www.iteye.com/topic/129194.

以上两种方案可以看出,使用开源领域的技术可以得到比RMI要好的效果,同时由于是开源的,如果需要还可以进行修改或加入加密逻辑,建议优先使用.

3.应用服务器的选择

可供选择的方案:JBoss,GlassFish等,Tomcat不建议使用.GlassFish是SUN官方的开源JavaEE参考实现,对于JavaEE的各种技术支持的较好,比如JPA、JMS、JCA、统一事务管理等服务.而JBoss属于老牌的开源应用服务器,能够非常好的和各种其他开源项目进行集成,比如:Spring2.0,Hibernate等,而且旗下也有很多易用的扩展,比如扩展JSF界面体验的ajax2jsf可以增加jsf对ajax的支持,spring-deploy可以在jndi级别对spring2.0进行集成,同时JBoss还对Java MBean进行了一流的支持,应为JBoss的开发就是基于MBean的.所以如果远程技术是基于Spring的优先考虑JBoss,而如果是基于EJB3.0,则可以优先考虑GlassFish,毕竟是Sun的官方实现.

4.加密

因为是做自己的开发平台,加密的环节是必不可少的,目前JVM已经进行了开源,加密的逻辑在软件中的位置也有了更多的选择,比如在类加载器中、在JVM中等方式,如果在类加载器中进行加密,可以简单的使用一些常见的反编译软件(小颖)就可以进行破解,当然如果采用了代码混淆,反编译的难度可能对大很多.如果在JVM级别进行加密,不仅可以实现自己的字节码形式还可以通过修改java.exe文件,进行最底层的加密控制(C语言实现).

5.EJB or Spring

两种技术是目前比较流行的,使用比例当然是Spring高于EJB3.0,毕竟EJB3.0刚发布没有多久,但较以前的版本已经有了很大的改变,特别是吸取了很多开源的思想,比如将Hibernate、TopLink进行标准化,出现了JPA标准,控制反转IOC的应用等,但真正实施的项目还很少…而Spring在web开发领域已经占了很大的份额,优势是易于使用,同时可以集成EJB的所有服务事务、JCA、JMS等,特别是BeanFactory可以节省很多的开发工作,而且实现了代码的组装,无需硬编码.当然EJB3也通过Java注释技术实现了类似的功能,可以使用Java的强类型特性,出错率较低,但随着Spring开发工具的完善,已经可以实现xml文件中的代码提示..

我认为最佳的应用模式应该是基于Spring的POJO模型,使用EJB3.0的无状态会话Bean进行方法调用,这样的模型可以最大限度的集成JavaEE的企业服务,也可以使用Spring集成的开源企业服务实现.如需要可以提供实现结构图.

6.业务模型

看了金蝶EAS的BOS实现,可以借鉴它的想法:将系统的基础档案进行抽象,形成若干个可以拿来就用的业务组件,和NC基于表的建模形式不同,BOS可以对一个单据进行完全的自定义,包括字段、位置等,类似于报表工具的设计模块,想iReport的设计界面,就是可以进行拖放操作,最后形成一个完全自定义的单据.我认为实现方法是:将NC单据模板中的表定义前移,移到最终用户,最终用户在通过拖拽进行界面定义保存后,动态根据定义单据上的字段形成一个实体模型,最终持久化到表中(通过一个表存放动态定义表的字段).这样就比NC先进了一步,NC的单据模板是给一定层次的实施顾问使用的,因为需要首先要进行表的定义,数据格式的选取、VO的对照、数据字典的生成等等比较专业的操作,而基于业务组件设计把工作更近了一步,把表的定义进行了抽象,变为最终用户可以操作的图形界面,然后由后台逻辑进行生成,真正实现了软件客户化,而不是NC的软件二次开发化….实现的难点:业务组件的抽象(必须尽可能提供丰富的内置业务组件),设计界面的实现(拖拽,属性编辑<可以有开源组件使用>),持久化策略(如何效率较高的实现?)等.可能使用的技术:JavaBean(抽象组件)、属性编辑器(设置组件)、反射(返回组件属性)、动态代理或AOP(事务、日志等基础工作).

7.其他

7.1远程协议的自主实现:要求较高,关键不是如何实现,而是如何高效的实现…

7.2缓存:代码缓存、数据缓存、页面缓存(如果是Web页面)

7.3流程:可以研究OSWORKFLOW的引擎实现.界面实现通过jgraph绘制

7.4报表:是自己实现还是就使用iReport嵌入到平台中

7.5数据交换:这部分应该是平台的一大模块.
分享到:
评论
34 楼 bnmcvzx 2008-06-21  
如果客户面向的群体是大量的用户或普通网民,基于浏览器的架构是最合适的。
33 楼 jvincent 2007-10-23  
liangguanhui 写道
使用applet注意不错,不过是否要定义相关的通讯协议?


客户端和服务器端通过http协议就可以了.通过调用远程方法实现...
32 楼 liangguanhui 2007-10-23  
使用applet注意不错,不过是否要定义相关的通讯协议?
31 楼 jvincent 2007-10-23  
timerri 写道
让客户装jre?
还不如让他们去装个client!
嵌入ie解决UI问题。再自建协议解决其他b/s解决不了的问题。

等闲不会考虑让用户用java作的UI,客户用老机器的话,是会骂人的。


安装client不同于安装jre的plugin,如果能够解决可以在不用参与的情况安装jre就好了....
世界本没有什么纯BS系统....
30 楼 timerri 2007-10-22  
让客户装jre?
还不如让他们去装个client!
嵌入ie解决UI问题。再自建协议解决其他b/s解决不了的问题。

等闲不会考虑让用户用java作的UI,客户用老机器的话,是会骂人的。
29 楼 qlhl2000 2007-10-22  
做一次用户的意见调查,看有多少用户采纳jre的下载,并且自动实现版本更新;如果可以的话,采用Applet是首选的应用!现在的新技术就像当前的股市,就像夏天挑西瓜一样,不好评估这项技术的生命力和方便性,因为学习和更新同样是成本,最新不一定最好,但是成熟的比较保险;创新应用可以在一些小项目中试验,当不能大面积的在平台中应用。
28 楼 jvincent 2007-10-20  
谢谢各位的讨论,公司正在评估..不过我还是比较倾向于Applet和Web Start的方式,Web的方式受浏览器的控制太多,不少插件都被IE拦截了,如果告诉客户放开,客户会认为是安全性的降低....
27 楼 rehte 2007-10-19  
jvincent 写道

to rehte:

RMI-IIOP怎么样能支持HTTP协议?

http://www.cs.swan.ac.uk/~csneal/InternetComputing/Tunnelling.html
26 楼 jvincent 2007-10-19  
rehte 写道
我推荐楼主客户端使用Java Web Start这种模式。开发部署升级都非常方便。
另外RMI-IIOP是支持HTTP协议的,需要一定的配置。你去Sun的网站上查一下就知道了。
另外客户端使用JRE 6,下载大小只有12M左右。以后Kernel JRE出来,下载大小只有4M。
速度也不成问题,Java 6的Swing速度可以比得上Native程序的界面速度。
启动速度可能要稍慢一点,但只是第一次。
另外最新的Java 6 Update N版本已经解决了Applet的冷启动速度慢的问题。因此Applet也可以考虑,但是我推荐Java Web Start。


to rehte:

RMI-IIOP怎么样能支持HTTP协议?
25 楼 rehte 2007-10-18  
我明白,这些JavaFX语法声明的组件都是在运行时被映射成相应的Swing组件的。我的意思是使用传统的Swing Applet方式不会有风险,到JavaFX盛行的那天,Sun也是支持传统的Swing Applet方式的,只是那时它会推荐你使用JavaFX开发。但是现在显然不可能用JavaFX进行开发。也许将来使用JavaFX进行开发更快,但是现在不是不能等吗?所以就用Swing Applet了。
其实任何其他技术都会百分百的在未来发生演化,只要将来的技术仍然兼容这种技术,就不会有风险,关键是现在采用什么技术效率比较高。
我觉得现在使用Swing进行客户端开发效率是相当高的,各种Swing可视化设计工具将这种开发变得像Delphi、VB开发那么快。采用Swing相对于采用Adobe Flex和MS SilverLight要好的多,因为你的服务器端使用的是Java EE(当然如果你使用.NET平台那又是另一回事),这样会使客户端和服务器的数据交换的开销比较少,整个team的技术可以集中于Java上,管理沟通交流都会比较方便。使用同一种语言、技术、平台进行开发总是要比使用异质语言、技术、平台的风险低,而开发效率高,C/S架构应用的开发效率要比B/S架构应用的开发效率高,这是大家都认同的吧。
24 楼 fxy1949 2007-10-18  
to rehte:

Yes,I think we are having a good debate.

One thing I need to point out is,although "JavaFX底层仍是基于Swing和Java2D的 and JavaFx做的应用最终还是要运行在JVM上的", but JavaFx uses "Declarative Syntax",whereas Swing,Applet use "Procedural Syntax". It's a big difference for development.

Just take a very simple exmple:

In Swing:

    var win = new Frame();
    win.title = "Hello World JavaFX";
    win.width = 200;
    var label = new Label();
    label.text = "Hello World";
    win.content = label;
    win.visible = true;


In JavaFx:
        import javafx.ui.*;

        class HelloWorldModel {
            attribute saying: String;
        }

        var model = HelloWorldModel {
            saying: "Hello World"
        };

        Frame {
            title: "Hello World JavaFX"
            width: 200

            content: Label {
                text: bind model.saying
            }
            visible: true
        };

So I think we should be aware this big difference and take care when making decision.
23 楼 rehte 2007-10-18  
fxy1949:

咱们这不是为楼主支招吗?就目前来说使用JavaFX是不可能的,因为它还处于incubation阶段,不成熟。其实将来JavaFX的应用之一是RIA,将来的Applet就和JavaFX融合了,因此不是Applet被Sun抛弃了,而是改头换面了化身成了JavaFX的RIA应用了。虽然JavaFX会取代传统Swing Applet成为Sun推荐的开发RIA的方法,但是传统的Swing Applet方式是自然被支持的,因为实质上JavaFX底层仍是基于Swing和Java2D的,它要支持JavaFX应用,必然要支持传统的Swing Applet。所以说楼主使用Swing Applet进行客户端开发是不会有风险的。
22 楼 fxy1949 2007-10-18  
to rehte:

Actually, your understanding of JavaFx is exactly the same with me. I have tried them on my machine in all different models.

What I am saying is for RIA market,JavaFx has made a big surprise and will be promising. But I think it's only in RIA market,the traditional way for web application development(Html,Javascript,Ajax,JSP,ASP,etc) will still be the main stream of web application.
21 楼 fxy1949 2007-10-18  
to: triu

1) when he is talking about using applet for client, and at same time he said that Jboss is good at "扩展JSF界面体验的ajax2jsf可以增加jsf对ajax的支持", as a reason for choosing it. Do you feel strange? He will benifit from JSF in Applet?

2)Regarding to EJB and Spring,I think the explanation about them is quit difficult to understand.

I just feel that in this post there are lots of confusion about technology. They are not expressed properly and need to be pointed out. No any offensive attempt.

20 楼 rehte 2007-10-18  
fxy1949:

我觉得你对JavaFX技术还是不太了解,还有它的工作原理、部署方法、和Java Swing的关系等等。JavaFx做的应用最终还是要运行在JVM上的,它最终的部署方式既可以作为独立的Java Application,也可以作为Java Web Start部署,也可以作为Applet部署,和你想像的不同。

现在流行的说法就是将Web Server列为Application Server的观点,这个也不是我个人的独创。以前我也以为Application Server是单指JBoss, Weblogic、WebSphere、Sun Application Server等EJB Container,后来才知道这些不过是是Application Server的一种。其实这些Server同时也都包括Web Server。Application Server是一种通称。

当然Web Server不是Application Server作为你自己的观点,我是没有意见的。这本身就是一种叫法。我想说的是大部分都是认为Application Server包括Web Server的。
19 楼 fxy1949 2007-10-18  
Yes,Sun haven't explicitly said that,but when they launched JavaFx recently to compete with Adobe Flex,Microsoft Silverlight in Rich Internet Application(RIA) market. Who is going to use Applet any more? Applet hasn't been developed properly by Sun for ages.

The revolutionary point is using declarative script language in JavaFx,like Flex. It's much easier for programming,comparing with Applet development.

I wouldn't agree that you regard Tomcat is one of the Application Server. Or Application Server can be used to refer to web server.
18 楼 triu 2007-10-18  
To:fxy1949

在这里讨论主要是要解决某种问题,但一味的批评对
此没有帮助。1、2点勉强还可以接受,3、4、5就没什
么意义了,请问对于3、4、5你有更好的说法吗?

最后一段纯属发泄,可以删掉。
17 楼 rehte 2007-10-18  
hi fxy1949:
1. Sun从来没有说过要抛弃Applet,事实上JavaFX的部署技术之一就包括Applet。另外,Sun最近要推出的Consumer JRE目的之一就是要复兴Applet。
5. Application Server是一个通称,并不一定特指EJB Container,它实际上即可以指Web Server(Tomcat),也可以指JBoss之类的EJB Container。
16 楼 fxy1949 2007-10-18  
I am very wondering:

1)Nobody tells you that Applet has been discarded by Sun, and replaced by JavaFx now?

2)How come Applet "界面表现性较传统Web页面优势较大"? You are going to give up Explorer,Javascript,Ajax? Do you know the cost and limitation of writing and runing an applet? Not just slow startup.

3)Why are you talking about JSF,if you are going to adopt Applet in client?

4)As for "基于Spring的POJO模型,使用EJB3.0的无状态会话Bean进行方法调用", don't you know EJB3 is POJO+Annotation?

5)Why don't you know JBoss is the first application server that implementats EJB3? Your reasons for choosing application server are unreasonable. Have you tried to use them? Tomcat is an "Application Server"?

15 楼 hyhongyong 2007-10-18  
一定要掌握到灵活与规范化的度,任何一个东西,都有一些约束,约束太少,实现起来太难。
不要把系统做成一个大而全的东西,要懂舍得,有舍才能得。

相关推荐

Global site tag (gtag.js) - Google Analytics