码迷,mamicode.com
首页 > 其他好文 > 详细

Ejb in action(四)——购物车实例演示有状态会话Bean

时间:2014-05-15 05:20:56      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:ejb   ejb实例分析   

前面,我们介绍了一个入门实例,其实那就是无状态回话Bean的常用情况。

上一篇文章中,我们介绍了无状态会话Bean和有状态会话Bean的相关概念。为了加深大家对它们的理解,我们一起来实现一个有状态会话Bean的例子——模拟购物车。

这个例子非常经典:一个客户端购物的过程中,服务端会创建一个SessionBean保存着这一客户端的状态,客户端买的东西,都会在服务端进行存储。

也就是说,自始至终,一直存在一个有状态会话Bean对象,与该客户端进行交互。

下面来看具体实现:


1、准备环境

开发环境:Eclipse

jdk:1.6

jboss:Jboss5.0


2、服务端

接口:

package com.ejb.remote;
import java.util.List;
public interface IStatefulSessionBean {
	public void put(String bookName);
	public List<String> list();
}


实现:

package com.ejb.remote.impl;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateful;
import com.ejb.remote.IStatefulSessionBean;
@Remote
@Stateful
public class StatefulSessionBeanImpl implements IStatefulSessionBean {
	private List<String> bookList;
    public StatefulSessionBeanImpl() {
    	bookList = new ArrayList<String>();
    }
	@Override
	public void put(String bookName) {
		bookList.add(bookName);
	}
	@Override
	public List<String> list() {
		return bookList;
	}
}


3、客户端

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%@page import="javax.naming.NamingException"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="java.util.Properties"%>
<%@page import="com.ejb.remote.IStatefulSessionBean"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<%
		try {
			IStatefulSessionBean statefulBean = null;
			//如果是
			if (session.getAttribute("statefulBean") == null) {
				//配置属性,他们是创建InitialContext的实例条件
				Properties props = new Properties();
				//JDNI工厂
				props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
				//JNDI查找包
				props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming");
				//JNDI服务地址
				props.setProperty("java.naming.provider.url","localhost:1099");
				InitialContext ctx = new InitialContext(props);
				statefulBean = (IStatefulSessionBean) ctx.lookup("StatefulSessionBeanImpl/remote");
				session.setAttribute("statefulBean", statefulBean);
			} else {
				statefulBean = (IStatefulSessionBean) session.getAttribute("statefulBean");
			}
			String name = request.getParameter("name");
			if (name != null) {
				name = new String(name.getBytes("ISO8859_1"), "utf-8");
				statefulBean.put(name);
			}
			out.println("您已购买:"+statefulBean.list());

		} catch (NamingException e) {
			e.printStackTrace();
		}
	%>
	<table border="1">
		<tr>
			<td>书名</td>
			<td>购买</td>
		</tr>
		<tr>
			<td>西游记</td>
			<td><a href="sessionbean4.jsp?name=西游记">购买</a></td>
		</tr>
		<tr>
			<td>水浒传</td>
			<td><a href="sessionbean4.jsp?name=水浒传">购买</a></td>
		</tr>
		<tr>
			<td>红楼梦</td>
			<td><a href="sessionbean4.jsp?name=红楼梦">购买</a></td>
		</tr>
		<tr>
			<td>三国演义</td>
			<td><a href="sessionbean4.jsp?name=三国演义">购买</a></td>
		</tr>
	</table>
</body>
</html>


运行结果:

               bubuko.com,布布扣

4、在开发的过程中,有一些注意问题,需要在此提醒:

1、使用注解时,注视使用javax.ejb.*包中的工具类;

2、由于存在客户端与服务器两端的开发,我们要注意,在开发完服务端后,需要将其部署到服务器,供客户端调用;

3、不同的客户端调用时,依赖包不太一样。像普通的java项目,我们需要引入Jboss(这里拿Jboss应用服务器做个比方)的Client包,这里的包为我们开发人员准备了Ejb运行的一些工具类,而Web客户端则无需引入Client包。

4、无论什么客户端,都需要引入服务端的接口,因为客户端需要使用JNDI,根据接口实例化实现。这些包如果不引入,部署到服务器不会报错(服务器都有这些包),但是在开发期间是会报错的。


通过本人实例,相信你已经了解了有状态会话Bean的应用情况,在项目中,你可以根据实际情况,酌情选择使用。

Ejb in action(四)——购物车实例演示有状态会话Bean,布布扣,bubuko.com

Ejb in action(四)——购物车实例演示有状态会话Bean

标签:ejb   ejb实例分析   

原文地址:http://blog.csdn.net/liu765023051/article/details/25621469

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!