我眼中的J2EE |
时间:2014-05-04 10:03:48 来源:不详 作者:佚名 |
很长时间以来,我们一 来才明白J2EE的内涵要比ej 部分核心服务如JTA事务管 EJB仅仅是一个使用了JTA事
| 直被误导了,以为只有采用了ej b广的多,是一套使用Java进行 理, 资源池,线程管理,还有jd 务管理、线程管理等J2EE基础服
| b技术的系统才算真正玩了ejb。后 企业级开发的技术规范,包含了大 bc,jsp,servlet等应用技术。而 务的分布式的组件标准。
|
Enterprise JavaBeans developers will not have details; multithreading;
| will make it easy to write to understand low-level tra resource pooling; and other
| applications. Application nsaction and state management complex low-level APIs.
|
Declarative transaction management |
Management of business objects |
记得一个人写文章说: 不用和那些服务器上的复杂 套接字,都见鬼去吧,我们只
| “EJB最大的诱人之处是她把应 的资源打交道了,什么数据库,什 需要专著于我们的商业逻辑的实
| 用程序和服务器分开了,我们再也 么进程,线程,什么安全权限,什么 现了。”
|
ejb已经出现5、6年时间了,很多J2E 有实现。
| E项目才也采用了ejb,sun所描述的美好前景也并没
|
1.Ejb规范本身是很复杂的,以至于 一起的,并没有减轻开发人员的负担。Ejb 机制如何,很多人都说不出ejb containe
| 没有多少开发人员去阅读他。Ejb总是与复杂联系在 container像一个黑盒子,ejb在里面如何运行的, r是如何处理异常的,跟事务有什么联系。
|
Ejb的运行效率如何, 确的找出是程序甚至说哪条
| 瓶颈在什么地方,没有人知道。 SQL语句的原因,Oracle配置的
| (在Oracle中的调优我们可以很精 原因,操作系统和硬件的原因)。
|
2.Ejb的复杂意味着程序的开发效率 一个包中的ejb只能由一个人来开发,否则 。另外,拿entity bean来讲,每次想按 定义的一个select方法,然后编译发布,
| 是低的,以致于Jbuilder提供了图形化的设计工具( 合并比较麻烦) ,Xdoclet是另外一种辅助开发的方式 照不同的参数进行查询,都要去为entity bean重新 然后在业务逻辑中调用。
|
3.Ejb是在容器中执行 像比,他是一个需要其他环
| 的,意味着我们不能像一般的ja 境的重量级实现,单元测试是很
| vabean那样来对待他,与javabean 困难的。
|
4.关于entity bean,M cache了,为什么还要去cac 是很小的),仅仅是因为采
| arc fluery的文章中说Cache is he entity bean(相对于enity 用了entity bean而看起来更面
| the king,可是数据库中已经有 bean的复杂性,数据的传输开销还 向对象吗。
|
Core j2ee patterns和 的。
| 一些所谓最佳实现的书都有相当
| 一部分内容来正确和简化使用ejb
|
一开始接触entity bean,感到的就是复杂,开发效率低,难以维护。 |
一般来讲,使用entity bean都是完成数据持久的功能。 |
后来看了hibernate,很简单,开始困 的理由,于是列举了具备的安全,事务,分
| 惑,总以为entity bean之所以存在,还是有他存在 布式计算等方面的优点。
|
后来还是开始怀疑entity bean存在 bean封装其他jdbc操作或者hibernate来 更像客观存在的domain model,而不是从 来更像真实的世界。
| 的必要,因为那些功能与优点都可以通过session 实现,想来想去entity bean唯一的不同就是构件了, 数据库里面取出来的数据,entity bean使对象看起
|
构件之所以存在,是与 调用业务逻辑和数据访问,
| 分布式计算分不开的。在一个系 不同的系统通过构件来完美结合
| 统中,你可以通过另外一个系统来 。
|
(其实torque也不错, 现or mapping的功能,而不
| 就是不能操作多个数据源,另外 是像hibernate那样通过xml文件
| 就是自己生成了相关java文件来实 来配置实现。)
|
我们需要分布式吗,Distribution and Scalability |
分布式意味着在网络之间进行协调调 。
| 用,意味着复杂,除非必要,就不要采用分布式技术
|
以前以为采用ejb,程序就是分布式的,就具备了可伸缩性。 |
抛开可以按功能来划分 不完全意味着分布式,只是 如何同步复制不同App Serv ,Session变量、数据库连 得Oracle的同步的资源都是
| 访问的系统,其实可伸缩性就表 很多分布式体系提供了Cluster er之间的数据,而App Server是 接状态,我们如何复制呢。(好 内部的)。
| 明了是需要Cluster的(Cluster并 功能),而Cluster中的难点就是 与很多资源相连的,程序执行状态 不容易理解了Oracle RAC,而我觉
|
重量级与轻量级(ejb container vs spring) |
在公司论坛上看到一个 和文档拿出来秤,操过500
| 讨论heavyweight与lightweight 克就是heavyweight,否则就是l
| 的区别,如果说把一项技术的规范 ightweight。
|
似乎heavyweight总是与复杂性联系起来的。 |
我们所开发的系统并不是都是分布式
| 的,也并不都是那么复杂的,才会有spring的出现。
|
客观的说,ejb contai 。
| ner能够提供的功能,spring基
| 本上都能够以javabean的方式实现
|
区别还是前面说的ejb container是 转移对象间的耦合,把业务逻辑与安全、
| 一个构件的容器,而spring是一个对象的容器,一个 事务等相分离的轻量级解决方案。
|
Spring 最核心的部件 框架内部的组件按照一定的
| 就是它的Bean Container,在整 耦合度组装起来,对外提供一个
| 个框架中扮演了一个软总线,它使 服务的接口
|
如果开发一个需要跟多 ejb。
| 个系统交互运行的分布式系统还
| 是使用ejb吧, spring取代不了
|
对于大多数web应用,应该是一个不 据库),采用spring把。Spring+hiberna 比,spring的缺点就是没有规范。
| 需要访问其他系统的多层系统(即使可能访问多个数 te应该是一个比较好的组合,但和ejb container相
|
j2ee系统的开发应该都是采用面向对象技术,关键是怎么用的问题。 |
很久以前,在重粒子空 我也深信不疑。
| 间的一篇文章里,把一切都描述
| 为对象,整个世界是那样的优美。
|
由于在我们的程序中,主要是针对数 自然。就查到了transaction script和do
| 据处理和流程处理的,才知道用对象来表达不是那么 main model的概念。
|
transaction script就是对表示层用 它系统的操作,把数据回传给表示层。
| 户输入的处理程序。包括验证和计算,存储,调用其
|
domain model是所谓的域模型, 跟客观世界中的实体相对应。 |
transaction script属 ,采用transaction script 能力,习惯了就可以能够组 domain model的,哪些不是
| 于结构性思维,直观一些,在系 也是一个不错的选择。domain m 织很复杂的逻辑,另外,我们必 ,可以通过一些xxxManager或者
| 统中如果domain model不是很明显 odel属于oo思维,需要较强的抽象 须考虑哪些行为是通用的、属于 xxxController所实现的。
|
举一个例子,假如查看 查看是否进行了转帐,还是 是有他的用处的,可以说,
| 今天A银行到B银行的所有转帐记 从数据库中直接查询今天的转帐 所有的程序都要通过Transactio
| 录, 是列出A银行所有帐户对象来 记录直观。Transaction script还 n script来组织,程度不同而已。
|
这个世界,除了对象,还是有对象间 同,就可以从不同的角度来组织系统,不 案所记录他一生的活动是什么,数据,是 去问这个人。
| 的关系、行为规则和记录(数据)的,观察的角度不 一定需要用对象来表示。比如一个人是一个对象,档 我们关注的一个方面,我们来查档案就够了,而不用
|
在网上很多文章中,都会提到把系统 化的手段而已。
| 想象成一个完美的oo世界,而是db只不过是一个持久
|
我一直认为db也是一个完整的世界,能够做很多事情,特别是在效率方案。 |
所谓采用oo和j2ee的系 用。
| 统,模拟现实世界,注重对象间
| 的行为和关系,比较适合oltp的应
|
而db则是从数据角度来 别是在大批量数据处理和长 实现一般要比oo语言要高效
| 进行关注一个系统的,没有oo那 事务处理的时候有自己的优势。 ,只是从大的方向来讲有它自己
| 么复杂的关系,处理效率很高,特 在不存在明显错误的前提下,db的 的处理范围。
|
你有多少系统是需要从 还是不错的选择。
| 不同数据库之间移植的,必要的
| 时候,在j2ee方案中采用些db技术
|
C/s结构下,在pb程序 库等一系列功能,你专心考
| 中,一个datawindow几乎可以从 虑业务实现就可以了。
| 界面交互、数据绑定以及访问数据
|
在多层结构的程序中, 自己来实现,仅仅在数据方 的名词。
| 这种好日子一去不复返了,因为 面,就出现了vo, dto,po,de
| 分层,属于接口性质的细节要靠你 tached po,domain model等众多
|
不同的层专注于不同的功能,对于界 的数据用vo来表示,在网络传输中又用到
| 面展现,在struts中有actionform用于显示,业务层 了dto(特殊的vo),数据保存又用到了po了。
|
在这种情况下,数据的 全一致,不完全一致的内容 ,要么在业务层从新query 次进行查询更新。效率很低
| 完整性是一个很麻烦的问题,假 在页面生成的时候就丢失了,要 数据到vo进行更新,如果业务层 ,而且容易出错。
| 如actionform可能和vo的数据不完 么把vo缓存起来在需要时进行更新 是单独的而且持久层是ejb还要再
|
在hibernate中出现det 使用,最后再传递回业务层 对象,甚至可以在界面中调 load的依赖对象,就不是那 的。
| ached po,可以当成vo,po来用 进行业务操作和保存。由于deta 用detached po的逻辑。缺点就 么好玩了,这种情况应该是可以
| ,也可以把数据传送到前台界面来 ched po可以是带有业务逻辑的域 是如果detached po中存在lazy 根据编程时的具体情况来选择避免
|
Domain model,是一个特殊的值对象 据,实现业务逻辑,并把数据进行保存。 处理,只是从分散的位置集中到一处了。
| ,带有业务逻辑和持久功能。他接受和加工客户端数 Domain model中数据完整性和持久问题还是要在内部
|
总之,在多层结构中没 案。总是有很多东西要自己
| 有一种方案能够像pb中的datawi 处理。
| ndow一样智能和完美的数据处理方
|
另外,web页面是一个无状态的简单 javascript+xml)来处理,每个动作都要 堪忍受。Pb和delphi的那种年代真是一去
| 页面,界面上的只有通过javascript( 提交给服务器来操作后返回显示,很多时候简直是不 不复返了。
|
不知道以后jsf如何,因为客户端还是可以做很多东西的。 |
就servlet来说, 对于Action。除了那些开源 说了。
| 也可以用作页面显示,没有什么 方案,界面一般都是jsp来做,
| 意义,一般可以用作流程扭转,相 直观简单。xml我没有弄过,就不
|
现在很少有人直接在js 来表示,根据不同的动作来 把controller和model结合
| p页面里面嵌入业务逻辑和数据 调用不同的业务逻辑。唯一有点 表示,很方便和新颖,只是从来
| 库访问代码了,都会用controller 意外的是看到webwork2中用action 就没有用过webwork2。
|
目前的mvc结构,为程序带来了灵活 需要去解决所带来的问题。
| 和复用的功能,但是分层毕竟是有代价的,很多时候
|
J2EE体系已经比较成熟了,也总是在修修补补中不断前进。 |
|
|
|
|