欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习札记2006-10-4 Bean框架EJBSocket工作 

程序员文章站 2022-07-12 16:56:53
...
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都是单线程的。