EJB是什么,什么是EJB

本文介绍了EJB(Enterprise JavaBean)的概念及其应用场景,详细解析了EJB如何通过RMI技术实现分布式应用程序的开发,包括远程方法调用、对象序列化等关键技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是EJB。

EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。后面还有一堆下面再仔细分析。我相信在这么写下去,你就要关闭页签了。
尼玛...什么意思?
好吧,也许你只是来看看EJB是不是适合你的应用场景。如果看到底才发现适合,浪费时间了。

二、应用场景

比较适合:规模大、扩展性高、伸缩性强、多形态客户端(C/S,或者C/S、B/S混合)的应用。
不太适合:纯B/S结构的Web应用;请求、返回、调用能通过自定义协议解决的应用;超大访问并发量的应用。

三、继续什么是EJB。

接“后面还有一堆”。EJB定义。
商务软件的核心部分是它的业务逻辑。业务逻辑抽象了整个商务过程的流程,并使用计算机语言将他们实现。J2EE 对于这个问题的处理方法是将业务逻辑从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能单纯到只负责发送调用请求和显示处理结果。在J2EE 中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise JavaBean)组件。
下面我们来逐句分析
业务逻辑:所谓业务逻辑,并没有什么高大上,就是你平时写的业务逻辑,完全可以翻译成执行特定任务的"类"
抽取、封装、在独立服务器上运行:把原来放到客户端的"类",拿出来不放到客户端了,放到一个组件中,并将这个组件放到一个服务器上去运行。
下面就没有什么好分析的了,把EJB翻译成大白话就是:
把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上了,通过网络访问。
等等等等,听上面的意识,难道EJB 的概念中说的是C/S 软件?
是的,没错,你说的对。
很多人没有看到这一行,直接关闭了页签。
那么EJB和JSP一点关系都没有嘛?
EJB 和JSP 有什么关系?EJB 和JSP 有关系,但是关系还真不怎么大,至多是在JSP 的服务器端调用远端服务上的EJB 类,仅此而已。


以上只是简单解释了EJB是什么,想深入了解,请搜索更深入的文章。


原理?这不就是原理吗。大白话显得不高端么?
好吧,客户端是通过网络对EJB 对象进行调用的,在Java中,能够实现远程对象调用的技术是RMI,也正是EJB技术的基础。
通过RMI 技术,J2EE将EJB 组件创建为远程对象,客户端就可以通过网络调用EJB 对象了。

四、关于RMI

方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。 占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。 远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。
这下明白了吧,没明白?至少高端了吧。
说明白一点:RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。
还是不明白?下面一点点来分析。

四点一

序列化概念:对象的序列化过程就是将对象状态转换成字节流和从字节流恢复对象。将对象状态转换成字节流之后,可以用java.io 包中的各种字节流类将其保存到文件中,或者通过网络连接将对象数据发送到另一个主机
大白话就是:你自定一个类MyClass,或者任何一个类的对象,将它转换成字节数组,那么你当然就可以随便处置了它了,用得最多的就是把他发送到网络上远程的计算机上了。

四点二

远程方法调用:本地计算机调用远程计算机上的一个函数或者说函数

总结:利用对象序列化来实现远程调用

四点三

优点

这种机制给分布计算的系统设计、编程都带来了极大的方便。只要按照RMI 规则设计程序,可以不必再过问在RMI 之下的网络细节了,如:TCP 和Socket 等等。任意两台计算机之间的通讯完全由RMI 负责。调用远程计算机上的对象就像本地对象一样方便。RMI 可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,可以将类似Java 哈西表这样的复杂类型作为一个参数进行传递。

缺点 

如果是较为简单的方法调用,其执行效率也许会比本地执行慢很多,即使和远程Socket机制的简单数据返回的应用相比,也会慢一些,原因是,其在网络间需要传递的信息不仅仅包含该函数的返回值信息,还会包含该对象序列化后的字节内容。4.6 EJB 是以RMI 为基础的通过RMI 技术,J2EE 将EJB 组件创建为远程对象,EJB 虽然用了RMI 技术,但是却只需要定义远程接口而无需生成他们的实现类,这样就将RMI 技术中的一些细节问题屏蔽了。但不管怎么说,EJB 的基础仍然是RMI,所以,如果你想了解EJB 的原理,只要把RMI的原理搞清楚就行了。你也就弄清楚了什么时候用EJB 什么时候不需要用EJB 了。

EJB 是以RMI 为基础的

通过RMI 技术,J2EE 将EJB 组件创建为远程对象,EJB 虽然用了RMI 技术,但是却只需要定义远程接口而无需生成他们的实现类,这样就将RMI 技术中的一些细节问题屏蔽了。但不管怎么说,EJB 的基础仍然是RMI,所以,如果你想了解EJB 的原理,只要把RMI的原理搞清楚就行了。你也就弄清楚了什么时候用EJB 什么时候不需要用EJB 了。

### JavaEE 中 EJB 的概念及用途 #### 什么是 Enterprise JavaBeans (EJB) Enterprise JavaBeans 是一种服务器端组件模型,用于开发部署可扩展的企业级应用程序。EJB 容器提供了一个运行环境,该环境中包含了事务管理、安全性远程访问等功能[^2]。 #### Stateless Session Bean 无状态会话 bean(Stateless Session Bean)是一种不保存任何客户端特定的状态信息的 EJB 组件。这意味着每次调用都是独立的,并且不会受到之前调用的影响。这种类型的 bean 特别适合执行短期任务或处理不需要维护对话上下文的操作。通过 `@EJB` 注解可以方便地将 Stateless Session Bean 注入到其他组件中,例如 Servlet 或者其他的 EJB。 ```java @WebServlet("/exampleServlet") public class ExampleServlet extends HttpServlet { @EJB private MyStatelessBean myStatelessBean; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String result = myStatelessBean.performAction(); response.getWriter().write(result); } } ``` 上述代码展示了如何在一个名为 `ExampleServlet` 的 Servlet 中注入并使用一个名为 `MyStatelessBean` 的 Stateless Session Bean,在接收到 HTTP GET 请求时调用了此 Bean 提供的服务方法并将返回的结果发送给客户端[^3]。 #### EJB 的主要优势 - **简化分布式应用开发**:开发者无需关心底层通信细节,只需专注于业务逻辑实现; - **自动资源管理**:容器负责线程池、连接池等重要资源的有效利用; - **声明式编程支持**:允许程序员以更简洁的方式定义安全性策略、事务边界等特性而不用编写大量样板代码; - **高可用性与负载均衡能力**:借助集群技术提高系统的稳定性性能表现; 综上所述,EJB 技术为企业级软件提供了强大的基础设施支撑服务保障机制,使得构建复杂度较高的多层架构成为可能的同时也降低了整体项目的维护成本技术风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值