本文概述
有状态会话Bean是一个业务对象, 代表无状态会话Bean之类的业务逻辑。但是, 它维护状态(数据)。
换句话说, 容器在有状态会话Bean中维护多个方法调用之间的会话状态。
有状态会话Bean中使用的注释
有状态会话Bean中使用5个重要的注释:
- @状态
- @PostConstruct
- @PreDestroy
- @PrePassivate
- @PostActivate
有状态会话Bean的示例
为了开发有状态会话bean应用程序, 我们将使用Eclipse IDE和glassfish 3服务器。
如前面的示例中所述, 你需要创建bean组件和bean客户端来创建会话bean应用程序。
1)创建有状态的bean组件
让我们创建一个远程接口和一个用于开发有状态bean组件的bean类。
文件:BankRemote.java
package com.srcmini;
import javax.ejb.Remote;
@Remote
public interface BankRemote {
boolean withdraw(int amount);
void deposit(int amount);
int getBalance();
}
文件:Bank.java
package com.srcmini;
import javax.ejb.Stateful;
@Stateful(mappedName = "stateful123")
public class Bank implements BankRemote {
private int amount=0;
public boolean withdraw(int amount){
if(amount<=this.amount){
this.amount-=amount;
return true;
}else{
return false;
}
}
public void deposit(int amount){
this.amount+=amount;
}
public int getBalance(){
return amount;
}
}
2)创建有状态的bean客户端
有状态Bean客户端可以是本地, 远程或Web服务客户端。在这里, 我们将创建基于Web的客户端, 而不使用依赖项注入。
文件:index.jsp
<a href="OpenAccount">Open Account</a>
文件:operation.jsp
<form action="operationprocess.jsp">
Enter Amount:<input type="text" name="amount"/><br>
Choose Operation:
Deposit<input type="radio" name="operation" value="deposit"/>
Withdraw<input type="radio" name="operation" value="withdraw"/>
Check balance<input type="radio" name="operation" value="checkbalance"/>
<br>
<input type="submit" value="submit">
</form>
文件:operationprocess.jsp
<%@ page import="com.srcmini.*" %>
<%
BankRemote remote=(BankRemote)session.getAttribute("remote");
String operation=request.getParameter("operation");
String amount=request.getParameter("amount");
if(operation!=null){
if(operation.equals("deposit")){
remote.deposit(Integer.parseInt(amount));
out.print("Amount successfully deposited!");
}else
if(operation.equals("withdraw")){
boolean status=remote.withdraw(Integer.parseInt(amount));
if(status){
out.print("Amount successfully withdrawn!");
}else{
out.println("Enter less amount");
}
}else{
out.println("Current Amount: "+remote.getBalance());
}
}
%>
<hr/>
<jsp:include page="operation.jsp"></jsp:include>
文件:OpenAccount.java
package com.srcmini;
import java.io.IOException;
import javax.ejb.EJB;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/OpenAccount")
public class OpenAccount extends HttpServlet {
//@EJB(mappedName="stateful123")
//BankRemote b;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try{
InitialContext context=new InitialContext();
BankRemote b=(BankRemote)context.lookup("stateful123");
request.getSession().setAttribute("remote", b);
request.getRequestDispatcher("/operation.jsp").forward(request, response);
}catch(Exception e){System.out.println(e);}
}
}
评论前必须登录!
注册