个性化阅读
专注于IT技术分析

有状态会话Bean

本文概述

有状态会话Bean是一个业务对象, 代表无状态会话Bean之类的业务逻辑。但是, 它维护状态(数据)。

换句话说, 容器在有状态会话Bean中维护多个方法调用之间的会话状态。


有状态会话Bean中使用的注释

有状态会话Bean中使用5个重要的注释:

  1. @状态
  2. @PostConstruct
  3. @PreDestroy
  4. @PrePassivate
  5. @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);}
	}
}
赞(0)
未经允许不得转载:srcmini » 有状态会话Bean

评论 抢沙发

评论前必须登录!