📄 ejb2.txt
字号:
一、ejb所用的技术
rmi:remote method invoke远程方法调用
jndi:java naming directory interface java的命名目录接口
连接池:在池中预放n个连接,用时直接取,用完还可以放回去。
二、ejb的分类
实体bean:持久化到数据库中
cmp:容器管理的实体bean,不需要写sql
bmp:bean管理的实体bean,需要写sql
Users就是一个实体对象
会话bean:主机重启之后信息消失
无状态:方法间不保留状态。Facade
有状态:方法间保留状态。
Facade
消息bean:异步,发送一个消息后将消息放到服务端的
消息队队列中,客户端不等待。
三、ejb的实现,各类及接口的作用?
bean类,在服务端提供真正的服务。
public class ServerBean implments SessinBean/EntityBean
{
//在创建ejb时调用,通过home接口的create方法
//调用服务端的ejbCreate方法
public UserPK ejbCreate(UsersData ud)
{
}
//有一个create方法必有一个ejbPostCreate方法
public void ejbPostCreate(UsersData ud)
{
}
//ejb钝化前调用,通过它释放相关的资源
public void ejbPassivate()
{
}
//ejb激活前调用
public void ejbActivate()
{
}
//删除ejb
public void ejbRemove()
{
}
//远程方法
public String sayHello(String name)
{
System.out.println("hello "+name);
return "hello "+name;
}
}
home接口:通过jndi名得到的是home接口,通过home接口的create方法
调用服务端的ejbCreate方法,在服务端产生ejb服务实例
向客记端返回远程接口,通过远程接口调用服务端的相关
方法执行。
public interface MyHome extends EJBHome
{
public MyRemote create(UsersData data) throws RemoteException;
}
remote接口:通过home接口的create方法调用服务端服务bean的ejbCreate方法
向客户端返回一个远程接口就是remote,通过它直接
调用服务端服务bean的方法。
public interface MyRemote extends EJBObject
{
public String sayHello(String name) throws Exception;
}
三、实体bean的生命周期
1、不存在:没有
通过home接口的create方法调用服务端的ejbCreate方法,从不存在
进入就绪状态。
2、入池:有ejb实例但没有加载具体数据
入池到就绪是激活,在激活前,调用ejbActivate方法加载相关的资源
就绪到入池是钝化,在钝化前,调用ejbPassivate方法释放相关的资源。
3、就绪:数据已加载,可以直接调用bean的方法,
可以修改bean的属性值,可删除bean
四、ejb的调用过程
1、得到上下文的环境
2、在上下文环境,通过lookUp方法得到一个home接口
3、通过home接口的create方法在服务端产生一个ejb实例,
向客户端返回一个远程接口。
4、客户端通过远程接口调用服务端相关类的方法。
五、ejb2相关配置文件
ejb-jar.xml:说明两个接口一个类、ejb的类型、ejb的属性
ejb的查询sql,形成一个ejb,说明那些方法需要
事务。
通用配置,所有容器ejb-jar.xml文件的配置是一样的。
weblogic-cmp-rdbms-jar.xml:说明ejb名与数据库表
ejb属性与数据库字段的对应关系、
说明连接池。
只针对weblogic容器的配置信息。
weblogic-ejb-jar.xml:给ejb一个jndi名
只针对weblogic容器的配置信息。
ejb2.0的配置文件
1、ejb-jar.xml:是通用的配置文件,所有有容器都一样,
说明两个接口一个类形成一个ejb,说明bean的类型,
如果是实体说明实体bean的属性、说明bean事务的拦截
处理方式。
2、weblogic-rdbms-ejb-jar.xml:说明连接池名、实体bean与表,字段与
属性的对应关系。
3、weblogic-ejb-jar.xml:针对当前ejb给定一个jndi名。
ejb2.0的两个接口一个类
1、服务端的bean类,在服务提供真正的服务。
public class MyServerBean implements SessionBean/EntityBean
{
//通过home接口的create方法调用服务端的ejbCreate
//方法在服务产生一个ejb实例,向客户端返回一个远程接口
public void ejbCreate(UsersData data)
{
}
//对于实体bean有一个ejbCreate方法必须一个ejbPostCreate方法
public void ejbPostCreate(UsersData data)
{
}
//ejb钝化前系统自动调用,释放相关的资源
public void ejbPassivate()
{
}
//ejb激活前系统自动调用,加载相关的资源
public void ejbActivate()
{
}
//删除一个ejb,通过远程接口的remove
//方法调用服务端的ejbRemove方法删除ejb
public void ejbRemove()
{
}
public String sayHell(String name)
{
System.out.println("hell "+name);
return "hello "+name;
}
}
2、home接口:通过jndi名得到是home接口,通过home接口的create
方法在服务端产生一个ejb实例,向客户端返回一个远程接口。
对于实体bean通过find方法在服务端找到一个ejb实例,向客
户端返加一个远程接口或远程接口集合(Collection)。
public interface MyHome extends EJBHome
{
public MyRemote create() throws RemoteException;
public MyRemote findByPrimaryKey(UsersPK pk) throws RemoteException;
public MyRemote findLogin(String userName,String pwd) throws RemoteException;
public Collection findAll() throws RemoteException;
}
3、远程接口:可以直接调用服务端相关类的方法
public interface MyRemote extends EJBObject
{
public String sayHell(String name) throws RemoteException;
}
远程调用与本地调用的区别
远程调用:在ejb1.0中只有远程调用,没有本地调用
本地调用:ejb2.0才出现本地调用
相同点:
都可以调用服务端bean的方法。
服务端的类是一样的
不同点:
远程:可以跨主机、跨系统的调用服务端bean类的方法
占用网络资源。
远程调用是通过远程接口调用
home接口的实现
public interface extends EJBHome
{
}
远程接口的实现
public interface extends EJBObject
{
}
本地:当客户端与服务器在同一台主机时才调用。
速度快,但范围很局限。
本地调用是通过本地接口调用的
本地接口的实现
home接口的实现
public interface extends EJBLocalHome
{
}
远程接口的实现
public interface extends EJBLocalObject
{
}
ejb2的最大价值:
分布式,一台主机不够用多,多台主机并发处理。
一、ejb2的两个接口一个类
服务bean:在服务端提供具体的服务,在服务端运行。
远程home接口:在服务端产生具体的的服务bean
向客户端返回一个远程接口,在客户端运行。
远程接口:可以直接调用服务bean的相关方法,相当于一个遥控器,
在客户端运行。
二、ejb2的具体实现
服务bean:
public class ServerBean implements SessionBean/EntityBean
{
//在实例化时调用
public String ejbCreate()
{
}
//对于实体bean有一个ejbCreate方法必对应一个ejbPostCreate方法
public String ejbPostCreate()
{
}
//删除一个ejb
pulbic void ejbRemove()
{
}
//在钝化前调用
public void ejbPassivate()
{
}
//在激活前调用
public void ejbActivate()
{
}
//
public String sayHello(String name)
{
System.out.println("hello "+name);
return "hello "+name;
}
}
远程home接口:通过jndi名得到是home接口,通过home接口的create方法
调用服务端服务bean的ejbCreate方法,在服务端产生一个ejb实例,
向客户端返回一个远程接口。
public interface ClientHome extends EJBHome
{
public CleintRemote create() throws RemoteException;
}
远程接口:可以直接调用服务端服务bean的方法,服务端服务bean
公开的方法,远程接口也有对应的方法。
public interface ClientRemote extends EJBRemote
{
public String sayHello(String name) throws RemoteException;
}
三、ejb的调用过程
客户端通过jndi名得到一个远程home接口,home接口通过create方法调用
服务端的ejbCreate方法在服务端产生一个服务bean实例,向客户端返回一个
远程接口,客户端通过远程接口直接调用服务端服务bean的方法。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -