有状态会话bean的开发,首先创建远程接口:
@Remote
public interface HelloRemote {
String sayHi();
void init(String name);
void remove();
}
public interface HelloRemote {
String sayHi();
void init(String name);
void remove();
}
接着开发有状态会话bean:
@Stateful
public class HelloBean implements HelloRemote {
private String name;
private Logger log = Logger.getLogger(this.getClass().getName());
public String sayHi() {
return "Hi " + name;
}
public void init(String name) {
this.name = name;
}
@PostConstruct
public void postConstrut(){
log.info("create " + this);
}
@PreDestroy
public void preDestory(){
log.info("destory " + this);
}
@PostActivate
public void postActivate(){
log.info("activate " + this);
}
@PrePassivate
public void prePassivate(){
log.info("passivate " + this);
}
@Remove
public void remove(){
log.info("remove " + this);
}
}
public class HelloBean implements HelloRemote {
private String name;
private Logger log = Logger.getLogger(this.getClass().getName());
public String sayHi() {
return "Hi " + name;
}
public void init(String name) {
this.name = name;
}
@PostConstruct
public void postConstrut(){
log.info("create " + this);
}
@PreDestroy
public void preDestory(){
log.info("destory " + this);
}
@PostActivate
public void postActivate(){
log.info("activate " + this);
}
@PrePassivate
public void prePassivate(){
log.info("passivate " + this);
}
@Remove
public void remove(){
log.info("remove " + this);
}
}
@Stateful注释表明这是一个有状态会话bean,其他的注释是管理会话bean的生命周期。@PostConstruct注释表明方法将会在bean实例化并完成依赖注入后由容器调用此方法;@PreDestory注释表示方法会在容器删除bean实例前由容器调用;以上两个注释所有的EJB(包括MDB)都可以用。@PostActivate注释表示容器在激活bean后调用此方法;@PrePassivate注释表示容器在钝化bean前调用此方法;以上两个注释是有状态会话bean所特有。@Remove注释也是有状态会话bean所特有,也是用户唯一可以能控制的生命周期方法,一旦用户在客户端调用此方法,容器将删除bean实例。接着看客户端的测试代码:
<%
InitialContext ctx = new InitialContext();
HelloRemote helloBean = (HelloRemote)ctx.lookup(HelloRemote. class .getName());
helloBean.init( " Tom " );
out.println(helloBean.sayHi());
helloBean.remove();
%>
InitialContext ctx = new InitialContext();
HelloRemote helloBean = (HelloRemote)ctx.lookup(HelloRemote. class .getName());
helloBean.init( " Tom " );
out.println(helloBean.sayHi());
helloBean.remove();
%>
很简单,只是多调用了一个remove方法。