EJB之神秘面纱

实习回来后,发现有点和集体脱节了,什么对于我来说都是神秘的,高大上的!就是怀着这种心情踏上了回家的的路,首先来揭开它的面纱—EJB

一、是什么?

  在这条路上,首先要解决的就是是什么的问题!从官网上查是这样的:

  EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。进一步来说:商务软件的核心部分是它的业务逻辑。业务逻辑抽象了整个商务过程的流程,并使用计算机语言将他们实现。

   J2EE对于这个问题的处理方法是将业务逻辑从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能单纯到只负责发送调用请求和显示处理结果。在J2EE
中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise Java Bean)组件。

二、做什么?

  通俗的来说就是“把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上”那么我们对它的期望是什么呢?

1、提供一个标准的分布的、基于OO的组件架构

2、屏蔽复杂的系统级功能需求

3、Writeonce, run anywhere

4、与非Java应用之间的互操作能力

5、兼容CORBA标准

那么知道了它的期望之后,是不是更想进一步了解它了。

三、整体结构

  接下来就来看看它在J2EE开发中的详细情况:

  通过以上对EJB整体的了解,接下来会进一步介绍它的细节,包括定义客户端访问接口,JMS,拦截器,JPA及打包发布等等。

四、优缺点

   EJB的优点:

1 规范详细性:EJB是一种基于规范性的技术。(这同时构成了EJB的主要优点和主要的缺点)。EJB规范说明书中描述了应用程序执行的各个方面,包括数据类型,组件声明周期,角色分布以及其它的东西。。

2 和J2EE紧密整合:有许多服务器技术以J2EE为中心构建,其中包括EJB和其它一些相关技术,如:servlets、JavaServerPages、Java Message Service、J2EE 连接器架构、Java 数据库连接、JavaAuthentication、Authorization
Service, Java TransactionAPI、JavaMail技术等等。这些技术使J2EE 和 EJB是有机的结合构成一个非常吸引人的解决方案。

3很好的伸缩性:只要你的应用程序服务器通过了大多数的资源管理功能,开发商就可以应用更为复杂的可伸缩算法。

4 有权使用资源管理系统:连同EJB容器一起,你可以获得上千行的代码来访问管理资源,包括事务管理系统、安全管理系统、目录服务。因为有了EJB我们可省去亲手实现的这一部分。

EJB的缺点:

EJB优点表现固然卓著,但是缺点和优点同样显著:

1巨大而复杂的规格说明:对于一个复杂的分布式系统,有一个文档进行说明是一件很合理的事情。但是,并不是所有的文档信息都是真正必需的,EJB的文档反而成了一个非常不便利的工具。

2 庞大的文件:在你开发一个项目之前,你通常需要阅读1000多页的文档。这是部署EJB时非常痛苦的事情。

3 增加程序调试时间:制定EJB解决方案比远比使用普通的Java代码所需的时间长,调试EJB程序也比调试普通的Java代码所需要的时间也长。主要原因是我们不知道bug是出在代码本身还是出在容器上。

4 EJB代码更加复杂:举个例子,为了实现一个sessionbean,你必须写三个类,为了实现一个实体bean,你需写四个类。增加几个部署描述语句,比如说最简单的"Helloworld"程序需要10个文件,而不是一个文件。

5 重复设计的危险:导致这种结果的原因是复杂的文档所致。。如果你没有完全理解EJB的概念,你就不会很好的驾奴它,让它你所用,反之为你所累。

6 维护困难:EJB是一个不断更新的技术,在新技术不断推出的时候,代码需要升级,这就就需要额外的努力和成本来使你的程序和新的EJB容器兼容。

五、总结

1、EJB实现原理: 就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。

2、RMI实现原理 :就是通过Java对象可序列化机制实现分布计算。

3、服务器集群: 就是通过RMI的通信,连接不同功能模块的服务器,以实现一个完整的功能。

时间: 2024-08-03 12:29:44

EJB之神秘面纱的相关文章

ASP.NET 运行时详解 揭开请求过程神秘面纱

对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就一步步揭开请求管道神秘面纱. 上篇回顾 在介绍本篇内容之前,让我们先回顾下上一篇<ASP.NET运行时详解 集成模式和经典模式>的主要内容.在上一篇随笔中,我们提到ASP.NET运行时通过Application的InitInternal方法初始化运行管道.ASP.NET运行时提供了两种初始化管道模

揭开Sass和Compass的神秘面纱

