EJB与JAVA BEAN的区别?
Java Bean是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常通常情况下,由于Java Bean是被容器所创建(Tomcat)的,所以Java Bean应具有一个无参构造器,另外,通常Java Bean 还要实现Serializeble接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。
Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被部署在诸如Webspere、WebLogic 这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。
EJB的几种类型
会话(Session)Bean、实体(Entity)Bean、消息驱动的(Message Driven)Bean;
会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种;
实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种。
remote接口和home接口的主要作用
remote接口定义了业务方法,用于EJB客户端调用的业务方法;
home接口是EJB工厂用于创建和移除查找EJB实例。
客户端口调用EJB对象的几个基本步骤
设置JNDI服务工厂以及JNDI服务地址系统属性,查找Home接口,从Home接口调用Create方法创建Remote接口,通过Remote接口调用其业务方法。
EJB的角色和三个对象
一个完整的基于EJB的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循Sun公司提供的EJB规范,以保证彼此之间的兼容性。这六个角色分别是EJB组件开发者(Enterprise Bean Provider)、应用组合者(Application Assembler)、部署者(Deployer)、EJB服务器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系统管理员(System Administrator),这里面EJB容器是EJB之所以能够运行的核心。EJB容器管理着EJB的创建、撤销、激活、去活,与数据库的连接等等重要的核心工作;三个对象是Remote(Local)接口、Home(LocalHome)接口、Bean类。
EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。
EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JTA等技术实现。
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。
对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
Session Bean还可以在仔细分为Stateful Session Bean 与Stateless Session Bean,这两种的Session Bean 都可以将系统逻辑放在 Method 之中执行,不同的是Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者惠友一个相对应的Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的实体来执行这个 Method。换言之,很可能在数个使用者在执行某个Stateless Session Bean 的 Methods时,会是同一个 Bean 的 Instance在执行。从内存方面来看,Stateful Session Bean 与Stateless Session Bean 比较,Stateful Session Bean 会消耗J2EE Server 较多的内存,然而Stateless Session Bean 的优势却在于他可以维持使用者的状态。
Bean 实例的生命周期
对于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在缓冲池管理,而对于Entity Bean和Statefull Session Bean存在Cache管理,通常包含创建实例,设置上下文、创建EJB Object (create)、业务方法调用、remove等过程,对于存在缓冲池调用机制不断重用实例,而对于存在Cache管理的Bean则通过激活和去激活机制保持Bean的状态并限制内存中实例数量。
EJB的激活机制
以Stateful Session Bean 为例;其Cache大小决定了内存中可以同时存在的Bean实例的数量,根据MRU或NRU算法,实例在激活状态之间迁移,激活机制是当客户端调用某个EJB实例业务方法时,如果对应EJB Object 发现自己没有绑定对应的Bean实例则从其去激活Bean存储中(通过序列化机制储存实例)回复(激活)此实例。状态变迁前会调用对应的EJBACtion和EJBPassivate方法。
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
SessionBean:Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用State Session Bean的方法时容器会把调用分派到此客户机相关联的Bean实例。EntityBean;EntityBean能存活相对较长的时间,并且状态时持续的。只要数据库中的数据存在,Entity Beans 就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity Beans也是存活的。Entity Beans生命周期能够被容器或事务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API (JTA),开发组(X/Open)的XA接口。
EJB的事务是如何实现的?何时进行回滚。
是通过使用容器或Bean自身管理事务的;当产生一个系统异常时容器就自动回滚事务。
EJB容器提供的服务
主要提供生命周期管理、代码产生、持续性管理、安全、事务管理、锁和并发管理等服务。
EJB需直接实现它的业务接口或Home接口吗?
远程接口和Home接口不需要直接实现,他们的实现代码是由服务器产生的,程序运行中对应实现类会作为对应接口类型的实例被使用。
请对以下在J2EE中常见的名词进行解释
web容器:给处于其中的应用程序组件(JSP、SERVLET)提供一个环境,是JSP、SERVLET直接跟容器中的环境变量接口交互,不必关注其他系统问题。主要由WEB服务器来实现。例如:TOMCAT、WEBLOGIC、WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION标准。我们把遵守以上标准的WEB 服务器就叫做J2EE中的WEB容器;
EJB容器:Enterprise java bean容器。更具有行业领域特色。它提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮箱服务、事务管理;
JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其他各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能;
JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播;
JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可;
JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略;
RMI / IIOP:(Remote Method Invocation / internet 对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供了股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。
J2EE是什么
J2EE是Sun公司提供多层(muIti-diered),分布式(distributed),基于组件(conponent-base)的企业级应用模型(enterpriese application model),在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户曾(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。
J2EE是技术还是平台还是框架
J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台;J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。
请写出spring中IOC的三种实现机制。
三种机制为:通过setter方法注入、通过构造方法注入和接口注入。
常用的开源框架及其作用
框架:Hibernate、Spring、Struts;
Hibernate主要用于数据持久化;
Spring的控制反转能起到解耦合的作用;
Struts主要用于流程控制。
EJB规范规定EJB中禁止的操作有哪些?
1、不能操作线程和线程API(线程API指非线程对象的方法,如notify、wait等);
2、不能操作awt;
3、不能实现服务器功能;
4、不能对静态属性存取;
5、不能使用IO操作直接存取文件系统;
6、不能加载本地库;
7、不能将this作为变量和返回;
8、不能循环调用。