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

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

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

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

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

以下来看详细实现:

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、client

<%@ 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>

执行结果:

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

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

2、因为存在client与server两端的开发,我们要注意,在开发完服务端后。须要将其部署到server,供client调用;

3、不同的client调用时。依赖包不太一样。像普通的java项目,我们须要引入Jboss(这里拿Jboss应用server做个例如)的Client包。这里的包为我们开发者准备了Ejb执行的一些工具类,而Webclient则无需引入Client包。

4、不管什么client,都须要引入服务端的接口。由于client须要使用JNDI。依据接口实例化实现。

这些包假设不引入,部署到server不会报错(server都有这些包),可是在开发期间是会报错的。

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

时间: 2024-08-04 16:27:11

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

JBoss+Ant实现EJB无状态会话bean实例

EJB分为session bean.entity bean.message-driven bean,session bean又分为无状态会话bean和有状态会话bean. session bean负责与客户端交互,是编写业务逻辑的地方,在session bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过entity bean来完成对数据库的操作的. 平常,我们使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高.正因为一个bean实例被多

EJB开发第一个无状态会话bean、开发EJB客户端

开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作. 实体Bean(Entity Bean) 它实际上属于java持久化规范(JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate.TopLink等ORM框架各自为营的局面. 消息驱动Bean(Messag

Ejb in action(五)——会话Bean的生命周期

会话Bean与消息驱动Bean.实体Bean的最重要的区别在于生命周期的差异性.会话Bean实例存活期较短,它和线程类似,包括对象的创建.初始化.运行.钝化.激活.销毁. 生命周期的概念,了解生物学的童鞋一定对这个概念不陌生.这里所谓的生命周期,就是指EjbBean实例存在的各个阶段中,提供的一些注解方法.在运行时,Ejb容器会动态调用这些方法. 关于会话Bean的生命周期,Ejb3.0中一共提供了6个注解方法,这些方法都适合有状态会话Bean,而只有@postConstruct和@PreDes

Thrift入门及Java实例演示&lt;转载备用&gt;

Thrift入门及Java实例演示 作者: Michael 日期: 2012 年 6 月 14 日 •概述 •下载配置 •基本概念 1.数据类型 2.服务端编码基本步骤 3.客户端编码基本步骤 4.数据传输协议 •实例演示(java) 1. thrift生成代码 2. 实现接口Iface 3.TSimpleServer服务模型 4.TThreadPoolServer 服务模型 5.TNonblockingServer 服务模型 6.THsHaServer服务模型 7.异步客户端 [一].概述 T

EJB系列 - 会话Bean基础知识

本人博客文章网址:https://www.peretang.com/basic-knowledge-of-session-bean/ 什么是会话 有限的时间周期内,客户端和服务器之间的连接 为什么使用会话bean 因为EJB大部分服务都是专门提供给会话bean的 1. 并发和线程安全: 容器利用很多技术来自动确保开发者不必担心并发或线程安全的问题   2. 远程处理和Web服务的服务提供   3. 事务和安全管理   4. 拦截器 会话bean的规范 1. 至少具有一个业务接口(EJB3.1后可

EJB初级篇--EJB组件之会话Bean

上篇博文中我们已经详解介绍了什么是EJB.其实最简单的说:EJB就是运行在独立服务器上的组件,客户端是通过网络对EJB对象进行调用的.而我们常说的企业Bean组件可以分为三种类型:会话Bean.消息驱动Bean和实体Bean.依据应用设计的不同,开发者可以选择适合应用的组件类型.下面几篇博文中我会为大家分别详细的介绍这三种企业Bean组件.本篇博文则就先来介绍介绍会话Bean吧. 首先来介绍一下,什么是会话Bean.会话Bean能够完成客户所要求的业务操作,它是含有业务逻辑的可重用组件,并能够用

Ejb in action(六)——拦截器

Ejb拦截器可以监听程序中的一个或所有方法.与Struts2中拦截器同名,而且他们都能够实现切面式服务.同时也与Spring中的AOP技术类似. 不同的是struts2的拦截器的实现原理是一层一层的拦截器包住一个action,拦截Action请求,在自己的拦截器里面自定义内容. Struts2中的拦截器可以说是个过滤器,把不想要或不想显示的内容过滤掉.拦截器可以抽象出一部分代码用来完善原来的Action,同时可以减轻代码冗余,提高重用率.如一些登录验证.权限限制等. Spring的两大主要功能就

LoaderManager使用详解(四)---实例:AppListLoader

实例:AppListLoader 这篇文章将是我的第四篇,也就是最后一篇该系列的文章.请在评论里面告诉我他们是否有用.前面几篇文章的链接如下: 一:Loaders之前世界 二:了解LoaderManager 三:实现Loaders 四:实例:AppListLoader 应大众的要求,我已经写了一个示例应用演示如何正确的实现一个自定义Loader.应用名称为:AppListLoader,它是一个演示应用,可以查询并列出你的Android设备上所有已安装的应用程序.应用已经修改,重新构建(没有bug

css清除浮动代码实例演示

css清除浮动代码实例演示:在页面中如果采用了浮动,那么清除浮动则是必须要进行的操作,否则可能引起一些意想不到的后果.本章节不会对浮动或者清除浮动的原理做介绍,只是分享一下清除浮动的几段代码,因为有些朋友可能需要的就是一个代码实例,关于浮动或者清除清除浮动的相关内容可以参阅相关阅读.一.使用overflow清除浮动: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <met