阅读更多
1.
在简单的场合中,Entity Bean 的架构可以直接对映成一个数据表,只是
Entity Bean 中的Relationships 可以使用数据库的Primary Key 以及Foreign
Key 来取代。
2.
a.用户调用一个存根程序(Stub),它是一个客户端代理对象。这个存根程序负责处理与客户端的网络通信。存根程序知道怎样使用Socket在网络中进行调用和将参数映射到网络的表达方式。
b.存根程序通过网络调用一个叫做框架程序(Skeleton)的服务器端代理对象,框架程序(Skeleton)处理来自分布式对象的通信。框架程序(Skeleton)知道如何通过Socket来接收一个调用,而且它也能将参数的网络表达方式映射为java表达方式。
c.框架程序(Skeleton)将调用委托给分布式对象。分布式对象完成了它的工作之后,将控制权转给框架程序(Skeleton),框架程序(Skeleton)接着又将控制权转给存根程序(Stub),存根程序(Stub)最后将控制权转给客户端。
这里的一个关键之处在于存根程序和分布式对象实现同一个接口(叫做远程接口),这就是说,存根程序复制了分布式对象的方法特征。一个客户端程序调用了一个存根程序上的方法时,会认为它是在直接调用分布式对象上的方法。实际上,客户端程序只是调用了一个空的存根程序,而这个存根程序知道如何处理网络问题。这被称作本地/远程透明性。
3.
相比之下,实体bean的生命周期可以是几个月,甚至是几年。因为实体Bean是持久性对象,实体B阿安可能是某一持久性存储器,如数据库的一部分。实体Bean可以通过从数据库获取数据在内存中创建,它们可以长时间地存在。
会话B阿安是非持久性对象,这就意味着会话Bean并不存储于永久性存储器中,这和实体Bean不一样。要注意的是,会话Bean可以对数据库进行操作,但本身不是持久性对象。
4.
为了限制会话Bean实例在内存中的数量,EJB容器将状态会话Bean交换出去,其对话状态存在硬盘或其他存储器中,这种做法叫做钝化(passivation)。状态会话Bean被钝化后,对话状态被安全的存储起来,使得内存等资源能被重新使用。当被钝化的Bean原先的客户端对其触发方法进行调用时,被钝化的对话状态重新交换给Bean,这种做法叫做激活(activation)。接收激活状态的Bean可能不是原先的Bean实例。但是这并没有关系,因为新的Bean实例从原先的Bean实例钝化时的那一点重新开始对话。这样看来,EJB实际上能够实现状态会话Bean的调度池调度(pooling)。当又很多客户端调用时,内存中也只能又有限的几个Bean实例,而且调度池调度时又代价的,钝化/激活过程可能导致I/O瓶颈。这一点与无状态会话Bean形成鲜明的对比。
5.
对象序列化是一种将对象轮廓转变为紧凑的表现形式的简易方法。当您序列化一个对象轮廓时,就是将它转换为一个字符流。然后,就可以对这个字符流作任何想要作的处理,比如通过网络发送这些数据(也就是Java RMI怎样通过网络传送参数),或者可以将这个字节流存放到一个存储空间中,例如文件系统,数据库或JNDI树。
6.
实体Bean类 映射一个数据库模式中的一个实体定义。例如,一个实体Bean类可映射一个关系型表的定义。在这种情况下,该类的一个实体Bean实例将映射那个表中的一行。
7.
ejbLoad()从持久存储空间读入数据到实体Bean在内存的域中。
ejbStore()保存Bean实例的当前域到底层的数据存储空间,它是ejbLoad()补充。
ejbLoad()和ejbStore()是通过容器来调用的,能够调用返回的方法,他们是EJB所必需处理方法。容器会考虑什么时候是调用ejbLoad(),ejbStroe()。
8.
会话bean、消息驱动bean和实体bean都是单线程的。