J2EE到底是什么
目前所有的B/S系统应用可以分为:有状态(statefull)和无状态(stateless)两大类别。 有状态是指在整个系统的处理过程中要保留记住一些信息,而无状态则相反,每次request都是独立的连接,不需要在每个request之间共享数据等等。
对于这两种应用,通常第一考虑是性能要最优,性能是我们选择IT技术的主要依据之一。
为达到最大化的性能,对于Java系统,以前通常的作法是使用对象池,这样节约对象生成时的性能开销,也就是说系统启动时,预先生成一定数目的对象实例在 内存中,需要使用时,从对象池中取出实例,用完,归还对象池,对于有状态的应用,可以使用相关持久化(persistence)策略来保存状态。
下一步,如何并行访问对象池将是非常重要,java的多线程技术为我们提供了实现可能,线程的创建销毁也是可能非常耗时的,那么,无疑象使用对象池一样,我们必须使用线程池来实现多线程并行计算的最优化。
使用线程池和对象池,每次客户端请求发生一次就从线程池中借用一个线程,处理完这个请求就将线程返回线程池,同样,使用线程快速的访问对象,对象也是从对象池中借用,用完就还回对象池。 整个这样的架构设计在性能上是最优的。
有了性能保证,安全机制、事务机制、集群(cluster)技术也将是选择IT技术的主要依据。
J2EE就是这样一个实现上述多种考量的综合标准框架系统,在具体使用中,也许我们对所有这些考量的要求并不都一样重视,比如:如果纯粹追求性能是第一,可以忽视事务机制,那么,完整的J2EE技术也许就并不适合你。
那么我们先看看J2EE是如何从性能上保证我们的应用系统以最快速度运行的,也就是说J2EE中必然应该有上述线程池和对象池的实现技术,servlet实际是基于线程池的更好的线程容器;EJB是基于对象池的更好的对象容器。
看看Servler的架构图:
当client1发生请求时servlet容器会从线程池中分配一个线程给这个request.
再看看EJB的架构图:
instance Pool作为一个对象实例池,维持着EJB实例,当然这个对象池是用生命周期的,简单的说
EJB=对象池+远程对象池
但是,EJB还整合了相当的其它增强功能,如安全
事务机制等,这些对于一般应用都是必需的,当然你还必须根据你的需要来选择是否使用J2EE,如果你的应用对安全
事务机制没有要求,直接使用线程池和对象池技术肯定获得最好的性能。
所以,根据Servler和EJB的原理,我们已经可以规划我们的应用,什么可以放在servlet,或什么需要放在EJB中实现:
线程的本质决定了servlet只适合一些轻量的应用,如分析简单XML文档,
通过JDBC访问数据源,使用JMS或JavaMail处理简单的信息Message,或使用JTS/JTA处理简单的事务机制,注意这些用词都是"简单"的,一旦复杂了,就要使用EJB了。
下面从客户端和服务器端两个方面来具体考量这两个技术的使用,这里的客户端不一定是指最终客户端,因为J2EE是多层结构,中间层可能在多个服务器上实现,如果一个服务器上的服务是供另外一个服务器上的应用访问的,那么后者我们也称为客户端。
根据应用的复杂程度和要求不同,分下列情况:
1.在WEB层可以实现的一些应用
如果你的系统没有很复杂的事务处理,或访问很多企业原有的资源,那么可以借助javabean这样的一些Help性质的类来实现你的应用,但是,这样的方案不是最干净clean,
最有效efficient, 或最有扩展性的scalable。
否则,将所有核心计算放置入EJB中。
2.所有的复杂商务计算核心都在EJB中完成
如果你的客户端和服务器端之间有防火墙,那么目前能够无障碍通过防火墙的协议只有Http了(Web
Service也是基于http就是这个道理),既然使用http了,而Servlet是基于Http协议的,那么就需要通过servlet来访问EJB,这是我们最普遍的应用情况。
但是,如果你的客户端和服务器端可以放置在一个网络内,之间没有防火墙,那么就不必使用Servlet,直接使用Java调用RMI来访问EJB,这样性能是最好的,这时的Servlet大概只有用于控制Jsp的页面的输出了(MVC模式中的控制作用)。
如果是非java客户端,可以通过CORBA组件来访问EJB。
3.如果你的应用对速度要求很高,要求非常快,对于事务处理等方面几乎无要求
直接使用J2SE,加上线程池和对象池技术,将会使你的java系统性能发挥极致。Jakarta.Apache.org有这两种技术的源码,线程池可以从Servlet容器Tomcat的源码中发现。
J2EE到底是什么的更多相关文章
- J2SE J2EE J2ME的区别
J2SE J2EE J2ME的区别 J2SE J2EE J2ME的区别多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不 ...
- jdk,j2ee,j2se,j2me的概念区别
jdk,j2ee,j2se,j2me的概念区别1.JDK是Java development toolkit,相当于是Java的库函数,是编译,运行java程序的工具包.J2EE是Java 2 ente ...
- j2ee概览
J2EE诞生的背景是什么?Java 2平台企业版,也就是J2EE,定义了开发多层企业应用程序的标准.它的诞生并不是偶然的,它是在各种条件积累成熟之下的产物.原因之一:java语言的巨大成功.1994年 ...
- 【java】J2EE、J2SE和J2ME的区别
本文向大家简单介绍一下J2EE.J2SE.J2ME概念及区别,J2EE,J2SE,J2ME是java针对不同的的使用来提供不同的服务,也就是提供不同类型的类库. Java2平台包括:标准版(J2SE) ...
- 以EJB谈J2EE规范
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xiaoduishenghuogo/article/details/24800703 接触J2EE的时 ...
- JDK、J2EE、J2SE、J2ME的区别
JDK.J2EE.J2SE.J2ME的区别 你对JDK.J2EE.J2SE.J2ME概念是否了解,这里和大家分享一下JDK.J2EE.J2SE.J2ME的概念以及他们的关系区别,相信本文介绍一定会让你 ...
- 转载 j2ee j2se j2me 区别,mvc 和ssh联系理解
[转]J2SE J2EE J2ME的区别 以及 MVC与SSH对应关系 2014-3-6阅读322 评论0 J2SE J2EE J2ME的区别多数编程语言都有预选编译好的类库以支持各种特定的功能,在J ...
- [转载]JDK、SDK、J2EE、J2SE、J2ME的区别
[转载]JDK.SDK.J2EE.J2SE.J2ME的区别 来源: https://www.cnblogs.com/liangyihui/p/5905875.html Java的名词真的是多啊 JDK ...
- 走进JavaWeb技术世界1:Web后端与J2EE的由来
转自:微信公众号 码农翻身 这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求 ...
随机推荐
- URAL 1957 Wrong Answer 暴力
Wrong Answer 思路: 1.先枚举4的全排列,即球赛的所有可能结果,一共4!=24种情况 2.对于每种情况,DFS 未确定的比赛 的结果,判断这种情况是否可达. 剪枝: 1.对于每种全排列, ...
- hive 学习笔记——表的入门操作和命令
1.受控表(managed table)包括内部表.分区表.桶表: 1.1.分区表 创建分区表: create table banji(id INT,name STRING) partitioned ...
- CTO俱乐部下午茶:技术团队管理中的那些事儿
摘要:"CTO下午茶"是一种有效的集体对话的模式,参加活动的成员在真诚互动和共同学习的宗旨下齐聚一堂,在喝茶聊天氛围下交流工作心得.本期"CTO下午茶"的主题是 ...
- [POJ2828]Buy Tickets(线段树,单点更新,二分,逆序)
题目链接:http://poj.org/problem?id=2828 由于最后一个人的位置一定是不会变的,所以我们倒着做,先插入最后一个人. 我们每次处理的时候,由于已经知道了这个人的位置k,这个位 ...
- System.exit(0)
表示程序正常退出 System.exit(status) 当status非0时,表示程序为非正常退出. status=0, 关闭当前正在运行的虚拟机. 求质因数分解的程序如下: 两种算法: 一种是用S ...
- LA 3516 (计数 DP) Exploring Pyramids
设d(i, j)为连续子序列[i, j]构成数的个数,因为遍历从根节点出发最终要回溯到根节点,所以边界情况是:d(i, i) = 1; 如果s[i] != s[j], d(i, j) = 0 假设第一 ...
- CodeForces Round #290 Fox And Dinner
而是Div2的最后一题,当时打比赛的时候还不会最大流.自己能够把它写出来然后1A还是很开心的. 题意: 有n个不小于2的整数,现在要把他们分成若干个圈.在每个圈中,数字的个数不少于3个,而且相邻的两个 ...
- Asp.Net生成RSS方法
一.RSS简介 什么是RSS? RSS是一种网页内容联合格式(web content sydication format). 它的名字是Really Simple Syndication的缩写. RS ...
- 为apache单独编译mod_rewrite.so
今天要把一个站点搬到一台Red Hat 4.1.2-42系统上,在配置rewrite的时候,发现apache没有mod_rewrite,可能是当初编译apache的时候没有带上 --enable-re ...
- ffmpeg/ffplay vc6 源码剖析
ffmpeg/ffplay是当今多媒体领域的王者,很多很多的人想研究学习ffmpeg/ffplay,但苦于ffmpeg/ffplay庞大的代码量,令人望而生畏.为帮助更多的人研习ffmpeg/ffpl ...