`
eclipseakwolf
  • 浏览: 6879 次
  • 性别: Icon_minigender_1
  • 来自: 琼海
社区版块
存档分类
最新评论

stateful session bean 学习笔记

    博客分类:
  • ejb
阅读更多

利用stateful session bean 完成一个简单的购物车

1、建立ejbProject将要完成的业务抽象到远程接口中CartRemote:
package net.hnspi.ejb;
import java.util.Map;

import javax.ejb.Remote;

@Remote
public interface CartRemote {
	public ShopItem addCart(ShopItem si) ;
	public Map<ShopItem,Integer> itemInCart() ;
}

2、远程接口的实现类CartBean:
package net.hnspi.ejb;

import java.util.HashMap;
import java.util.Map;

import javax.ejb.Stateful;

@Stateful
public class CartBean implements CartRemote {
    public CartBean(){}
    //private Map<ShopItem,Integer> items = new HashMap<ShopItem,Integer>() ;
    private Map<ShopItem,Integer> items  ;
	@Override
	public ShopItem addCart(ShopItem si) {
		if(itemInCart()==null){
			items = new HashMap<ShopItem,Integer>() ;
		}
		int temp = 0 ;
		if(items.containsKey(si)){
			temp = items.get(si) ;
			items.put(si, ++temp) ;
		}else{
			items.put(si, 1) ;
		}
		return si;
	}

	@Override
	public Map<ShopItem,Integer> itemInCart() {
		return this.items;
	}

}

3、商品的pojo类ShopItem:
package net.hnspi.ejb;

import java.io.Serializable;

public class ShopItem implements Serializable{
	private static final long serialVersionUID = 1L;
	private int id ;
	private String name ;
	private double price ;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	/**
	 * 复写equals约定名称相同就为同一件商品
	 */
	@Override
	public boolean equals(Object obj) {
        if(this==obj){
			return true ;
		}
		if(!(obj instanceof ShopItem)){
			return false ;
		}
		ShopItem s = (ShopItem)obj ;
		if(this.name.equals(s.name)){
			return true ;
		}else{
			return false ;
		}
	}
	@Override
	public int hashCode() {
	 	return this.name.hashCode()+5 ;
	}	
}


4、建立要访问ejb组件的web项目,在项目建立一个区的同一个ejb代理对象的工具类ContextManager:
package net.hnspi.util;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import net.hnspi.ejb.CartRemote;



public class ContextManager {
	/*
	public static void main(String[] args) {
		Context cxt = getJbossContext() ;
		CartRemote cr = null;
		try {
			cr = (CartRemote)cxt.lookup("Shop/CartBean/remote");
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		System.out.println(cr);
	}
	*/
	private static CartRemote cr ;
	public static Context getJbossContext(){
		Properties pro = new Properties() ;
		
		pro.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory") ;
		pro.put(Context.PROVIDER_URL, "localhost:1099") ;
		
		Context cxt = null;
		try {
			cxt = new InitialContext(pro);
		} catch (NamingException e) {
			e.printStackTrace();
		}
		return cxt ;
	}
	
	public static CartRemote getInstance(){
		if(cr==null){
			try {
				cr = (CartRemote)getJbossContext().lookup("Shop/CartBean/remote");
			} catch (NamingException e) {
				e.printStackTrace();
			}
		}
		return cr ;
	}
}


5、对请求购买的商品进行处理的servlet  ShopServlet:
package net.hnspi.servlet;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.hnspi.ejb.CartRemote;
import net.hnspi.ejb.ShopItem;
import net.hnspi.util.ContextManager;
public class ShopServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response) ;
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		CartRemote cr = ContextManager.getInstance() ;
		ShopItem si = null ;
		String[] items = request.getParameterValues("item") ;
		for(String s : items){
			si = new ShopItem() ;
			si.setName(s) ;
			cr.addCart(si) ;
		}
		Map<ShopItem,Integer> map = cr.itemInCart();
		request.setAttribute("items", map) ;
		request.getRequestDispatcher("display.jsp").forward(request, response) ;
	}

}//不要忘了在web.xml中进行servlet的配置

6、进行商品购买的jsp页面shopitem_list.jsp
<?xml version="1.0" encoding="UTF-8" ?>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="<%=basePath%>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>shopItem_list</title>
</head>
<body>
	<fieldset>
		<legend>商品列表</legend>
		<form action="shopServlet.do">
			<input type="checkbox" name="item" value="struts" />Struts<br />
			<input type="checkbox" name="item" value="hibernate" />Hibernate<br />
			<input type="checkbox" name="item" value="spring" />Spring<br />
			<input type="submit" value="提交" />
		</form>
	</fieldset>
</body>
</html>

7、进行商品显示的页面display.jsp
<?xml version="1.0" encoding="UTF-8" ?>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*,net.hnspi.ejb.*" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="<%=basePath%>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>title</title>
</head>
<body>
	<%
		Map<ShopItem,Integer> items = (Map<ShopItem,Integer>)request.getAttribute("items") ;
		for(Map.Entry<ShopItem,Integer> me : items.entrySet()){
	%>
			商品名称:<%=me.getKey().getName() %>----数量:<%=me.getValue() %><br />
	<%		
		}
	%>
</body>
</html>



学习书籍:经典java ee企业应用实战
分享到:
评论

相关推荐

    ejb学习笔记

    综上所述,《ejb学习笔记》涵盖了从EJB的基本概念、不同类型的Bean,到其部署、配置以及与企业信息系统集成的各种细节。对于希望深入了解并掌握EJB3开发技术的开发者而言,这些知识点构成了不可或缺的基础。

    基于Weblogic 的ejb 学习笔记

    ### 基于Weblogic的EJB学习笔记详解 #### EJB基础知识概览 ##### 1. 无状态会话Bean (Stateless Session Bean) 无状态会话Bean是一种不保存客户端会话状态的EJB组件。这意味着每个客户端的请求都不依赖于前一个...

    Weblogic Ejb 学习笔记

    WebLogic EJB学习笔记主要涵盖了企业级Java Bean(Enterprise JavaBeans,简称EJB)在Oracle WebLogic Server中的应用和管理。EJB是Java EE(Java Platform, Enterprise Edition)平台的核心组件,用于构建可扩展、...

    ejb 学习笔记8

    ### EJB学习笔记8:深入理解事务处理机制 #### 一、事务的背景知识 **事务**是指一系列操作,这些操作作为一个不可分割的工作单元来执行,即要么全部完成,要么完全不执行。事务的主要特性包括: - **原子性...

    EJB3.0 学习笔记

    **EJB3.0 学习笔记** EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于构建可扩展的、安全的、事务处理的分布式应用程序。EJB3.0是EJB的一个重大更新,引入了许多改进,使得开发过程更为简化,降低了...

    EJB学习笔记

    - **会话bean(Session Beans)**:提供业务逻辑,可以分为有状态(Stateful)和无状态(Stateless)。有状态bean能记住客户端的交互历史,而无状态bean对每个请求都独立处理。 - **消息驱动bean(Message-Driven ...

    private book notes - 20090814

    它们不对应于持久化的数据库对象,而是用于处理用户的交互和业务流程,可以是无状态的(Stateless Session Bean)或有状态的(Stateful Session Bean)。 6. **Notes.doc**:可能是指IBM Lotus Notes,一种协作软件...

    EJB笔记,但愿对喜欢EJB的朋友有所帮助

    会话bean主要用于业务逻辑处理,可以分为有状态会话bean(Stateful Session Beans)和无状态会话bean(Stateless Session Beans)。前者能够跟踪用户会话状态,而后者不保存会话状态,适用于处理无关联的请求。 ...

    ejb3.0_培训笔记(达内).

    2. **会话Bean**:会话Bean分为无状态会话Bean(Stateless Session Beans)和有状态会话Bean(Stateful Session Beans)。无状态会话Bean不保存客户端状态,适合执行无关联的业务操作;有状态会话Bean则可以保持与...

    java EJB资料

    - 提供的教程如“EJB学习笔记.docx”、“精通EJB3.0.pdf”等,通常涵盖了EJB的基本概念、组件使用、部署配置以及最佳实践。 9. **源码分析**: - “EJB3.0实例教程(含源码).rar”提供了实际项目源码,帮助读者...

    学习EJB3基础知识笔记

    在"学习EJB3基础知识笔记"中,我们将深入探讨EJB3的主要特性和使用方法。 1. **注解驱动的编程模型**: EJB3引入了注解,极大地减少了XML配置文件的使用。通过在实体类、接口或实现类上添加注解,如`@Entity`、`@...

    EJB3笔记代码

    本笔记代码主要涵盖了EJB3的一些核心特性,包括定时任务(timer)、会话bean(session)、实体bean(entity)、拦截器(interceptor)、领域模型(domain)、客户端(client)、事务管理(transaction)、消息传递...

    ejb3.0的讲义一起看

    5. **简化会话bean(Session Beans)**:EJB 3.0区分了无状态会话bean(`@Stateless`)和有状态会话bean(`@Stateful`),无状态bean适用于简单的请求-响应模式,而有状态bean则能保持客户端会话的上下文。...

Global site tag (gtag.js) - Google Analytics