框架之轻量级和重量级
框架体系知识点总结
框架体系知识点总结一、框架概述1.1 框架定义1.2 框架特点1.3 框架分类二、框架体系结构2.1 框架组成2.2 框架层次2.3 框架模式三、框架设计原则3.1 抽象原则3.2 封装原则3.3 继承原则3.4 多态原则四、常用框架介绍4.1 Spring框架4.2 Hibernate框架4.3 Struts框架4.4 框架4.5 Django框架五、框架应用实例5.1 Web开发框架应用5.2 移动端应用框架实践5.3 大数据框架应用案例5.4 人工智能框架应用场景六、框架技术发展趋势6.1 微服务框架6.2 前端框架发展趋势6.3 容器化框架6.4 人工智能开发框架七、框架体系的扩展7.1 插件化框架7.2 模块化框架7.3 可扩展性框架八、框架体系实践经验8.1 项目选择框架考虑因素8.2 框架组件选择与适配8.3 框架应用性能优化8.4 框架升级与维护以上是框架体系知识点总结的框架,接下来对每个部分进行详细的介绍。
一、框架概述1.1 框架定义框架是一种软件体系结构,它提供了开发应用程序所需的基础结构。
框架通常包括设计模式、类库、工具和其他组件,以及规定了开发过程中使用的约定和标准。
1.2 框架特点- 通用性:框架是通用的,可以用于不同领域的应用开发。
- 可重用性:框架中的组件和设计模式可以被多次使用。
- 优化性能:框架提供了经过优化的设计模式和算法。
- 易维护性:框架提供了模块化的设计,易于维护和扩展。
- 标准化:框架约定了开发过程中的标准和规范。
1.3 框架分类- 按应用领域分类:Web框架、移动端框架、大数据框架、人工智能框架等。
- 按语言分类:Java框架、.NET框架、Python框架、JavaScript框架等。
- 按设计模式分类:MVC框架、RESTful框架、ORM框架等。
二、框架体系结构2.1 框架组成一个完整的框架通常包括以下组成部分:- 核心组件:框架的基本组件和核心功能。
IPD集成产品开发体系
IPD集成产品开发体系目录1.基本介绍2.IPD框架3.IPD项目管理4.IPD-SE三个最常见的概念−Product Data Management产品数据管理,是一门用来管理所有与产品相关信息PDM PLM IPD(包括零件信息、配置、文档、CAD文件、结构、权限信息等)和所有与产品相关过程(包括过程定义和管理)的技术−Product Lifecycle Management产品生命周期管理,PLM是对产品从创建、使用,到最终报废的全生命周期的产品数据信息进行管理的理念。
−PLM强调对产品生命周期内跨越供应链的所有信息进行管理和利用。
PLM软件产品的价值重点在于与ERP、SCM、CRM的集成使用−Integrated Product Development集成产品开发,是一套产品开发的模式、理念与方法。
−IPD是E2E的开发模式,包括产品开发的组织、流程、绩效等方面.IPD是站在整个公司的角度进行产品研发体系的IBM 自身案例:通过实行IPD 改变了产品与市场的脱节的局面,使IBM 的产品重新具备了市场竞争力IBM 面临的问题IBM 对产品研发的要求研发原因缩短上市时间 市场表现产品上市时间长提高赢单的比例 销售收入停止增长提高重用度,降低成本减少中途废止项目的数量配套产品开发的项目管理方法研发费用高利润急剧下降研发损失费用高IPD的思想精髓是将产品研发从关注产品的研发过程转变为关注市场,关注满足客户需求产品开发是一项投资决策−强调对产品开发进行投资组合分析,并在开发过程设置检查点,通过阶段性评审来决定项目是继续、暂停、终止还是改变方向−强调产品创新一定是基于市场需求和竞争分析的创新,把正确定基于市场的开发组织义产品概念、市场需求作为流程的第一步,开始就把事情做正确跨部门、跨系统的协同−采用跨部门的产品开发团队,通过有效的沟通、协调以及决策,达到尽快将产品推向市场的目的−就是通过严密的计划、准确的接口设计,把原来的许多后续活动并行开发模式结构化的流程提前进行,这样可以缩短产品上市时间流程−产品开发项目的相对不确定性,要求开发流程在非结构化与过于结构化之间找到平衡1.基本概念2.IPD框架3.IPD项目管理4.IPD-SE流程Product Requirement Management DCP Decision Check Point 决策评审点 PRM 产品需求管理 CDCP Concept DCPPDCP Plan DCP概念决策评审点 计划决策评审点 RAT RMSE Risk Analysis Tool 风险分析工具需求管理Requirement Management System Engineering/Engineer Transition Decision Check PointTDCP 移交决策评审点 系统工程/系统工程师 可获得性决策评审 点ADCP Availability DCPAR Allocated Requirements 分配需求EOL DCP TR End Of Lifecycle Decision Check Point生命周期终止评审 点DR DS Design RequirementDesign Specification设计需求(开发需求) 设计规格Technical ReviewInvestment Review Board 技术评审IRB 投资评审委员会 BBIT Building Block Integration and Test 构建模块集成和测试DFMDesign For Manufacturability可制造性设计 Integrated Portfolio Management Team IPMT 集成组合管理团队Design For Manufacture and可制造性及可安装性 设计 DFMA AssemblyDFTDFX CBB Design For Testability Design for x-abilityCommon Building Block可测性设计 Integrated Technology Management TeamITMT 集成技术管理团队 工程特性专项设计 共用基础模块 PDT Product Development Team 产品开发团队 CCB Change Control Board变更控制委员会 Technology Development 技术开发团队TDTTeamCMO Configuration Management Officer 配置管理员IPD 框架投资评审委员会(IRB)市场管理MM以往策略 市场信息 客户反馈竞争对手信息 技术趋势 目前产品组合执行产制定业 品组合务策略 分析与计划 优化 业务 计划了解 市场细分 市场管理业务计划、评估绩效集成组合管理团队(IPMT)IPD 流程任务书材 料包 概念 计划 开发 验证 发布 生命周期Charter Package在研发组织设计上,IPD 把产品开发视为一项投资,通过IRB 、IPMT 、 PDT 三级组织确保产品开发能满足市场预期收益要求投资评审委员会(IRB)−制定公司战略,负责战略决策−确定投资项目的优先次序和商业目标 −批准项目投资和开发预算−授权IPMT 负责进行产品开发管理,并 检查IPMT 的工作通常一个公司会有一个IRB ; 每个独立的产品线/BU 会有 一个IPMT−关注:公司收入、投资回报、市场份 额、客户满意度… …集成组合管理团队(IPMT)−对开发项目的商业前景进行分析,并向IRB 汇报−对项目的关键评审点(DCP )负责,对项目的继续、 停止、转向做出决策−授权PDT 进行产品开发,并对PDT 进行管理和考核 −关注:产品线收入、产品路标、客户满意度… …产品开发团队(PDT)IPD开发组织的设计是以产品为中心,由相关功能角色参与的跨部门、矩阵式架构−IRB、IPMT、PDT、LMT都是跨部门的组织,切忌把行政组织直接作为IPD定义的组织跨部门团队的好处依据各职能部门代表在项目组中的权责不同,通常可分为“轻量级”和“重量级”两种模式轻量级重量级−在项目组内是职能部门的联络人,工作任务的分配由职能部门主管负责−对项目任务的交付情况承担次要的责任−在项目组内作为职能部门的全权代表,对项目任务的交付情况直接负责−与部门主管保持必要的联系职能部门组员角色职能部门主管角色项目经理角色−给组员提供必要支持来完成项目交付的任务−必要时针对重要事项与项目经理直接沟通、协调−接收项目任务,组织相应人员完成−对项目任务的交付情况负责−负责人,直接管理组员的工作和交付情况。
spring
轻量级与重量级概念的划分
经常会有同学问到spring属于轻量级框架,还是重量框架?其实划分一个应用是否属于 轻量级还是重量级,主要看它使用了多少服务.使用的服务越多,容器要为普通java对 象做的工作就越多,必然会影响到应用的发布时间或者是运行性能.
对于spring容器,它提供了很多服务,但这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明 使用该服务,如果应用使用的服务很少,如:只使用了spring核心服务,那么我们可以认为此时应用属于轻 量级的,如果应用使用了spring提供的大部分服务,这时应用就属于重量级。目前EJB容器就因为它默认 为应用提供了EJB规范中的所有功能,所以它属于重量级。
使用Spring,不再需要我们处理复杂的事务传播行为
使用Spring,我们只需要通过声明式的事务属性配置就可以轻松地实现这两种业务需求 1.要求Bean1.update()和Bean2.save()的在同一个事务中执行 2.要求不管Bean1.update() 的事务是否成功,都需要记录日志。 @Transactional(propagation=Propagation.Required) public void payment(){ Bean1.update();//更新金额 Bean2.save();//记录日志 }
使用dom4j读取spring配置文件
public class xxxClassPathXmlApplicationContext { private List<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>(); public xxxApplicationContext(String filename){ init(filename); } private void init(String filename){ SAXReader saxReader = new SAXReader(); Document document=null; try{ URL xmlpath = this.getClass().getClassLoader().getResource(filename); document = saxReader.read(xmlpath); Map<String,String> nsMap = new HashMap<String,String>(); nsMap.put("ns","/schema/beans");//加入命名空间 XPath xsub = document.createXPath("//ns:beans/ns:bean");//创建beans/bean查询路径 xsub.setNamespaceURIs(nsMap);//设置命名空间 List<Element> beans = xsub.selectNodes(document);//获取文档下所有bean节点 for(Element element: beans){ String id = element.attributeValue("id");//获取id属性值 String clazz = element.attributeValue("class"); //获取class属性值 BeanDefinition beanDefine = new BeanDefinition(id, clazz); beanDefines.add(beanDefine); } }catch(Exception e){ e.printStackTrace();
C++库介绍
在C++中,库的地位是非常高的。
C++之父Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。
现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。
不少都是让人眼界大开,亦或是望而生叹的思维杰作。
由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。
所以文中所提的一些库都是比较著名的大型库。
【GUI】在众多C++的库中,GUI部分的库算是比较繁荣,也比较引人注目的。
在实际开发中,GUI库的选择也是非常重要的一件事情,下面我们综述一下可选择的GUI库,各自的特点以及相关工具的支持。
1、MFC大名鼎鼎的微软基础类库(Microsoft Foundation Class)。
大凡学过VC++的人都应该知道这个库。
虽然从技术角度讲,MFC是不大漂亮的,但是它构建于Windows API 之上,能够使程序员的工作更容易,编程效率高,减少了大量在建立Windows 程序时必须编写的代码,同时它还提供了所有一般C++ 编程的优点,例如继承和封装。
MFC 编写的程序在各个版本的Windows操作系统上是可移植的,例如,在Windows 3.1下编写的代码可以很容易地移植到Windows NT 或Windows 95 上。
但是在最近发展以及官方支持上日渐势微。
2、QT参考网站:Qt是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。
它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。
Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。
自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。
Qt也是流行的Linux桌面环境KDE 的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。
3、WxWindows参考网站:跨平台的GUI库。
因为其类层次极像MFC,所以有文章介绍从MFC到WxWindows 的代码移植以实现跨平台的功能。
框架之轻量级和重量级
框架之轻量级和重量级一:基本概念:量级主要是看容器的依赖性所决定的,依赖性越小,越轻量.1、轻量级框架1.定义:在Java应用程序开发环境中,“轻量级Java”主要是指两个东西:简化的编程模型和更具响应能力的容器。
轻量级Java旨在消除与传统J2EE API有关的不必要的复杂性和限制。
它也将缩短应用程序的部署时间,这对于支持开发最佳实践(比如频繁单元测试)非常重要。
2.现在比较重要的轻量级以及对终端用户的帮助:控制反转(IoC)模式在这个领域有着重大的影响。
使用IoC,开发人员不需要编写复杂的代码来执行查询、处理基础架构异常或管理连接,就能够解决对象依赖性问题。
这有助于简化代码、将业务逻辑与基础架构分离,从而使应用程序更易于维护。
轻量级Java的另一个关键特征是,它不会强迫业务对象遵循平台特定接口。
这允许开发人员在普通旧式Java对象(POJO)中实现业务逻辑,从而提高生产率。
与具体的类相反,当把开发的最佳实践与界面相结合时,这些特性也使得对代码进行单元测试容易得多。
由于业务逻辑实现在POJO中,所以不再需要将对象部署到重量级容器中以在单元测试中练习它。
因此,将对象宿主在诸如JUnit之类的简单测试环境中和为快速迭代单元测试“模拟”外部依赖性就变得微不足道了。
3.现在典型的轻量级框架:Struts、Hibernate、Spring、Beehive.....注:感觉转向轻量级技术越来越猛了,传统的重量级EJB也推出EJB3.0也基本上是以使得轻量级Java盛行的概念为基础。
2、重量级框架dev2dev:人们在想起应用服务器供应商时,通常把它们置于“重量级阵营”。
我想您正在努力改变这种状况,对吧?换言之,许多人认为应用程序供应商已经在实现重量级组件(比如EJB2.0)上付出了很大的代价,它们不愿意轻易放弃这些成果。
Jim:首先,我认为没有理由放弃在EJB上的现有投资,因为在某些场景中它仍然是最好的技术,例如当您希望通过RMI远程公开业务服务时。
电信API:轻量级模式重量级功能
天 , 面 对 用 户 消 费 模 式 的 变 迁 大 潮 ,互 联 网 的 骨 灰 级 创 新 模 式 以 及 新 媒 体 的 广 泛 传 播 ,甚 至 还 有 I 厂 商 、 内 容 整 合 者 与 消 费 电 子 厂 商 向运 T 营 领 域 的 渗 透 ,运 营 商 正 以积 极 、融 合 、开 放 的 态 度 ,努 力 尝 试 开 放 其 电信 能 力 , 发 挥 第 三
WWW.t .om r g7 tm c cl
表 1 全 球 运 营商 开 放 电信 能 力行 动
公司 计 划 说 明
at l &
d 、 n a e( t I , r
建立 了包含3 个级别的成 员计划 、a& ̄ 证计划 、A p B t客户测试与反馈计划:广 泛的设备支持 ,开 tt X p s ea 放 消息 、定位和家长控制等电信 能力 ; 是We 2 E 1 b R s仪ML P 以及G M e P的支持者 0 I A S AOn A I
Or g a e n
P r e a nr t
针 对多种第三 方支持的大型 计划 ,已经 有 6 万多名成员 ,包含两个级 别的成员 :AP类 型广泛 ,包括 I S S M 、点击 呼叫、定位 、电子邮件 、语音 邮件和多媒体会议等 开放式发 展倡议 ( D ) O I 主要面 向大型企业开发商 .采用的形式是对应用和设备进行认证。联 合创新实验 室 { I 还吸g 了S f a k JL) l o b n 、中国移动 以及沃达丰的参与 , 在处于测试阶段 ,主要 目标在于提供开发 现 商支持 、S K D 和测试 计划、We 2  ̄ g t 用商店 b . d e的应 0V
偏向锁、轻量级锁、重量级锁
偏向锁、轻量级锁、重量级锁为了换取性能,JVM在内置锁上做了⾮常多的优化,膨胀式的锁分配策略就是其⼀。
理解偏向锁、轻量级锁、重量级锁的要解决的基本问题,⼏种锁的分配和膨胀过程,有助于编写并优化基于锁的并发程序。
内置锁的分配和膨胀过程较为复杂,限于时间和精⼒,⽂中该部分内容是根据⽹上的多⽅资料整合⽽来;仅为⽅便查阅,后⾯继续分析JVM源码的时候也有个参考。
如果对各级锁已经有了基本了解,读者⼤可跳过此⽂。
隐藏在内置锁下的基本问题内置锁是JVM提供的最便捷的线程同步⼯具,在代码块或⽅法声明上添加synchronized关键字即可使⽤内置锁。
使⽤内置锁能够简化并发模型;随着JVM的升级,⼏乎不需要修改代码,就可以直接享受JVM在内置锁上的优化成果。
从简单的重量级锁,到逐渐膨胀的锁分配策略,使⽤了多种优化⼿段解决隐藏在内置锁下的基本问题。
重量级锁内置锁在Java中被抽象为监视器锁(monitor)。
在JDK 1.6之前,监视器锁可以认为直接对应底层操作系统中的互斥量(mutex)。
这种同步⽅式的成本⾮常⾼,包括系统调⽤引起的内核态与⽤户态切换、线程阻塞造成的线程切换等。
因此,后来称这种锁为“重量级锁”。
⾃旋锁⾸先,内核态与⽤户态的切换上不容易优化。
但通过⾃旋锁,可以减少线程阻塞造成的线程切换(包括挂起线程和恢复线程)。
如果锁的粒度⼩,那么锁的持有时间⽐较短(尽管具体的持有时间⽆法得知,但可以认为,通常有⼀部分锁能满⾜上述性质)。
那么,对于竞争这些锁的⽽⾔,因为锁阻塞造成线程切换的时间与锁持有的时间相当,减少线程阻塞造成的线程切换,能得到较⼤的性能提升。
具体如下:当前线程竞争锁失败时,打算阻塞⾃⼰不直接阻塞⾃⼰,⽽是⾃旋(空等待,⽐如⼀个空的有限for循环)⼀会在⾃旋的同时重新竞争锁如果⾃旋结束前获得了锁,那么锁获取成功;否则,⾃旋结束后阻塞⾃⼰如果在⾃旋的时间内,锁就被旧owner释放了,那么当前线程就不需要阻塞⾃⼰(也不需要在未来锁释放时恢复),减少了⼀次线程切换。
拳击擂台上的比赛类别
拳击擂台上的比赛类别在拳击擂台上,各种不同的比赛类别为观众带来了激烈的对决和精彩的表演。
这些类别根据选手的体重、技术水平和年龄等因素来划分,以确保公平竞争和保护运动员的安全。
本文将介绍几种常见的拳击比赛类别,包括重量级、轻重量级、中量级、轻量级和次轻量级。
一、重量级重量级是拳击比赛中最高级别的类别,也是最令人瞩目和关注的。
选手在比赛前称重,其体重上限根据不同的拳击组织或协会而异。
根据国际拳击协会(IBF)的规定,男子重量级选手的上限是200磅(约90.7公斤),女子则是175磅(约79.4公斤)。
重量级比赛往往具有极高的破坏力和威力,选手们拥有出色的体能和打击技巧。
重量级比赛也是赛场上最受瞩目的,著名的拳王如穆罕默德·阿里、迈克·泰森等都曾在这个类别中崭露头角。
二、轻重量级轻重量级是拳击比赛中肉眼可见的重量级别,选手的体重在重量级和中量级之间。
根据世界拳击协会(WBA)的规定,男子轻重量级选手的上限是175磅(约79.4公斤),女子则是160磅(约72.6公斤)。
轻重量级选手既具备重量级选手的力量,又具备中量级选手更灵活的特点。
他们通常拥有出色的技术和速度,能够在擂台上展现出多样的拳击风格,给观众带来绚丽的比赛。
三、中量级中量级是拳击比赛中体重较轻的一个类别。
男子中量级选手的上限根据不同的拳击组织而异,一般在160磅(约72.6公斤)左右。
而女子中量级的上限通常为154磅(约69.9公斤)。
中量级选手拥有灵活性和爆发力,他们可以在比赛中快速躲避对方的攻击并做出有效的还击。
在中量级比赛中,选手们会展现出精准的打击技巧和出色的身体控制能力。
四、轻量级轻量级是拳击比赛中体重较轻的一个类别,男子轻量级选手的上限一般在135磅(约61.2公斤)左右,女子轻量级的上限通常为132磅(约59.9公斤)。
轻量级选手通常拥有较高的速度和敏捷性,他们具备出色的反应能力和灵活的拳击技巧。
轻量级比赛往往非常激烈和技术性较高,选手们会以迅猛的攻击和快速的躲避技巧来争夺胜利。
轻量级锁和重量级锁的区别?
轻量级锁和重量级锁是在并发编程中用于实现线程同步的两种不同的锁机制,它们的主要区别在于锁的获取和释放的开销和效率。
1. 轻量级锁(Lightweight Locking):
- 锁状态:轻量级锁是在对象头部分使用CAS(Compare-and-Swap)操作来实现的。
当一个线程尝试获取轻量级锁时,它会将对象头中的一部分数据复制到线程的栈帧中,并将对象头部分替换为指向栈帧的指针。
- 锁的竞争:当一个线程尝试获取轻量级锁时,如果没有竞争,它可以成功获取锁,并继续执行。
如果有竞争,那么轻量级锁会膨胀为重量级锁。
- 开销:相对于重量级锁,轻量级锁的获取和释放的开销更小,因为它不需要涉及操作系统层面的调度和上下文切换。
2. 重量级锁(Heavyweight Locking):
- 锁状态:重量级锁通过操作系统的互斥量(Mutex)或信号量(Semaphore)来实现。
当一个线程获得重量级锁时,它会进入阻塞状态,如果已经被其他线程持有,那么当前线程就会被挂起等待锁的释放。
- 锁的竞争:重量级锁存在严格的竞争关系,当多个线程同时请求一个重量级锁时,只有一个线程能够成功获取锁,其
他线程会进入排队状态。
- 开销:相对于轻量级锁,重量级锁的获取和释放的开销更大,因为它涉及到操作系统层面的调度和上下文切换,需要更多的系统资源。
总体而言,轻量级锁在较低级别的竞争下表现良好,并且相对快速和高效。
而重量级锁适用于高度竞争的情况,它可以确保资源的独占性,但是会带来更多的开销和延迟。
具体在应用中使用哪种类型的锁取决于并发环境的性质和需求。
基于Spring框架的轻量级J2EE架构与应用
需自 行解决构件组装, 事务, 志, 日 安全管理等问题.
Srg pn框架是Rd n n u g Hee等开发的, i o J s ,ee ol o o J rn l h r 用
于支持J ae 构件运行的容器.该框架提供了依赖注入11 a Ba v n 7 . 9 方式的构件组装机制和基于A P O 技术的事务和日 志管理等功 能. 基于Srg pn 框架的轻量级J E i 2 E 架构能够发挥上述两种架 构方案的 优势, 避免它们存在的缺陷, 是一种成 熟的J E 2 E 应用
方案大量使用 EB J 构件, 能够充分利用 EB J 容器( 例如: e W-
bg) 供的 布 理, li提 分 式处 构件定 统一的事务 oc 位, 和安全 服务
等, 然而EB J 构件却存在着复杂度高, 开发效率低; 进行单 难以 元测试; 数据库访问效率低等问题1.普通的轻量级JE 架 6 . 7 2E 构方案用J ae 构件取代了传统架构中的重量级 EB a Ba v n J构 件, 很大程度上提高了构件开发和构件的数据库访问效率.但 是该架构过于简化, 缺乏支持 J aen a Ba 构件运行的容器, v 构件
wr p v e, c a dpnec ietn a r cm oet e b , atn d g ngm n e .n si o r i ss h eedny co f te o pnn a m l tn co a l m a et tc s tn k o d u s n i e u s j s y r s i n o a e , a u a s s a c lh e h JE a hete h ppr r ue t Srg m wr ad m a s te h JE a hete s o i t i t E ic rTi ae i o c h pn f eo n c pr lh i t E cic r b e n gw g 2 r t u . s c n d s t e i r a k o e i w g 2 g r t u a d Srg eo wt o e JE a he u s g e a(s o i apctn ay p n fmwr i t r E ic r ad s a f plao f l. i r a k h 2 r t te n i h c v e t s i i i l n K y rs Srg m wr; ; nec ietnlh e h e w d: i f eo JE dp dny co ; wi t o pn r a k 2 E ee n i it g j g
软件演化过程模型的通用模型
软件演化过程模型的通用模型随着软件行业的发展,各种软件演化过程模型都在不断涌现,人们越来越重视软件开发的整个过程,以及这个过程中所采用的和发展的技术。
软件演化过程模型不仅是软件开发活动所指导的重要理论,而且是软件工程领域技术实现的重要基础。
现代软件演化过程模型应对现有的软件开发环境具有广泛的适用性。
软件演化过程模型一般按照其模式的性质可以分为轻量级和重量级模型。
轻量级模型是软件系统开发过程中涉及最少元素和步骤的模型,被认为包含比较少的复杂性和技术,能够快速构建和实现软件系统。
重量级模型涵盖了复杂的技术,包括软件质量评估、建模与分析、软件复用等,具有强大的实力和可扩展性,但也要求开发者具备更高的专业水平。
现代软件开发环境的发展,使得软件演化过程模型的研究发挥了重要作用。
许多软件开发活动都涉及到复杂的技术,因此,把软件演化过程模型当成一个统一的框架,以有效地衡量软件开发过程,是非常重要的。
在这种情况下,需要开发一个通用的软件演化过程模型,以满足当今软件开发环境的要求。
通用软件演化过程模型是一种综合性的模型,它把软件开发过程中所涉及的所有元素和步骤综合起来,以有效地分析和识别软件系统的功能和框架。
这种模型可以通过收集所有可能的变量以及与其他过程的相互关系,来形成完整的模型,从而能够较好地评估软件系统的性能和可靠性。
此外,通用软件演化过程模型提供了一个系统性和可维护性的平台,使软件开发人员能够更清楚地把握软件开发过程中所涉及的步骤,同时帮助他们发现软件开发过程中可能出现的问题,以确保开发的软件的质量。
同时,通用软件演化过程模型也可以帮助开发者更好地了解并实现他们的设计方案。
软件演化过程模型的通用性对于提高软件开发过程的效率和可靠性至关重要。
随着软件开发技术的快速发展,软件演化过程模型的研究也得到了长足的进展;而设计出一种通用、可靠、可持续的软件演化过程模型也是当今软件开发技术所面临的一项基本任务。
总之,软件演化过程模型的通用模型对于软件开发的整个过程起着至关重要的作用,它能够有效地测量和评估软件开发过程,以确保开发的软件有较好的可靠性和可维护性。
【SpringFramework】Spring入门教程(一)控制反转和依赖注入
【SpringFramework】Spring⼊门教程(⼀)控制反转和依赖注⼊参考资料说在前⾯什么样的架构,我们认为是⼀个优秀的架构?判断准则:可维护性好,可扩展性好,性能。
什么叫可扩展性好?答:在不断添加新的代码的同时,可以不修改原有代码,即符合开闭原则。
如何让程序的可维护性好,可扩展性好呢?业界有⼀个公认的标准:⾼内聚,低耦合。
⾼内聚:就是尽量将代码写在与之功能描述⼀致的模块中。
如User表的操作写在UserDAO⾥⾯,不要写在⾮UserDAO的类⾥⾯。
低耦合:就是尽量减少类与类之间的直接关系。
(重点)直接关系:Controller层依赖Service层,在Controller层直接new Service层的类的对象。
Service层依赖Dao层,在Service层直接new Dao层的对象。
Spring框架就是通过IoC/DI(控制反转/依赖注⼊)实现程序的解耦。
从⽽提⾼程序的维护性和扩展性。
Spring概述Spring是什么Spring是⼀个JavaEE轻量级的⼀站式开发框架。
JavaEE: 就是⽤于开发企业级(B/S)应⽤的技术。
轻量级:使⽤最少代码启动框架,然后根据需求选择需要使⽤的模块。
重量级:早期的EJB,开发⼀个HelloWorld程序都需要引⼊EJB的全部模块。
⼀站式:提供了表⽰层,服务层,持久层的所有⽀持。
Spring框架出现的背景世界上第⼀套由Java官⽅Sun公司推出的企业级开发框架EJB瞬间风靡全球,被各⼤公司所应⽤。
Spring之⽗,Rod Jonhson是⼀个⾳乐博⼠,在Sun公司的⼤⼒推⼴下,也成为EJB框架的使⽤者。
在深⼊研究完EJB框架(由Sun主导开发的⼀个JavaEE开发框架),⽆法接受这么⼀个框架被吹成世界第⼀,具体查看他吐槽EJB的书《Expert one on one J2EE design and development》。
其中突出被他吐槽最厉害的⼀个点就EJB的重量级,就是只要使⽤EJB⾥⾯任何⼀个组件。
Synchronized详解-》无锁、偏向锁、轻量级锁、重量级锁
Synchronized详解-》⽆锁、偏向锁、轻量级锁、重量级锁问: 什么是偏向锁,偏向锁加锁流程是什么??答: makeword : 64位⼆进制位偏向锁:64位⼆进制位中:其中 1、表⽰偏向线程id的bit位都是0 & 2、锁状态位:表⽰偏向锁状态这个时候线程直接在锁对象markword的⾼位内存储当前线程的内存地址步骤: 1 还要向当前的线程栈添加⼀条锁记录,让锁记录中的锁标识指向当前锁对象2 通过CAS设置锁对象的markword,存储当前的线程地址,,这⼀步必须使⽤CAS,因为可能会有多个线程抢占锁问: 偏向锁没法做到线程间的互斥,为什么还要这把锁呢答: 其实咱们写代码的时候,很多情况下觉得某块逻辑存在并发安全问题,为了程序的健壮性会使⽤synchronized来确保这块逻辑,在并发环境下它不出现问题,但是实际情况下往往不是这样的,绝⼤部分情况下使⽤Synchronized包裹的代码块,它实际运⾏环境根本就没有多线程场景,可能⾃始⾄终就只有⼀个线程运⾏这个代码块。
这种情况特别特别多,如果没有偏向锁的话,直接使⽤轻量级锁会有⼀定的性能损耗,=>因为轻量级锁加锁或者解锁它都需要⼀次CAS操作偏向锁解锁时不需要修改对象头的markword ,就少⼀次CAS操作..问: 某个线程获取到锁对象的偏向锁之后,执⾏完同步代码块后,会释放这个偏向锁吗?答: 是这样的,退出同步代码块后,对应的指令是monitorexit,然后 jvm在处理monitorexit这个指令的时候,第⼀步当前线程栈内与这个锁对象相关的锁记录全部拿到,并释放掉最后⼀条锁记录。
通过检查lock对象的markword ,, 如果当前锁对象是偏向锁状态就啥也不做, 也就是说,就算线程退出同步代码块,该锁对象仍然保留了偏向当前线程的偏向锁, .问: 那这样作有什么好处呢?偏向锁退出时,锁仍然保留偏向状态好处,下次这个线程再去获取这边锁时,成本会更低,仅仅只需要对⽐⼀下当前这把锁是否偏向⾃⼰,就完事了.如果偏向⾃⼰直接执⾏同步代码块,这个加锁的过程中不涉及到⼀条cas指令.问:使⽤偏向锁是否就⼀定会提升性能呢?答: 这个还真不⼀定,如果实际运⾏情况就像砸门刚才聊的那样,锁对象⾃始⾄终都只会被⼀个线程获取-释放,获取-释放,这个条件下,偏向锁还是⾮常有⽤途的 ,但是条件骚味苛刻⼀丁点,, 偏向锁就会从性能提升效能⼿变成累赘 ..问:怎么说呀?这块?答:⽐如说,某个锁对象,因为之前被线程A获取过,它的锁状态是偏向线程A ,那假设线程B 也要获取这个锁对象, 因为锁对象并不偏向线程B嘛 ,所以线程B会触发偏向锁到轻量级锁升级的逻辑,这个逻辑很检查到很多状态来保证锁定正确性,这块就⽐较⿇烦,,,所以说..如果没有偏向锁的存在的话,这个升级过程是可以避免掉的..⾯试官: en 这点确实是这样的, 偏向锁升级的流程,砸门骚等再聊吧. 咱们先聊⼀下轻量级锁吧??问: 轻量级锁,可能很多同学不知道什么是轻量级锁.. 如果咱们直接聊偏向锁升级到轻量级锁的这个流程,估计⼤家都不太好接受骚等再聊偏向锁升级的过程..问:什么是轻量级锁??答: 轻量级锁仍然解决不了线程竞争问题,它并不能提供线程之间的互斥性。
Scrum敏捷框架培 训_V1.0
3.11.1冲刺规划会议(Sprint Plan Meeting)
主题:冲刺规划会议(Sprint Plan Meeting) 会议时间:4-8小时 会议目标:产品经理和团队一起对整个产品Backlog进行评估,制定发行版本和 冲刺(Sprint)计划的主要依据。
会议流程:
3.11.4冲刺回顾会议(Sprint Retrospective
主题:冲刺回顾会议(Sprint Retrospective 会议目标:在冲刺(Sprint)回顾会议,项目团队会分析冲刺(Sprint)的成功经 验和所遇到的障碍 会议时间:1-3小时
会议流程:
1在白板画一个时间轴,标记出冲刺(Sprint)的开始和结束时间,回忆冲刺执行情 况,比较预估的和实际的燃尽图执行的情况对比 2 团队中每个成员需回答 1我们的成功经验是什么 2有什么能够改进的 3哪些方 面需要在下个冲刺中改进 3 项目经理最后根据讨论明确改进之处及责任人,更新团队的冲刺数据,,加入 到团队总结中,为后续项目实施提供经验教训
软件开发过程敏捷化趋势, 将是一种潮流!
2.2敏捷开发者的价值观
个体与交互 可用的软件 客户协作 响应变化 胜于 胜于 胜于 胜于 过程与工具 复杂的文档 客户谈判 遵循计划
2.3《敏捷宣言》12条原则
1.最优先的目标是通过尽早地、持续地交付有价值的软件来满 足客户。 2.欢迎需求变化,甚至在开发后期。敏捷过程控制、利用变化 帮助客户取得竞争优势。 3.频繁交付可用的软件,间隔从两周到两个月,偏爱更短的时 间尺度。 4.在整个项目中业务人员和开发人员必须每天在一起工作。 5.以积极主动的员工为核心建立项目,给予他们所需的环境和 支持,信任他们能够完成工作。 6.在开发团队内外传递信息最有效率和效果的方法是面对面的 交流。
JAVA轻量级框架在电子商务中应用
JAVA轻量级框架在电子商务中的应用中图分类号:f173.3 文献标识:a 文章编号:1009-4202(2010)03-054-01摘要分析重量级框架与轻量级框架的异同,探讨了电子商务的系统要求,java技术具有面向对象、独立于平台、可移植性、分布式、多线程性、安全可靠等诸多优点,在电子商务中采用java轻量级框架进行设计,具有较大优势,对java轻量级框架在电子商务中的应用进行了研究探讨。
关键词 java 轻量级框架电子商务应用一、引言随着计算机技术的快速发展及互联网应用的全面普及,推动了基于互联网的电子商务的飞速发展,成为一种全新的商务模式和新的经济增长点。
电子商务活动是通过公共计算机通信网络进行商务活动的现代方式,突破传统商务在时间、地域上的限制,成为方便、快捷、安全可靠的新兴电子化商务活动模式。
java电子商务充分利用到了java技术面向对象、分布式、解释执行、鲁棒、安全、体系结构中立、可移植、高性能、多线程以及动态性等特点,能够确保电子商务的安全性。
因此,加强对java轻量级框架在电子商务中的应用进行了研究探讨,对于推动电子商务的发展,为用户提供更加安全便捷的服务,最有十分重要的意义。
二、重量级框架与轻量级框架比较分析1.基于ejb的重量级框架基于ejb的重量级框架具有比较突出的特点就是系统的健壮性好。
由于 ejb容器能够很好的处理系统性能、事务机制、安全访问权限以及分布式运算等问题,基于ejb框架进行开发能保证企业应用良好的连续性,因为企业的发展壮大,而需要重新更换软件系统,可以使开发人员能更好地把精力集中在业务逻辑的开发上。
2.基于pojos的轻量级框架轻量级是和以ejb为核心技术的复杂框架对比而言,轻量级框架侧重于减小开发的复杂度,相应的它的处理能力便有所减弱(如事务功能弱、不具备分布式处理能力),比较适用于开发中小型企业应用。
在基于pojos轻量级框架上开发的应用程序无需依赖于ejb容器可独立运行。
java中的无锁、偏向锁、轻量级锁和重量级锁
java中的⽆锁、偏向锁、轻量级锁和重量级锁1. ⽆锁⽆锁没有对资源进⾏锁定,所有的线程都能访问并修改同⼀个资源,但同时只有⼀个线程能修改成功。
⽆锁的特点就是修改操作在循环内进⾏,线程会不断的尝试修改共享资源。
如果没有冲突就修改成功并退出,否则就会继续循环尝试。
如果有多个线程修改同⼀个值,必定会有⼀个线程能修改成功,⽽其他修改失败的线程会不断重试直到修改成功。
CAS原理及应⽤即是⽆锁的实现。
⽆锁⽆法全⾯代替有锁,但⽆锁在某些场合下的性能是⾮常⾼的。
2. 偏向锁偏向锁是指⼀段同步代码⼀直被⼀个线程所访问,那么该线程会⾃动获取锁,降低获取锁的代价。
在⼤多数情况下,锁总是由同⼀线程多次获得,不存在多线程竞争,所以出现了偏向锁。
其⽬标就是在只有⼀个线程执⾏同步代码块时能够提⾼性能。
当⼀个线程访问同步代码块并获取锁时,会在Mark Word⾥存储锁偏向的线程ID。
在线程进⼊和退出同步块时不再通过CAS操作来加锁和解锁,⽽是检测Mark Word⾥是否存储着指向当前线程的偏向锁,有则直接进⼊。
只有线程第⼀次获取锁的时候会进⾏⼀次CAS操作引⼊偏向锁是为了在⽆多线程竞争的情况下尽量减少不必要的轻量级锁执⾏路径,因为轻量级锁的获取及释放依赖多次CAS原⼦指令,⽽偏向锁只需要在置换ThreadID的时候依赖⼀次CAS原⼦指令即可。
线程不会主动释放偏向锁,除⾮有别的线程来竞争偏向锁。
偏向锁的撤销,需要等待全局安全点(在这个时间点上没有字节码正在执⾏),它会⾸先暂停拥有偏向锁的线程,判断锁对象是否处于被锁定状态。
撤销偏向锁后恢复到⽆锁(标志位为“01”)或轻量级锁(标志位为“00”)的状态。
偏向锁在JDK 6及以后的JVM⾥是默认启⽤的。
可以通过JVM参数关闭偏向锁:-XX:-UseBiasedLocking=false,关闭之后程序默认会进⼊轻量级锁状态。
3. 轻量级锁是指当锁是偏向锁的时候,被另外的线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过⾃旋的形式尝试获取锁,不会阻塞,从⽽提⾼性能。
八人艇分重量级和轻量级,建立模型说明
八人艇分重量级和轻量级,建立模型说明
1. 八人艇是一种比赛项目,参赛人员分为重量级和轻量级两个组别。
2. 分重量级和轻量级的依据是参赛选手的体重,重量级组别的选手体重较大,轻量级组别的选手体重较轻。
3. 在比赛中,重量级组别的八人艇的船员总体重要求通常不少于某一限值,例如200kg或210kg。
4. 轻量级组别的八人艇的船员总体重一般有固定的上限,例如艇员总体重不得超过640kg。
5. 为了确保公平竞争,参赛选手需要向组织机构提供自己的体重信息,并根据体重安排到对应的组别。
6. 分组的目的是为了让体重相近的选手进行比赛,以减小不同体重对划艇速度的影响,增加比赛的公平性。
7. 在比赛中,重量级和轻量级的八人艇分别会进行不同的比赛,例如预赛、半决赛和决赛等。
8. 对于重量级组别的比赛,选手的体重并不直接影响比赛成绩,而对于轻量级组别的比赛,选手的体重可能会对成绩产生一定的影响。
9. 轻量级选手通常需要注意保持良好的体重控制,以确保在比赛中符合组别的要求。
10. 八人艇比赛中的体重级别分类在保证公平竞争的也为选手提供了更好的比赛环境和机会,增加了比赛的多样性和激烈程度。
一种轻量级J2ee框架的设计与实现
速地构建高质量的 M C企业级应用。 V
1 软件框架模型
整个 框 架 采 用 分层 设 计 , 由数 据 持久 层 、 R O M 关 系 映射层 、 C IN层 和 VE 层 构 成 。数 据 持 A TO Iw 久 层 对 J B 技 术 进 行 封 装 , 其 核 心 类 为 D C
收 稿 日期 :00 0 - 7 2 1— 2 0
作者简介 : 罗运贞( 9 0 )男 , 18 一 , 广西资 源人 , 师 , 讲 研 究方 向 : 计算机软件。
】 一
广西职业技术学院学报
2 1 4月 0 0年
Me oSrlt 中枢 控 制 , t d ev 为 h e 在该 类 中 , 输 人 流 中 从
【 关键词 】 R Je 框架 反射 OM 2e
中 图分 类 号 : P 7 T2 1 文 献标 识码 : A 文章编 号 :6 4 3 8 ( 0 0)2 0 0 — 5 17 — 0 3 2 1 0 — 0 1 0
De in a d I lm e t to fLih weg tJ e r me r sg n mp e n ai n o g t i h 2 eF a wo k
【 yW o d 】O M J e f me ok rf c o Ke r s R 2e r w r e et n a l i
随着 网络的迅速发展 和普及 ,基于 B s结构 / 的 We b应 用 已成 为 当 今 企业 级 开 发 的主 流 。ie 2e
技 术 具有 的支 持 异构 环 境 、 可用 性 稳定 、 伸 缩性 可 好 的特 性 , 为搭 建具 有 可伸缩 性 、 灵活 性 、 易维 护性 的企业 级开 发 提供 了 良好 的机制 。 统重 量级 框架 传 E B存在 依 赖容 器 、 动缓 慢 、 J 启 部署 复 杂 、 资源 占用 高 、 服务 器性 能要 求高 等缺 点 。 目前 比较流 行 的 对
tp框架的详细介绍,tp框架基础
tp框架的详细介绍,tp框架基础
php框架
真实项⽬开发步骤:
1. 多⼈同时开发项⽬,协作开发项⽬、分⼯合理、效率有提⾼(代码风格不⼀样、分⼯不好)
2. 测试阶段
3. 上线运⾏
4. 对项⽬进⾏维护、修改、升级(单个⼈维护项⽬,⼗分困难,代码风格不⼀样)
5. 项⽬稳定的运⾏阶段
6. 项⽬停⽌运⾏(旧项⽬的⼈员已经全部离职,新⼈开发新项⽬)
问题:
1. 多⼈开发项⽬,分⼯不合理,(html php mysql)
2. 代码风格不⼀样,后期维护⼗分困难
3. 项⽬⽣命周期⼗分短,项⽬⽣命没有延续性,造成资源浪费、⼈员浪费
4. 项⽬不能很好适应客户需求,牵⼀发⽽动全⾝。
其他相关框架
1. zendframework zend php语⾔公司发布的官⽅框架,重量级(功能多)
2. yii 美国华⼈开发的框架,xue qiang, qiang, 重量级框架,纯OOP框架
3. CI CodeIgniter轻量级框架,开发速度快,部署灵活
1. cakephp外国框架,重量级,速度慢
2. symfony外国重量级框架
3. ThinkPHP轻量级框架,国⼈框架,⼊门容易
什么框架:
⼀堆代码的集合,⾥边有变量、函数、类、常量,⾥边也有许多设计模式MVC、AR数据库、单例等等。
框架可以节省我们50-60%的⼯作量,我们全部精⼒都集中在业务层次。
为什么使⽤框架
l 框架可以帮组我们快速、稳定、⾼效搭建程序系统
l 该系统由于框架的使⽤使得本⾝的维护性、灵活性、适应客户需求⽅⾯得到最⼤化的增强。
l 使⽤框架的过程中可以使得我们的注意⼒全部集中业务层⾯,⽽⽆需关⼼程序的底层架构。
JAVA轻量级组件和重量级组件的本质区别
JAVA轻量级组件和重量级组件的本质区别组件:一般都是已编译好的类,对外只提供接口。
容器:为某些组件的运行提供必要运行支持的一个软件环境。
如Web容器为Servlet和JSP组件提供运行环境,EJB容器为EJB组件提供运行环境。
而一般来说这些组件无法脱离这些容器单独运行。
除提供组件运行环境之外,容器还提供了访问系统底层服务的简单方法。
如EJB 容器为EJB组件提供了声明式事务服务,使开发人员不必去管事务量级主要是看容器的依赖性所决定的,依赖性越小,越轻量在Java 应用程序开发环境中,“轻量级Ja va”主要是指两个东西:简化的编程模型和更具响应能力的容器。
轻量级Java 旨在消除与传统J2EE API 有关的不必要的复杂性和限制。
它也将缩短应用程序的部署时间,这对于支持开发最佳实践(比如频繁单元测试)非常重要。
eg:struts spring hibernate 是轻量级框架Spring:一个轻量级的容器,任何Java Bean,JNDI对象和所有能被实例化的Java 对象都可以成为组件,让Spring容器管理EJB是重量级框架轻量级组件是用JA V A代码画出来的,这样具有平台移植性。
重量级组件是调用操作系统的函数画出来的组件,比如主窗体。
一般来说尽量用轻量级的组件,这样对程序的移植性很好,一般javax.swing包里的组件大部分是轻量级的java.awt里面的是重量级的。
Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级(light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。
由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。
Swing 在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。
轻量级容器对于web 应用的意义尤为明显;但对于其他类型的应用(包括在J2EE 环境中运行的应用和独立的应用)来说,轻量级容器也有助于提高它们的复用程度,例如业务对象和数据访问对象(DAO)的复用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
框架之轻量级和重量级
一:基本概念:
量级主要是看容器的依赖性所决定的,依赖性越小,越轻量.
1、轻量级框架
1.定义:在Java 应用程序开发环境中,“轻量级Java”主要是指两个东西:简化的编程模型和更具响应能力的容器。
轻量级Java 旨在消除与传统J2EE API 有关的不必要的复杂性和限制。
它也将缩短应用程序的部署时间,这对于支持开发最佳实践(比如频繁单元测试)非常重要。
2.现在比较重要的轻量级以及对终端用户的帮助:控制反转(IoC)模式在这个领域有着重大的影响。
使用IoC,开发人员不需要编写复杂的代码来执行查询、处理基础架构异常或管理连接,就能够解决对象依赖性问题。
这有助于简化代码、将业务逻辑与基础架构分离,从而使应用程序更易于维护。
轻量级Java 的另一个关键特征是,它不会强迫业务对象遵循平台特定接口。
这允许开发人员在普通旧式Java 对象(POJO)中实现业务逻辑,从而提高生产率。
与具体的类相反,当把开发的最佳实践与界面相结合时,这些特性也使得对代码进行单元测试容易得多。
由于业务逻辑实现在POJO中,所以不再需要将对象部署到重量级容器中以在单元测试中练习它。
因此,将对象宿主在诸如JUnit 之类的简单测试环境中和为快速迭代单元测试“模拟”外部依赖性就变得微不足道了。
3.现在典型的轻量级框架:Struts、Hibernate、Spring、Beehive.....
注:感觉转向轻量级技术越来越猛了,传统的重量级EJB也推出EJB3.0也基本上是以使得轻量级Java盛行的概念为基础。
2、重量级框架
dev2dev:人们在想起应用服务器供应商时,通常把它们置于“重量级阵营”。
我想您正在努力改变这种状况,对吧?换言之,许多人认为应用程序供应商已经在实现重量级组件(比如EJB 2.0)上付出了很大的代价,它们不愿意轻易放弃这些成果。
Jim: 首先,我认为没有理由放弃在EJB 上的现有投资,因为在某些场景中它仍然是最好的技术,例如当您希望通过RMI远程公开业务服务时。
当然,诸如EJB 之类的开放标准在保护客户投资方面的价值也不能低估。
已经说过,我觉得人们经常过分强调EJB在应用服务器中的实际价值。
尽管这一点未必对所有的应用服务器供应商都适用,但是BEA 只投入了相对较少的一部分开发资源来支持J2EE API。
我们工作最主要的目标是为宿主应用程序构建最可靠、可伸缩和容错的内核。
这些品质以及分布式事务服务、高速消息传递、遗留系统集成、高级Web 服务、配置管理、诊断和故障排除和高级安全性,代表了WebLogic Server 的真正价值,而且对总体拥有成本(TCO)有着巨大的影响。
幸运的是,这些附加值对基于Spring 或Beehive 的应用程序的相关性和适用性与采用EJB 构建的应用程序是一样的。
虽然轻量级Java 技术使得应用程序的开发和维护更容易,但是它们不会代替真正高端应用服务器的品质。
实际上,我们认为轻量级Java 与WebLogic Server 是一致的。
dev2dev: BEA 有没有一个轻量级Java 策略?BEA 实现轻量级Java 的方法是什么?
Jim: 我们的策略是接纳所有有利于提高开发人员生产率、在市场上为部署这些技术提供最佳平台的技术。
轻量级Java 有助于降低开发成本,WebLogic Server 则有助于降低运营成本,它们是一个非常强大的组合。
3、应用程序框架
dev2dev:由BEA赞助的Beehive项目显然是一个轻量级Java组件模型。
您能否谈谈关于Beehive 的情况,以及它在你们的整个策略中的地位?
Jim: Beehive是一个应用程序框架,致力于使J2EE 应用程序和基于SOA 的应用程序的开发更容易,它基于我们发布WebLogic Workshop 的经验。
它基于POJO 和用于配置依赖性、服务质量等的元数据提供一个编程模型。
元数据以J2SE 5.0 代码注解和外部XML文件的形式获得支持。
存在一些用于访问J2EE资源、定义业务和Web 服务以及基
于MVC模式开发Web 应用程序的组件。
在我们努力提高开发人员生产率、巩固Java 整体市场的过程中,Beehive 是非常关键的一部分。
ev2dev: Beehive 可以被认为是一个“应用程序框架”。
在Spring Framework中提供了一种非常流行的轻量级Java 方法。
Spring(以及其他类似的框架)对于BEA 有多重要?
Jim: 任何能够帮助我们的客户提高生产率的东西都对我们非常重要。
我们欢迎并且接纳这些技术,在适当的时候也可以在技术层面上集成或者共享这些技术。
dev2dev: 你们考虑过明确支持这些框架吗?
Jim: 就像我原来说过的,WebLogic Server具有很多方面的特性,能够提供基于轻量级Java 技术的应用程序。
许多都是隐含的,然而在某些情况下,最小量的集成工作就能为轻量级Java 开发人员提供重要的价值。
举个例子,当今存在的一些适配器允许Spring 应用程序使用WebLogic Server 的分布式事务能力,无需改变任何应用程序代码。
我们正在调查许多其他的机会,当然也一直在倾听客户的需求。
dev2dev: 我们已经看到轻量级框架对EJB 3 的一些影响。
您认为这会扩展到J2EE的其他方面吗?
Jim: 是的。
我认为JSR 175(即Java元数据)对于简化J2EE 编程模型是一种关键的支持技术。
EJB 3.0使用了它,而且它也是JSR 181(即Web Services 元数据,一个BEA 倡导的规范)的基础。
没有理由相信它会就此停止。
4、轻量级持久性
dev2dev: IoC 容器看起来是轻量级Java 的中心。
另外的一个关键因素是POJO 和轻量级持久性。
您能针对这个问题谈谈看法吗?
Jim: 同样,共同的主题是简化编程模型。
没有比POJO更简单的了。
当然,企业开发要求我们有能力应用附加的品质,比如持久性规则、事务语义和POJO 的安全约束。
盛行很广的方式是在元数据中定义这些品质,要么作为代码注解,要么放在外部文件中。
dev2dev: 您是否觉得因为有多种方法用于完成持久性这样的事情而存在一些危险?比如,我们很快将会有EJB 2、EJB 3、JDO、Hibernate,等等。
Jim: 我认为这只是成熟领域的一个实际情况。
多年来,J2EE 规范没有完全涵盖这个特定的领域,自然就会导致其他规范的出现。
就我所知道的在JCP中发生的事情,我们似乎正在走向统一。
这对于整个行业来说是一件好事。
5、未来
dev2dev: 您能预见一下轻量级Java和BEA 的未来吗?
Jim: 我们将会继续活跃于这个领域中,既通过诸如Apache Beehive、XMLBeans、Eclipse和JCP 之类的渠道推动创新,又吸收诸如Spring 这样的其他领先技术,并且为了客户的利益而展开协作。
6、总结
重量级的开发倒并不是指EJB或者是JNDI,很大意义上,重量级的开发都是需要依赖一个非常庞大的容器系统进行开发,在EJB的开发中,我们所有开发的内容基本都需要放置在一个容器系统中进行运行,这些容器因为基本针对大型企业应用,所以体积庞大,占用资源过多,在开发的过程中效率很低,因为使用大型容器作为开发环境的话,我们很大一部分时间都用在了Deploy、Run,这样的过程上,有时候改动一个小小的部分,需要等等很长的时间才能看到结果,如果做单元测试也比较麻烦,虽然现在有很多针对容器的单元测试框架,但是还是没有很好的解决Deploy的等待问题,所以在开发者这里,EJB逐渐失去了很多的吸引力,因为感觉实在是太笨重了。
轻量级框架的优势很大程度上是因为加速了开发的速度,我们不用部署一个很庞大的容器系统就可以实现以前需要容器才能实现的功能,我们可以使用Spring代替EJB中的Stateless Session Bean,可以使用Hibernate代替EJB中的Entity Bean,而且我们可以直接写一个Application运行已经完成的系统,马上可以看到结果,做单元测试非常的简介,不需要做太多的工作就可以构建系统,这些特性对于开发人员来说非常的有吸引力。
关于轻量级和重量级之间的论战已经由来已久了,也最终没有出现一个很好的结果,重量级框架在大规模运行的时候会表现出非常优异的性能,劣势主要是开发效率较低,轻量级框架正好相反,开发的时候非常迅速,但是在大规模运行的时候,性能比重量级框架还是有差异。
但是随着最近一些框架标准的成熟,可以有新的选择,因为不管是轻量级还是重量级框架,基本解决的是两个问题,一个是“事务控制”,一个是“持久化控制”,在JPA标准发布以后,我们看到一个很好的解决方式,“持久化”的开发可以和任何框架没有关系,直接使用JPA的标准注解即可,所以开发“持久化”部分的时候可以使用JPA进行注解,开发时期用Hibernate作为JPA的实现进行开发测试,需要上线运行的时候就可以直接部署到EJB 的EntityBean上,在EJB3.0之后,已经很好进行移植部署。
关于“事务控制”,现在所有的实现方式都比较简单,针对方法进行注解事务类型即可,开发的时候可以用一个转换器将这些注解转化为Spring的映射,快速的进行开发,在上线运行的时候,直接使用EJB 的Session Bean进行部署就可以解决,这些方式实现起来并不困难,可以很好解决“重量级”和“轻量级”之间的矛盾。