一些主流的架构模式,总结一下:

宏观上讲,我们采用了分层的架构,将软件分为如下的层次:

在具体的实现中,表现层可为Struts/JSF等,业务层、访问层可为JavaBean或EJB等,资源层一般为数据库。

宏观上的层次就是这样,在具体现实中,有如下几种实现形式:

1。轻量级实现

表现层使用基于MVC的框架,比如Struts或JSF

业务层使用JavaBean(就是常说的Service)

访问层使用JavaBean(就是常说的DAO)

优点:

  • 轻量级实现,简单明了

缺点:

  • 难以无法实现分布式应用
  • 以下功能必须通过编程实现
  • 事务控制
  • 资源管理(包括组件的创建)
  • 线程安全问题
  • 安全性

2, 重量级J2EE实现

表现层依然是基于MVC的框架

访问层采用实体Bean实现,如果可能最好采用CMP,实现起来更简洁。此处的实体Bean可以考虑采用本地接口

业务层一分为二,服务控制器可以由会话Bean充当,用来封装业务流程(相当于轻量级实现中的Service),也可以考虑采用本地接口;门面也可以由会话Bean充当(一般来说无状态会话Bean足矣),作为业务层的入口,应该采用远程接口。

优点:

  • 以下功能可由EJB容器自动实现,或通过配置实现
  • 事务控制
  • 远程访问
  • 线程安全
  • 资源管理
  • 安全性
  • 可以进行分布式应用
  • 因为采用了EJB,故部分特征可以由装配人员来配置(比如事务,安全性等),不需要在软件中硬编码
  • EJB组件有更好的重用性
  • 可利用容器提供的其他企业级的功能(比如集群,容错,灾难恢复等)
  • 可以加入MDB(实现异步通讯)等技术

缺点:

  • 开发难度较高
  • 如果不恰当的使用实体Bean,会造成效率低下。如果采用CMP,则很多数据访问的操作不能直接实现。
  • 缺少良好的开发环境
  • 软件可能依赖于具体的EJB容器
  • EJB容器可能很贵,开发软件也可能很贵

3, 轻量级和重量级J2EE的切换

如果项目有需求,并有充分的时间,还可以通过在表现层和业务层的交界处加入“业务代表”(JavaBean + 服务定位器实现)来对表现层隐藏对业务层访问的细节(JavaBean和EJB的访问方式显然不同),只需替换“业务代表”就可以切换轻量级和重量级两种实现。举例说明,一般电话上都有一个P/T开关(脉冲/音频开关),随着开关状态的不同,拨号时电话机会判断是使用脉冲拨号还是音频拨号。

这种架构唯一的缺点就是必须写两套实现代码……

4, 轻量级J2EE实现

访问层通过JavaBean调用ORM框架实现(Hibernate,iBatis等),代码简洁,功能完备(相对于EJB 2.x而言),如果用的是Hibernate,可以忽略底层数据库的差异,如果用的是iBatis,则方便对SQL进行优化。

业务层和访问层依靠AOP框架(如Spring)可以在切面中实现事务,安全性等功能,同时不影响业务代码。如果采用Spring,其中已经内置了事物切面,并可以轻易的与主流ORM框架进行整合,实现声明式的事物管理。当然,更可以使用IoC模式降低组件间的耦合性。

优点:

  • 可以通过AOP框架实现事物、安全性等功能,同时不影响业务代码
  • ORM框架比CMP更灵活,比BMP更简洁(相对于EJB 2.x而言),运行效率也比较高
  • 如果使用Spring,可以用更简单的方式实现J2EE中比较复杂的功能
  • 无需额外的容器
  • ORM和AOP框架可以找到免费的开源实现,降低项目成本(不过也有人认为采用开源项目可能综合成本更高)

缺点:

  • 非官方框架,缺少文档、技术支持和业界经验
  • 采用技术太多,学习曲线较高,难以招到合适的程序员(咱们学员可以考虑在这方面下点功夫,呵呵)
  • 某些企业级的功能轻量级框架还不能实现(或独立实现)
  • 测试、调试均比较复杂

5, 其他另类实现

另类之处:

使用BMP + Hibernate(具体做法为BMP中的持久化方法,比如ejbLoad, ejbStore等都委托给Hibernate实现)

优点:

  • 借助于Hibernate强大的ORM功能弥补CMP的不足(特别是EJB-QL)

缺点:

  • 事物不好控制
  • 不伦不类,容易发生未知的错误(比如Hibernate自身的缓存可能会于容易提供的缓存冲突)

另类之处:

将业务层(也可能包含访问层)包装成Web Services,支持远程调用

优点:

  • 借助于Web Services可以实现松散耦合分布式应用,说的大一点,就是传说中的SOA,呵呵

缺点:

  • Web Services自身效率不高,无状态,安全性差