可能之前你像我一样,对Sass和Compass毫无所知,好一点儿的可能知道它们是用来作为CSS预处理的.那么,今天请跟我一起学习下Sass和Compass的一些基础知识,包括它们是什么.如何安装.为什么要使用.基础语法等一些基本知识.需要说明的是我也仅仅只是刚刚接触Sass和Compass,一些高级用法等将不再本文的讨论范围之内.接触一周以后发现Sass和Compass的用处非常大,也打算今后在项目中尝试引进并应用起来.希望读完以后,你跟我一样对Sass和Compass给你带来的东西非常开心,也

揭开.NET消息循环的神秘面纱(GetMessage()无法取得任何消息,就会进入Idle(空闲)状态,进入睡眠状态(而不是Busy Waiting)。当消息队列不再为空的时候,程序会自动醒过来)

揭开.NET消息循环的神秘面纱(-) http://hi.baidu.com/sakiwer/item/f17dc33274a04df2a9842866 曾经在Win32平台下奋战的程序员们想必记得,为了弄清楚“消息循环”的概念,度过多少不眠之夜.尽管如今在应用程序代码的编写过程中,我们已经不再需要它,但是深刻理解Windows平台内部的消息流转机制依然必要.. 在早年直接用Win32/Win16 API写程序的时代,消息循环是我们必须搞懂的第一个观念.现在,不管你用是Windows上面的哪一套

【安全健行】(4):揭开shellcode的神秘面纱

2015/5/18 16:20:18 前面我们介绍了shellcode使用的基本策略,包括基本的shellcode.反向连接的shellcode以及查找套接字的shellcode.在宏观上了解了shellcode之后,今天我们来深入一步,看看shellcode到底是什么.也许大家和我一样,从接触安全领域就听说shellcode,也模糊地知道shellcode基本就是那个攻击载荷,但是shellcode到底长什么样,却一直遮遮掩掩,难睹真容.趁今天这个机会,我们一起来揭开shellcode的神秘面

探秘rand神秘面纱

这位名字很长同学的帖子rand产生出的一个随机函数是递增的里看到对rand.种子值不解,以及老师说"因为相邻两轮循环的时间小于1秒,所以种子值就是相同的,于是随机数就是相同的",勾起了我对rand的兴趣.恰好前几天看the c programming language看到一些实现: unsigned long int next = 1; //rand函数,返回值在0~32767之间的伪随机数. int rand(void){ next = next * 1103515245 + 123

揭开RecyclerView的神秘面纱(二):处理RecyclerView的点击事件

前言 上一篇文章揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用中,主要讲述了RecyclerView的基本使用方法,不同的布局管理器而造成的多样化展示方式,展示了数据之后,一般都会与用户进行交互,因此我们需要处理用户的点击事件.在ListView和GridView提供了onItemClickListener这个监听器,然而我们查找RecyclerView的API却没有类似的监听器,因此我们需要自己手动处理它的点击事件. 以下提供两种方法来实现处理Recycler

揭开源码的神秘面纱,让源码从此无处藏身

开始之前,想问一下大家开发中用的都是哪些反编译软件呢??? 开发过程中,我们总想看一下类的源代码,然后就按住Ctrl,在想看的类上鼠标轻轻一点.呈现在我们面前的现实却是残酷的. 就像图片中展示的那样令人郁闷..瞬间心灰意冷...泪奔有木有... 没事,我们可以使用反编译软件来查看源代码.LZ一直用的就是jd-gui.exe..但是很不方便有木有... 每次都要单独把要反编译的jar包扔进jd-gui.exe的可视化界面去执行..无法直接在myeclipse中查看... 要是能够直接在myEcli

Json系列之四 揭开JsonConfig的神秘面纱 java to json

//揭开JsonConfig的神秘面纱,for bean to json JsonConfig jsonConfig = new JsonConfig(); //忽略掉bean中含后某个注解的field,不转换成json,可以多次增加不同注解 //jsonConfig.addIgnoreFieldAnnotation(Person.class);//一定是注解的类,我这里没有例子,大家可以自己做 //同上 //jsonConfig.addIgnoreFieldAnnotation("person

iOS UIView动画实践(一):揭开Animation的神秘面纱

前言 在一个看脸的社会中,不论什么事物,长得好看总是能多吸引一些目光.App同样不例外,一款面相不错的App就算功能已经被轮子千百遍,依然会有人买账,理由就是看得顺眼,于是平面设计人员越来越被重视.白驹过隙,斗转星移,人们已然不满足于静态的美感,于是动态的用户体验应运而生,平面设计人员捉襟见肘,是我们程序员出马的时候了. 这篇文章是UIView Animation的第一篇,从极简的概念开始,为大家揭开Animation的神秘面纱.我们以一个登录界面为例.美丽的太阳,婀娜的云,还有几个小山包,中间