前面。我们介绍了一个入门实例。事实上那就是无状态回话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>

执行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1NzY1MDIzMDUx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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的应用情况,在项目中。你能够依据实际情况。酌情选择使用。

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

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

    EJB分为session bean.entity bean.message-driven bean,session bean又分为无状态会话bean和有状态会话bean. session bean负责 ...

  2. EJB开发第一个无状态会话bean、开发EJBclient

    开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与client交互,是编写业务逻辑的地方.在会话bean中能够通过JDBC直接操作数据库.但大多数 ...

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

    开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下 ...

  4. Thrift入门及Java实例演示<转载备用>

    Thrift入门及Java实例演示 作者: Michael 日期: 年 月 日 •概述 •下载配置 •基本概念 .数据类型 .服务端编码基本步骤 .客户端编码基本步骤 .数据传输协议 •实例演示(ja ...

  5. Thrift入门及Java实例演示

    目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...

  6. Apache Thrift学习之一(入门及Java实例演示)

    目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...

  7. EJB系列 - 会话Bean基础知识

    本人博客文章网址:https://www.peretang.com/basic-knowledge-of-session-bean/ 什么是会话 有限的时间周期内,客户端和服务器之间的连接 为什么使用 ...

  8. ASP.NET Core 6框架揭秘实例演示[02]:基于路由、MVC和gRPC的应用开发

    ASP.NET Core可以视为一种底层框架,它为我们构建出了基于管道的请求处理模型,这个管道由一个服务器和多个中间件构成,而与路由相关的EndpointRoutingMiddleware和Endpo ...

  9. ASP.NET Core 6框架揭秘实例演示[12]:诊断跟踪的进阶用法

    一个好的程序员能够在系统出现问题之后马上定位错误的根源并找到正确的解决方案,一个更好的程序员能够根据当前的运行状态预知未来可能发生的问题,并将问题扼杀在摇篮中.诊断跟踪能够帮助我们有效地纠错和排错&l ...

随机推荐

  1. 为什么选择Sqoop?(三)

    为什么选择 Sqoop? 通常基于三个方面的考虑: 1.它可以高效.可控地利用资源,可以通过调整任务数来控制任务的并发度.另外它还可以配置数据库的访问时间等等. 2.它可以自动的完成数据类型映射与转换 ...

  2. vs项目结构解析

    当我们用VS开发一个项目的时候,首先应该清楚用VS这个IDE生成的一些文件和文件夹是什么意思,起什么作用,什么场合下使用. 因为我使用的是VS2015,就以这个为例来进行一些说明: 首先要做的是更改你 ...

  3. React Native常用组件在Android和IOS上的不同

    React Native常用组件在Android和IOS上的不同 一.Text组件在两个平台上的不同表现 1.1 height与fontSize 1.1.1只指定font,不指定height 在这种情 ...

  4. Linux下的文件结构,及对应文件夹的作用

    Linux下的文件结构,及对应文件夹的作用 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比 ...

  5. RHEL7配置中文输入法-智能拼音

    RHEL7配置中文输入法-智能拼音 RHEL7.x(CentOS7.x)系统相对之前的6.x系统变化较大,虽然安装时选择了中文环境,但是进入系统后,在控制台及编辑器中仍无法切换输入法进行中文输入. 原 ...

  6. 基于saltstack svn的一个发布系统

      1.登录页 2.分组管理页 3.添加项目页 4.项目列表和项目编辑页 5.项目发布回滚页

  7. ipv4的设置

    有段时间自己的网总是连不上,别人的都可以,因为公司又wifi,就将就着用wifi了,没有去查看原因,后来由于公司1网段大部分ip号被占用,系统要接入32路主机测试,每个主机都要分配ip,只好开辟2网段 ...

  8. 模态框(layer)

    推荐一个好看的模态框(layer)   地址:http://layer.layui.com/ 相应列子及配置  全部来自于官网,可直接访问官网学习了解. //信息框-例1 layer.alert('见 ...

  9. Python 递归、匿名函数、map和filter day4

    一.递归---函数自己调用自己 1.一个错误递归的例子: count=0 def hello(): global count count+=1 print("count %s"%c ...

  10. 回溯法、DFS

    回溯法 为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回上一步重新选择条件,继续向前探索,如此反复进行,直至得到解或证明无解. DFS DFS模板 vo ...