`

Servlet 线程池 和 EJB 对象池

阅读更多
Servlet 线程池 和 EJB 对象池


目前所有的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的源码中发现。

分享到:
评论

相关推荐

    WebSphere环境下EJB编程

    在WebSphere应用服务器中,EJB可以与其他Java EE组件如Servlet、JSP、JMS、JPA等协同工作,构建高效、健壮的企业级应用程序。 1. **EJB类型** - **会话Bean(Session Beans)**:代表一个短暂的业务逻辑交互,分为...

    java笔试题大集合及答案(jsp-java-ejb公司笔试题)

    - **Servlet与JSP的关系**:JSP最终会被编译为Servlet,理解两者之间的转换过程和生命周期。 3. **EJB(Enterprise JavaBeans)**: - **EJB类型**:会话bean(Stateless和Stateful)、实体bean(Entity Bean, ...

    WebLogic Server性能调优

    文档中提到了多种池资源的使用,如JDBC连接池、套接字池、对象池和线程池。它们有助于资源重用、降低请求处理的延迟和提升整体吞吐能力。例如,对象池的使用可以减少对象创建和销毁的开销,通过对象的获取和返回实现...

    解放军理工大学信息处理教研室 J2EE 电子讲义 PPT

    J2EE应用的性能优化涉及内存管理、线程池、数据库连接池、缓存策略以及代码优化等多个方面。理解和掌握这些技巧对于实现高效的企业级应用至关重要。 10. **安全性** J2EE提供了多种安全机制,包括角色基的安全...

    How Tomcat Works中文

    3. **调用Servlet的Service方法**:将请求和响应对象传递给相应的Servlet,执行业务逻辑并生成响应内容。 #### 六、Catalina架构分析 Catalina是Tomcat的核心组件,其设计既复杂又优雅,采用模块化结构。从功能...

    J2EE基础,设计模式

    它提供了丰富的API和服务,包括Servlet、JSP、EJB(Enterprise JavaBeans)、JMS(Java Message Service)等,来支持Web应用的开发。J2EE的基础知识涵盖了许多方面,如服务器端组件模型、网络服务、数据库连接以及...

    开发高效率的J2EE企业应用

    优化容器配置,如线程池大小、连接池参数,能有效提升应用性能。同时,了解并利用容器的缓存机制,如EJB的二阶缓存,可减少不必要的数据库访问。 2. **Servlet和JSP优化**:Servlet是J2EE应用的基础,优化Servlet的...

    J2EE完全参考手册-J2EE部署

    有三种类型的EJB:会话bean(处理客户端请求)、实体bean(表示数据库中的持久对象)和消息驱动bean(处理消息队列)。 6. **JMS(Java Message Service)**:JMS是Java平台的消息传递标准,用于异步通信。在J2EE...

    J2EE5.0API(帮助手册).rar

    异步处理和线程池** J2EE 5.0引入了对异步处理的支持,允许在后台线程中执行任务,提高了应用的响应速度。 通过深入学习J2EE 5.0 API,开发者能够熟练掌握企业级Java开发的各种工具和技术,构建出高效、稳定且易于...

    java数据库笔试面试

    在Java数据库笔试面试中,掌握的关键知识点广泛而深入,涵盖了Java基础、JSP、Servlet、EJB、数据库操作以及多线程等多个方面。以下是对这些关键领域的详细解析: 1. **Java基础**: - **数据类型与变量**:了解...

    Teach Yourself J2EE in 21 Days

    J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司推出的用于构建企业级分布式应用的平台,它提供了一系列的服务和组件,包括Java服务器页面(JSP)、Servlet、JavaServer Beans(EJB)、Java Message ...

    Java中文网址大全(绝对经典)

    7. **反射机制**:通过反射来动态调用方法、创建对象和访问私有成员,理解其在插件化和框架中的应用。 8. **JDBC**:连接数据库,执行SQL语句,了解连接池和预编译语句。 9. **Java 8及更高版本的新特性**:Lambda...

    Java.Web应用开发.J2EE和Tomcat第2版

    6. **JNDI(Java Naming and Directory Interface)**:JNDI是Java平台的标准服务,用于查找和绑定网络资源,如EJB或数据库连接池。在J2EE应用中,JNDI常用于查找和管理企业级组件。 7. **安全和认证**:书本还会...

    Java服务器高级编程

    10. **性能优化**:高级主题可能包括服务器性能监控、调优技巧、内存管理和线程池的使用,以提升Java EE应用的效率。 为了充分理解和应用这些知识,读者需要有扎实的Java基础,并对Web开发有一定的了解。配合给出的...

    J2EE架构师手册

    Web容器负责管理Servlet和JSP,而EJB容器负责管理EJB组件。这些容器提供了诸如安全性、事务管理、资源连接池、生命周期管理等服务。 四、分布式通信 J2EE支持多种协议进行分布式通信,如RMI(Remote Method ...

    Thinking in Enterprise Java.rar

    1. **Java EE(Java Platform, Enterprise Edition)基础**:Java EE是企业级应用开发的标准框架,提供了诸如Servlet、JSP、EJB等组件模型,用于构建可扩展、高性能和安全的服务器端应用。 2. **Servlet技术**:...

    2013年最新J2EE面试资料

    掌握连接池的使用,如C3P0、DBCP或Apache DBCP2,以及事务处理和SQL优化是重要的面试知识点。 4. **EJB(Enterprise JavaBeans)**:2013年时,EJB3.x版本已经普及,重点包括无状态会话Bean、有状态会话Bean、消息...

    CoreJ2EEPatterns2.zip_practice

    Servlet和JSP常用于实现控制器和视图,而业务逻辑通常由EJB或简单Java类提供。 6. **前端控制器(Front Controller)模式**:在大型Web应用中,所有请求都通过一个中心控制器进行处理,它可以协调处理流程,执行...

    JAVA2深度历险

    它们是基于Java EE平台的组件和服务,如Servlet、JSP、EJB、JMS和JDBC等,经过长期发展和经验积累形成的一套通用解决方案。例如,"Session Bean无状态化"模式可以提高EJB的性能和可伸缩性,"Model-View-Controller ...

Global site tag (gtag.js) - Google Analytics