EJB3.0学习之session bean

 

一、

开发只存在Local 接口的无状态Session Bean
开发只存在Local接口的无状态会话Bean的步骤和上节开发只存在Remote接口的无状态会话Bean的步骤相同,
两者唯一不同之处是,前者使用@Remote 注释指明实现的接口是远程接口,后者使用@Local 注释指明实现的接口
是本地接口。当@Local 和@Remote 注释都不存在时,会话 Bean 实现的接口默认为Local 接口。如果在本机调用
EJB(确保客户端与EJB 容器运行在同一个JVM),采用Local 接口访问EJB 优于Remote 接口,因为Remote接口
访问EJB 需要经过远程方法调用(RPCs)环节,而Local 接口访问EJB 直接从JVM 中返回EJB 的引用。下面是只存
在Local 接口的无状态会话Bean 代码。
LocalHelloWorld.java
//author:lihuoming
package com.foshanshop.ejb3;
public interface LocalHelloWorld {
public String SayHello(String name);
}
LocalHelloWorldBean.java
//author:lihuoming
package com.foshanshop.ejb3.impl;
import javax.ejb.Local;
import javax.ejb.Stateless;
import com.foshanshop.ejb3.LocalHelloWorld;
@Stateless
@Local ({LocalHelloWorld.class})
public class LocalHelloWorldBean implements LocalHelloWorld {
public String SayHello(String name) {
return name +"说:你好!世界,这是一个只具有Local接口的无状态Bean";
}
}

 

开发存在Remote 与Local 接口的无状态Session Bean
在实际应用中,一个无状态Session Bean都应该实现Remote与Local接口。当会话Bean的某些方法只供EJB
容器内部调用而不对外暴露时,可以把他定义在Local接口。本节介绍如何开发一个具有Remote与Local 接口的
无状态Session Bean。开发前先介绍一下两个接口具有的方法,两者都含有方法Add(int a, int b),而Local接口含
有一个自己的方法:getResult()。下面是例子的源代码。
定义远程接口:Operation.java
//author:lihuoming
package com.foshanshop.ejb3;
public interface Operation {
public int Add(int a, int b);
}
定义本地接口:LocalOperation.java,本地接口具有远程接口的所有方法,另外有自己的方法getResult()
//author:lihuoming
package com.foshanshop.ejb3;
public interface LocalOperation extends Operation {
public int getResult();
}

二、  有状态Bean是一个可以维持自身状态的会话Bean。每个用户都有自己的一个实例,在用户的生存期内,Stateful Session Bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),Stateful Session Bean的生命期也告结束。即每个用户最初都会得到一个初始的Stateful Session Bean。Stateful Session Bean 的开发步骤与Stateless Session Bean的开发步骤相同。

  stateful session bean必须实现Serializable接口,这样EJB容器才能在她们不再使用时序列化存储她们的状态信息.

  这两种Session Bean都可以将系统逻辑放在方法之中执行,不同的是Stateful Session Bean可以记录呼叫者的状态,因此一个使用者会有自己的一个实例。Stateless Session Bean虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean的时候,EJB 容器并不会寻找特定的Stateless Session Bean的实体来执行这个method。换言之,很可能数个使用者在执行某个Stateless Session Bean的methods时,会是同一个Bean的实例在执行。从内存方面来看,Stateful Session Bean与Stateless Session Bean比较,Stateful Session Bean会消耗J2EE Server 较多的内存,然而Stateful Session Bean的优势却在于他可以维持使用者的状态。

 

 

你可能感兴趣的:(jvm,bean,ejb)