J2EE开发架构大总结相关推荐

  1. J2EE开发常用架构及其性能

    web开发中,因应用所属行业领域不同,对系统架构的选择也不同,系统架构决定了整个系统性能 和其他各种技术指标. J2EE开发中,通常选用以下三种架构: 1,SSH 即spring+struts+hib ...

  2. 物联网大数据平台软件开发架构案例解析

    物联网大数据平台软件开发架构案例解析 有人说物联网是引领信息技术的第三次浪潮. 第一次浪潮是个人电脑的出现,开创了信息时代的第一次革命,此次浪潮成就了微软.IBM等巨头. 第二次浪潮是以信息传输为特征 ...

  3. 并发编程知识总结,软件开发架构,socket套接字模板,粘包问题,struct解决粘包问题,上传大文件数据,socketserver,关于操作系统的发展史,进程,线程。...

    并发编程知识总结 软件开发架构 C/S: client:客户端 server:服务端 优点:占用网络资源少,软件的使用稳定 缺点:服务端更新后,客户端也要更新,需要使用多个软件,需要下载多个客户端 B ...

  4. J2EE Java黑客大曝光:开发安全的Java应用程序

    J2EE Java黑客大曝光:开发安全的Java应用程序 本书首先从Java及J2EE体系结构和基本安全机制入手,阐述Java认证和授权服务.Java密码系统扩展和Java安全套接字扩展等安全包,书中 ...

  5. 大数据平台开发:大数据系统架构模块解析

    企业要开展大数据相关业务,首先就需要基于自身的需求,来设计搭建数据系统平台.而大数据系统平台的搭建,需要基于实际需求,来进行系统架构规划.今天我们就从大数据平台开发的角度,来对大数据系统架构模块做一个 ...

  6. 分享一个 物联网大数据平台软件开发架构案例

    物联网大数据平台软件开发架构案例解析 有人说物联网是引领信息技术的第三次浪潮. 第一次浪潮是个人电脑的出现,开创了信息时代的第一次革命,此次浪潮成就了微软.IBM等巨头. 第二次浪潮是以信息传输为特征 ...

  7. ASP.net与PHP两大网站开发架构优势对比

    同是目前主流的网站开发架构,ASP.net与PHP各有哪些技术特点呢?他们分别适用于哪些不同的环境中呢? ASP.net架构优点 首先ASP.net架构,由于是编译语言,相对来说性能比PHP稍微高一些 ...

  8. 5月以来的学习,软件工程+设计模式+J2EE开发+portal开发,以及SOA技术

    5月以来,学习的主要精力放在了 软件工程,设计模式,J2EE开发,portal开发,以及SOA技术 效果还算不错,自认为都学得比较全面, 特别是在J2EE上的开发,感觉自己就像有3年以上的经验似的,从 ...

  9. 如何使用JCA (J2EE 连接器架构)实现企业应用--转载

    JCA (J2EE 连接器架构,Java Connector Architecture)是对J2EE标准集的重要补充.因为它注重的是将Java程序连接到非Java程序和软件包中间件的开发.连接器特指基 ...

最新文章

  1. 图论 ---- CF1495D .BFS Trees(图论最短路生成树+枚举计数+树的层次性)
  2. [错误收录] the pyflakes.vim plugin requires Vim to be compiled with +python
  3. 超详细单机版搭建hadoop环境图文解析
  4. 网络***技术开篇——SQL Injection
  5. 将FORMSTYLE类型由FSNORMAL变为FSMDICHILD时,窗体的VISIBLE自动设为TRUE.且create之后,自动运行onshow事件。
  6. 你在做大数据?你有目标么?
  7. webpack 引入css link,demo11 webpack处理css
  8. wxml代码支持js代码吗_如何取胜:代码支持者的建议
  9. 显示和隐藏菜单栏(两种方式div、table)
  10. IntelliJ IDEA 配置Tomcat 运行Web项目
  11. Sentinel系统规则_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0044
  12. sass-loader高版本的坑
  13. 读《Redis入门指南》2
  14. Windows常用密码的破解方法
  15. 20155236 《信息安全概论》实验二(Windows系统口令破解)实验报告
  16. chrome打不开plugins
  17. 读史可以明智_在开发中明智思考的5种方法
  18. SpaceSyntax【空间句法】之DepthMapX学习:第一篇 数据的输入 与 能做哪些分析
  19. 基于WPS的在线编辑服务【.net Core 3.1】
  20. VS2015打开编译VS2013工程时提示fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory

热门文章

  1. 操作系统课程设计-线程和进程的同步与互斥
  2. bzoj2716 [Violet 3]天使玩偶(KDtree)
  3. (一)unity shader在实际项目中出现的问题————unity的后处理插件景深效果在某些低档机(如三星)无效的解决方案
  4. java++biginter_Java中的BigInteger在ACM中的应用
  5. spring源码解析(二) @Autowired自动注入过程
  6. 计算机图形学基础:实验5 OpenGL二维几何变换
  7. 【云小课合集】华为云小课最全合集来了,让您上云无忧
  8. php重定向 .htaccess,.htaccess重定向和url重写
  9. 用两种遍历方法判断图中两点是否有路径
  10. librtmp改成异步