zoukankan      html  css  js  c++  java
  • 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的应用情况,在项目中。你能够依据实际情况。酌情选择使用。

  • 相关阅读:
    Linux系统分支之Ubuntu
    运维工具之Netdata
    Antd Tree组件虚拟滚动空白问题
    没有root权限的情况下安装vim
    C++ / Python测量程序执行时间
    Linux dmidecode 命令介绍
    网卡到底是什么
    flannel的革命性的变化是在哪里呢?
    kube-proxy
    cilium
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6916394.html
Copyright © 2011-2022 走看看