`
xiaozhonghua
  • 浏览: 250865 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

免费ERP第一锤:用Swing这个可以

阅读更多


前面几篇《Swing大刀》的探讨,引起了大家对Swing技术的兴趣,也引来了不少的口水和砖头。最近在JavaEye上已经可以看到不少高质量的Swing讨论和应用介绍,这已经是很大的变化。不过更多的同学对Swing的应用还是比较茫然甚至怀疑:Swing能做大型应用么?今后我想讨论一些Swing在大项目中实践,是更有意义的事情,总比单纯的技术口水要有聊一些。

 

这些年大家都在说:Swing学起来费劲,用的也不多,见到的应用也不多,能做大型应用么?最近还有朋友看了几刀之后就说,哎呀快去学Swing吧,做东西好漂亮!其实这不仅让人哭笑不得:几年前大家还是一边倒的打骂Swing太丑,都说Flex啥的漂亮,突然有人夸起Swing做东西漂亮来了,还真很不适应。还有人说,Swing快不行了,Sun也不行了,Oracle也不行了....其实在他们眼里,也许Java也不行了,软件开发也不行了....那到底Swing做大应用能行吗?通过自己参与的项目经验来说:这个真的行!

 

这几年一直在做Swing的开发,有幸参与了公司一个大型的ERP项目。这个ERP项目规模很大,我的NetBeans工程里就有150多万行代码,还不包括其他小组的分支模块。前端除了桌面客户端外,还有浏览器和手机终端,不过最重要的还是Swing版的桌面客户端。这个Swing版的ERP客户端开发了已经7年多了,JDK从1.3一直升级到现在的1.6,IDE也从IDEA、JBuilder到Eclipse、NetBeans。不过核心框架一直没有什么大变化,应用也比较成熟。

 

这是一个大型的ERP系统,典型的C/S结构,也混合了一些B/S结构和手机终端的模块,不过主要内容还是在庞大的后端和Swing的前端。后端主要用J2EE架构搭建,通过JBoss应用服务器和MySQL数据库,Hibernate做O/R,自己封装DAO层以及Business层控制业务逻辑,再用Ejb进行业务API封装。最后,通过一个Facade层的EJB(后来改造成Servlet)对外提供统一的访问接口。这个接口也是整个后台唯一的访问接口,这个“一夫当关、万夫莫开”的入口处,再插入登录和会话管理、安全控制、日志记录、请求分发等机制,干净简洁。通讯协议,以前通过EJB和IIOP的协议开放API提供远程调用,后来发现EJB的通讯非常异常繁琐和“重”,各种控制比较复杂,效率也不好。后期版本改造为用一个Servlet封装对外提供接口,协议也变成了HTTP。这样,后台通过一个80端口,以类似WEB的方式统一提供前端的API访问。对很多人来讲,这个方式可能有点奇怪:Swing的胖客户端,还用HTTP的WEB协议来访问后台。嘿嘿,其实这一招不错哦,仔细琢磨一下会体会到其妙处。

 

前台是一个完整的Swing程序,也是通过层层封装,提供了一层与服务器一一对应的API访问层,最后通过一个统一的代理类,对后台进行访问。通过HTTP如何传输Java对象呢?我们没有使用Web Services之类的技术,而是直接把要调用的方法以及参数等信息序列化,以HTTP方式提交后台,后台通过模块分发、反射的方式执行函数后, 把结果数据进行序列化,再经过压缩,通过HTTP返回客户端。客户端将数据解压、反序列化,将对象再返回API的调用者(如各个界面、按钮等)。这个结构非常高效、可靠。甚至包括函数的异常等,都可以通过序列化进行传递。

 

通过HTTP的方式,服务器不再需要防火墙开放更多端口,和web应用一样,一个80就行了。另外,和web传递html等信息不同,这种结构下,中间传递的就是压缩过的Java对象序列化后的字节流,其效率是很高的。客户端是胖结构,自然可以处理更多的数据处理和呈现,比浏览器也有优势,很合适ERP这种企业应用。轻量、高效的结构也提供了很好的业务支撑能力:一台普通的台式机可以提供100个ERP用户同时在线、比较流畅的使用。这对于没有专门预算购买专业服务器和建设机房的企业来说,是非常给力的。

 

至于Swing的客户端是否能做的好看,这个就要看是否用心了。只要用心,什么UI技术其实都无所谓,都可以做出漂亮的应用。这里提供两张贴图,是否好看还是仁者见仁、智者见智了。

 


 

 

通过这两年的Swing开发,也总结了一点经验,和大家分享:

 

  • Swing入门较高,有一定的学习曲线。企业在选择是否采用Swing技术之前,一定要分析是否合适自己的团队。如果没有一个半个Swing比较好的骨干带领,Swing的复杂度很容易让整个项目代码失控,最后变成一个“好大好大好大的垃圾堆”。
  • 代码要尽量一层一层的搭框架,不断的重构、优化、复用,不可每个人按照自己喜好自搞一套,否则很容易失控;代码和风格甚至开发工具都要尽量一致,避免维护的麻烦。
  • 找一个好的美工。美工设计很重要,他(她)会从不同于程序员的眼光来创建和设计UI,我们一定要尊重美工的设计思路,不要轻易指手画脚、大放厥词。术业有专攻,要知道,在美术方面咱们程序员大多是小学生水平。一旦设计风格确定,就严格按照统一的风格进行开发,每一个对话框、每个按钮、每个图标。让一个ERP中成千上万的对话框都“如出一辙”确实不易,不过应当是目标。
  • 永远从“用户”角度设计UI。开发UI也是设计的过程,美工没可能把一个ERP系统中成千上万的对话框都设计出来,程序员这时候就是半个美工、半个用户。让大脑里时刻存在一个“用户”并时刻敲打自己:这个界面好用吗?这个报表能看懂吗?这个按钮位置合适么?做软件就像盖大楼,地基结实固然重要,窗户密封性就不重要了吗,外墙涂料就不重要了吗?要做百年屹立的优质工程,就得处处关注细节。别忘了房子是用来住的,软件是用来用的。
再对这个ERP简单介绍一下。这是一个专门针对制造行业设计的大型ERP,模块涵盖工程设计控制、图纸、物料、物料清单、采购、销售、库存、MRP、生产、工单、质量、财务、客户服务、人事、安全等等。尤其适合“按单生产”类型的离散型制造企业。用户有Wexford、Whetherford等国际巨头,也有中海油这样的大型国企,更多的是中小企业,我还碰到过只有一台电脑的私人老板,也在用我们的ERP,而且用的还很不错,很匪夷!

最后再说一个难以置信的事实:这是一个免费软件。呵呵,这年头,ERP软件都可以免费,没错,完全彻底的免费,自己玩、商用、学习.......随便啦。

感兴趣的朋友到网站拖一个下来耍耍,希望会对Swing的能力信心爆棚。不过中文版还在紧张翻译中,需要一段时间才能提供下载。先玩玩英文版吧,相信大家的英文都可以应付。网站是:www.2bizbox.com,点击就能下,不需要注册。

 

补充:上面有两个下载:一个是exe的setup安装,一个是直接解压即可运行的zip包。后台其实也可以跑在linux等上面,启动脚本需要自己写一下了。

 

欢迎喜欢Swing和ERP的朋友一起探讨,祝大家元旦快乐!


前几天菜市场买了一个风信子,开始水培。



 
 
  • 大小: 142.5 KB
  • 大小: 132 KB
  • 大小: 136 KB
分享到:
评论
46 楼 luojihaidao 2011-07-17  
没有像楼主这样的人才了。
45 楼 stronglong 2011-01-28  
拉风啊,前几天正在说如果手机查库存的事情,这会都有了。
44 楼 chensiyu04 2011-01-28  
下载了。。英文的。。期待中文
43 楼 xiaozhonghua 2011-01-07  
findhappy7 写道
多数人下载看看而已,,,过几天就忘记了

嗯,确实会是这样。不过至少有一天用到了可以想起来再看看,用来了解一下什么是ERP也是很好的,呵呵
42 楼 findhappy7 2011-01-06  
多数人下载看看而已,,,过几天就忘记了
41 楼 runopen 2011-01-06  
终于下载好了
40 楼 xiaozhonghua 2011-01-04  
runopen 写道
Firefox can't establish a connection to the server at www.2bizbox.com.
服务器挂了?

好像服务器已经好了,再试试!
39 楼 runopen 2011-01-04  
Firefox can't establish a connection to the server at www.2bizbox.com.
服务器挂了?
38 楼 hatedance 2011-01-04  
1 关于RPC选择,我觉得不是重点。客户感觉不到,开发者考虑开发效率,在性能不是大问题的情况下,选择大家最熟悉的技术最好。在java里,其实定义好interface。具体的实现方式可以随便换,大家懂的。
2 关于好看与否,如果要应用开发者处处为了这个分心那也是不值得的,他们想要的就是选一个合适的组件,把它们对齐就差不多了。最好是有一个类似XP主题这样的组件,一劳永逸解决这样的需求,在swing里叫look&feel是吧?我看楼主的这个erp也是这么做的,整个MDI框架考虑了美观,比如左边的类outlook组件,以及toolbar,menubar之类。但具体到某个子窗体,就也很朴实了。
3 一个servlet提供所有的API,那是多少个函数啊?又要吓到N多小朋友了。
37 楼 mybw7601 2011-01-04  
不知道是否有开源的打算
36 楼 wxwdt 2011-01-04  
下载很慢呀,哪位能传一个呀!
35 楼 chensiyu04 2011-01-04  
哈哈哈....哈哈哈哈...好..很好..非常的好...无比的好....好东西...
34 楼 oakeye 2011-01-04  
hantsy 写道
zhajie 写道
eredlab 写道
年度巨献啊  抓回来看看!偶有一个EclipseRCP(SWT/JFace)+JEE(中间通过Httpinvoker通信)的计划。不知楼主对这种方式有心得否?


中间层还可以采用hessian,ejb通信。hessian比较推荐,因为他的前端可以不限于使用java,.net,delphi都可以用。

我觉得还是用 REST的方式比较理想,完全将客户端和服务器分开,而REST 服务器端 API为 REST Producer,桌面程序,手机内置界面(或HTML5界面)和Web界面程序都可以作为REST Comsumer。

我打算把自己以后做的小东西都弄成这种
33 楼 oakeye 2011-01-04  
引用
前台是一个完整的Swing程序,也是通过层层封装,提供了一层与服务器一一对应的API访问层,最后通过一个统一的代理类,对后台进行访问。通过HTTP如何传输Java对象呢?我们没有使用Web Services之类的技术,而是直接把要调用的方法以及参数等信息序列化,以HTTP方式提交后台,后台通过模块分发、反射的方式执行函数后, 把结果数据进行序列化,再经过压缩,通过HTTP返回客户端。客户端将数据解压、反序列化,将对象再返回API的调用者(如各个界面、按钮等)。这个结构非常高效、可靠。甚至包括函数的异常等,都可以通过序列化进行传递。

那如果相对的客户端是web的,数据是怎样传输的?不可能还是把java对象序列化传输吧?那是什么格式呢xml?json?
32 楼 luorongda 2011-01-04  
cantellow 写道
我来说一下
各位下了zip不能解压,下了exe不能安装的是不是用的迅雷?
我开始也是用迅雷7下了zip和exe,都不能正常使用。
后来一狠心,用chrome下载zip,等了5个小时,终于能够正常解压并运行。
整个过程漫长难熬,让我坚持下来的是好奇心也是兴趣。
PS,楼主,我想学习一下你这个东西,貌似找到好多jar包都是Apache的,没有看到源代码呀。
还有就是,楼主既然对Apache那么了解,为什么不采用Apache的activeMQ,而采用http方式?
另外,我对客户端和服务器序列化压缩机制很感兴趣,楼主能不能详细介绍下


恩.用的就是迅雷,
今天再访问,


31 楼 keer2345 2011-01-04  
还真是年度巨献呢,谢谢
30 楼 cantellow 2011-01-03  
我来说一下
各位下了zip不能解压,下了exe不能安装的是不是用的迅雷?
我开始也是用迅雷7下了zip和exe,都不能正常使用。
后来一狠心,用chrome下载zip,等了5个小时,终于能够正常解压并运行。
整个过程漫长难熬,让我坚持下来的是好奇心也是兴趣。
PS,楼主,我想学习一下你这个东西,貌似找到好多jar包都是Apache的,没有看到源代码呀。
还有就是,楼主既然对Apache那么了解,为什么不采用Apache的activeMQ,而采用http方式?
另外,我对客户端和服务器序列化压缩机制很感兴趣,楼主能不能详细介绍下
29 楼 xiaozhonghua 2011-01-03  
amnotsuperior 写道
2bizbox-allinone-3.0.0.zip   230M   没法解压,查看也失败

我下载可以解压,大小是230 MB (241,441,379 bytes),看是否一致?或许是网络问题,也可以重新下一次试试。也可以下setup.exe,安装后把安装目录copy到linux也可以直接使用。
28 楼 amnotsuperior 2011-01-03  
2bizbox-allinone-3.0.0.zip   230M   没法解压,查看也失败
27 楼 xiaozhonghua 2011-01-03  
amnotsuperior 写道
winrar : 无法 作为压缩文件打开

奇怪,文件大小看一下是多少?大家都无法打开吗?

相关推荐

Global site tag (gtag.js) - Google Analytics