zoukankan      html  css  js  c++  java
  • Jndi和会话bean

    JNDI及会话Bean

    环境要求:

    1)服务器:JBoss6.0以上

    2)集成开发环境:myEclipse 8.5 或更高

     

    一、Eclipse中配置JBoss

    1)   下载JBoss-6.0.0.CR1,并解压;

    2)   添加环境变量“JBoSS_HOME”为JBoss的安装目录

    3)   启动myEclipse,在下方的“Server”选项卡中点击右键,在快捷菜单中选择“Configuer Server Connector”,打开如下对话框:

             

    4)   在左侧列表中选择“Servers”列表中的“JBoss”->“JBoss v6.x”,然后在右侧面板中的“JBoss server”中选择“Enable”,并在“JBoss home directory”中指明你JBoss的安装目录。然后点击“ok”按钮。

    二、JNDI的使用

    1)   在JBoss下绑定将资源绑定到JNDI。

      i.创建一个“web project”工程名为“jndi”。

      ii.创建一个jsp页面“index.jsp”,并编写如下内容:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="javax.naming.*" %>
    <%@ page import="javax.swing.*" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JNDI Demo</title>
    </head>
    <body>
    <%	
    	//创建命名服务上下文
    Context ctx = new InitialContext();
        //创建一个对象mWin
    	JFrame mWin = new JFrame("Test");
    	//将对象绑定到JNDI服务器,JNDI绑定名为“testName”
    ctx.rebind("testName",mWin);
    	out.println("绑定成功....");
    %>
    </body>
    </html>
    

      

      iii.将此工程发布到JBoss上,然后启动JBoss。

      iv.打开另一个浏览器窗口,访问一次刚发布的jdni的index.jsp页面,若看到“绑定成功.... ”,表示JNDI名已经绑定成功。

    2)   通过JNDI查询并引用绑定对象

    1. 创建一个“Java project”工程,工程名为“jndiClient”。
    2. 在工程名上点击右键,在弹出的快捷菜单中选择“Build Path”->“Configure Bulid Path”,弹出如下对话框:

      点击“Add External JARS...”按钮,将JBoss安装目录中“client”目录中的所有Jar文件添加(jndi的客户端类库)。     
            iii.添加一个类“Client”,代码如下:       
        
    import javax.naming.*;
    import javax.swing.*;
    import java.util.*;
    
    public class Client {
    	public static void main(String args[]) throws Exception{
    		Hashtable ht = new Hashtable();
    //设置上下文类工厂
    ht.put(Context.INITIAL_CONTEXT_FACTORY,
    "org.jnp.interfaces.NamingContextFactory");
            //设置JNDI服务提供者地址
    		ht.put(Context.PROVIDER_URL,"jnp://localhost:1099");
    //创建JNDI上下文
    		Context ctx = new InitialContext(ht);
    //通过JNDI绑定名查询绑定对象
    		JFrame jWin = (JFrame)ctx.lookup("testName");
    		jWin.setBounds(20,20,400,300);
    		jWin.setVisible(true);
    	}
    }
    

      

    1.运行上面代码,应该看到如图窗口:

    三、编写会话Bean

    1) 无状态会话Bean

    i.创建一个“EJB Project”工程“MyEJB”,界面如下图。


    取消“Add Support for Entity beans”的选择,然后点击“Finish”按钮。

    ii.创建一个包:“cn.bean”用于保存EJB的类和其对应的接口文件。

    iii.创建一个叫SayHi的“EJB3 Session Bean”,如下图:



    选中“Create Interface”的“Local”和“Remote”,即为此类创建远程接口和本地接口,对应类文件为:SayHiLocal.java和SayHiRemote.java。“Session Type”(会话类型):Stateless(无状态会话Bean)。

      iv. 两个接口内容如下:
        
        
    SayHiLocal内容
    package cn.iface;
    import javax.ejb.Local;
    
    @Local  //指定接口为本地调用
    public interface SayHiLocal {
    	public String sayHi(String name);
    }
    
    SayHiRemote内容:
    package cn.iface;
    import javax.ejb.Remote;
    
    @Remote //指定接口为远程调用
    public interface SayHiRemote {
    	public String sayHi(String name);
    }
    v.编写会话类:SayHi,并实现以上两个接口。其内容如下:   
        
    package cn.bean;
    import javax.ejb.Stateless;
    import cn.iface.SayHiLocal;
    import cn.iface.SayHiRemote;
    
    @Stateless  //注解,此Bean为无状态会话Bean
    public class SayHi implements SayHiLocal, SayHiRemote {
    
    	public String sayHi(String name) {
    		return name +"欢迎你进入EJB世界!!";
    	}
    
    }
    

      

        


    vi.部署EJB:
    在前面创建的JBoss Server的图标上点击右键,在弹出的快捷菜单中选择“Add Deployment....”,弹出对话框如下图:

    在“Project”中选择当前工程“MyEJB”。

    vii.启动JBoss。

    2)   编写远程客户端  

    i.创建一个“Java Project”工程,名为“EJBClient”。

    ii.编辑“Build Path”将JBoss目录中Client中的所有的JAR包添加到工程的类路径上。

    iii.编辑“Build Path”,在“Projects”选项卡中将“MyEJB”工程添加的列表(如图),或复制上面EJB工程中的远程接口文件SayHIRemote包括整个包,到本工程中。

            

                    3)创建一个类Client,代码如下:
    import java.util.*;
    import javax.naming.*;
    import cn.iface.*;
    
    public class Client {
    	public static void main(String[] args) {
    		Hashtable<String, String> ht=new Hashtable<String, String>(); 
    		ht.put("java.naming.factory.initial",
    			"org.jnp.interfaces.NamingContextFactory");
    		ht.put("java.naming.provider.url","localhost:1099");
    		Context ctx;
    		try{
    			//创建上下文环境   
    			ctx = new InitialContext(ht);
    			SayHiRemote s 	=(SayHiRemote)ctx.lookup("SayHi/remote");
    			System.out.println(s.sayHi("Tome"));     
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    
    	}
    
    }
    

      

     
          

    2)有状态会话Bean

    1)编写一个有状态会话Bean完成购物车的功能。

    新建一个名叫“CartBean”的EJB3 Session Bean,对话框如下:

     CartBean类的代码如下:

    package cn.bean;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    
    import javax.ejb.Stateful;
    
    @Stateful(mappedName="cart")//指明JNDI名为cart
    public class CartBean implements CartBeanLocal, CartBeanRemote {
    	//商品信息列表,信息包括:gdID(编号),name(商品名),price(单价),number(购买数量)
    	private ArrayList<HashMap<String,Object>> goodsList = new ArrayList<HashMap<String,Object>>();
    	
    	//添加商品
    	public void add(HashMap<String,Object> goods){
    		boolean found = false;
    		for(HashMap<String,Object> gd:goodsList){
    			if(gd.get("gdID") == goods.get("gdID")){
    				int num =  (Integer) gd.get("number");
    				gd.put("number", num + 1);
    				found = true;
    				break;
    			}
    			
    		}
    if(!found){
    				goods.put("number", 1);
    				goodsList.add(goods);
    			}
    	}
    	
    	//删除商品
    	public void delete(String gdID){
    		for(HashMap<String,Object> gd:goodsList){
    			if(gd.get("gdID").toString().equals(gdID)){
    				goodsList.remove(gd);
    				break;
    			}
    		}
    	}
    	
    	//清空购物车
    	public void clearCart(){
    		goodsList.clear();
    	}
    	
    	//获得商品清单
    	public ArrayList<HashMap<String,Object>> getGoodsList(){
    		return goodsList;
    	}
    }
    

      

    两个接口代码:

    @Local
    public interface CartBeanLocal {
    	public void add(HashMap<String,Object> goods);
    	public void delete(String gdID);
    	public void clearCart();
    	public ArrayList<HashMap<String,Object>> getGoodsList();
    }
    
    @Remote
    public interface CartBeanRemote {
    	public void add(HashMap<String,Object> goods);
    	public void delete(String gdID);
    	public void clearCart();
    	public ArrayList<HashMap<String,Object>> getGoodsList();
    }
    

      

    2)创建一个Web工程作为CartBean的客户端。

    创建一个名为“cart”的Web工程,复制上边EJB3工程的中的本地接口文件(CartBeanLocal)——包括包名到本工程中。创建几个JSP页面完成商品的购买(放入购物车)、查看购物车、清除购物车的功能。

    index.jsp功能显示商品列表及添加到购物车的链接,代码如下:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    
    <html>
      <head>
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      <body>
          <%
          	 //下面代码模拟生成商品列表,各位可以通过数据库获取
     ArrayList<HashMap<String,Object>> gds;
          	 gds = (ArrayList<HashMap<String,Object>>)session.getAttribute("gds");
          	 if(gds == null){
          	 	gds = new ArrayList<HashMap<String,Object>>();
          	 	HashMap<String,Object> tmp = new HashMap<String,Object>();
          	 	tmp.put("gdID","sp0001");
          	 	tmp.put("name","新编大学英语教程");
          	 	tmp.put("price",23.5);
          	 	gds.add(tmp);
          	 	
          	 	tmp = new HashMap<String,Object>();
          	 	tmp.put("gdID","sp0002");
          	 	tmp.put("name","J2EE权威指南");
          	 	tmp.put("price",63.5);
          	 	gds.add(tmp);
          	 	
          	 	tmp = new HashMap<String,Object>();
          	 	tmp.put("gdID","sp0003");
          	 	tmp.put("name","太阳泪");
          	 	tmp.put("price",21.5);
          	 	gds.add(tmp);
          	 	
          	 	tmp = new HashMap<String,Object>();
          	 	tmp.put("gdID","sp0004");
          	 	tmp.put("name","新编大学文化教程");
          	 	tmp.put("price",28.5);
          	 	gds.add(tmp);
          	 	
          	 	session.setAttribute("gds",gds);
          	 }
          %>
          <table width="600" border="1" cellpadding="5" align="center">
          	<caption>商品列表</caption>
          	<tr>
          		<th width="100">商品编号</th>
          		<th width=300">商品名称</th>
          		<th width="80">单价</th>
          		<th width="120">操作</th>
          	</tr>
          	<c:forEach items="${gds}" var="gd">
          		<tr>
          			<td>${gd.gdID }</td>
          			<td>${gd.name }</td>
          			<td>${gd.price }</td>
          			<td>
          			    <a href="add.jsp?gdID=${gd.gdID }">添加到购物车</a>	
          			</td>
          		</tr>
          	</c:forEach>
          </table>
          <h3 align="center"><a href="cart.jsp">查看购物车</a></h3>
      </body>
    </html>
    

    add.jsp: 将指定商品添加到购物车

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="javax.naming.*, java.util.*,cn.bean.CartBeanLocal"%>
    <%
    	CartBeanLocal cart;
    	cart = (CartBeanLocal)session.getAttribute("cart");
    	if(cart == null){
    		InitialContext ctx = new InitialContext();
    		cart = (CartBeanLocal) ctx.lookup("CartBean/local");
    		session.setAttribute("cart",cart);
    	}
    	
    	String gid = request.getParameter("gdID");
    	ArrayList<HashMap<String,Object>> gds = (ArrayList<HashMap<String,Object>>)session.getAttribute("gds");
    	for(HashMap<String,Object> gd:gds){
    		if(gd.get("gdID").equals(gid)){
    			cart.add(gd);
    		}
    	}
    	response.sendRedirect("index.jsp");
    %>
    

    cart.jsp: 显示购物车中的商品列表

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="javax.naming.*, java.util.*,cn.bean.CartBeanLocal"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    <!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=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<%
    		try {
    			CartBeanLocal cart;
    			Object cartTmp = session.getAttribute("cart");
    			if(cartTmp == null){
    				InitialContext ctx = new InitialContext();
    				cart = (CartBeanLocal) ctx.lookup("CartBean/local");
    				session.setAttribute("cart",cart);
    			}
    			else{
    				cart = (CartBeanLocal)cartTmp;
    			}
    			ArrayList<HashMap<String,Object>> goodsList = cart.getGoodsList();
    			pageContext.setAttribute("gdlist",goodsList);
    		} catch (NamingException e) {
    			out.println(e.getMessage());
    		}
    		
    	%>
    	
    	<table width="600" border="1" cellpadding="5" align="center">
          	<caption>商品列表</caption>
          	<tr>
          		<th width="100">商品编号</th>
          		<th width=300">商品名称</th>
          		<th width="100">单价</th>
          		<th width="100">数量</th>
          	</tr>
          	<c:forEach items="${gdlist}" var="gd">
          		<tr>
          			<td>${gd.gdID }</td>
          			<td>${gd.name }</td>
          			<td>${gd.price }</td>
          			<td>${gd.number }</td>
          		</tr>
          	</c:forEach>
          </table>
          <h3 align="center"><a href="clearCart.jsp">清空购物车</a></h3>
    </body>
    </html>
    

    clearCart.jsp:清空购物车 

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="javax.naming.*, java.util.*,cn.bean.CartBeanLocal"%>
    <%
    	CartBeanLocal cart = (CartBeanLocal)session.getAttribute("cart");
    	cart.clearCart();
    	response.sendRedirect("cart.jsp");
    %>
    

    (3)部署

    使用前面的无状态会话Bean的部署方法,在MyEclipse中直接部署本部分内容可能会不能正常运行,在此必须脱离MyEclipse将两个工程直接部署到独立的JBoss服务器中。

    第一步:将两个工程导出

    a、导出EJB工程。在工程列表中的cart工程上点击右键,在弹出的快捷菜单中选择“ ”,弹出如下对话框:

     

    选择导出目标为“Java”->“JAR file”,点击“Next”按钮,显示如下:

     

    所有选择使用默认值,在“JAR file”中指明导出JAR文件的路径;点击“Finish”按钮,完成导出。

    b、导出Web工程

    同EJB工程,在工程名上点击右键,在快捷菜单中选择“Export....”,在弹出的对话框中选择目标为:“Java EE”->“WAR file(MyEclipse)”,点击“Next”按钮,显示如下:

     

    在“WAR file”中指明要导出的目标位置,点击“Finish”按钮完成导出。

     

    第二步:启动JBoss并进行部署

     

    执行JBoss的安装目录中bin目录下的run.bat,启动JBoss。

    在浏览器的地址栏中输入:localhost:8080,得到如下界面:

     

    点击“Administration Console”进入JBoss管理系统的登录界面,如图

     

    Username和Password均为“admin”,登录进入管理界面如下图:

    在左侧的栏目中选择“Applications”->“EJB3 JARS”,部署EJB工程——MyEJB.jar,界面如图:

     

    点击“Add a new resource”,得到如下界面:

     

    点击“浏览...”选择上面导出的EJB工程的jar文件,然点击“Continue”按钮完成部署。成功后可看到下图:

     

    看到列表中出现了“MyEJB.jar”表示部署成功。

     

    然后点击“Applications”中的“Web Application (WAR)s”,看到如下图,进行Web工程的部署;

     

    点击“Add a new resource”按钮,得到和部署EJB时相似的界面,选择要部署的Web工程的导出文件cart.war,并点击“Continue”按钮完成部署,最后看到如下图:

     

    表示部署成功。

     

    第三部:测试

    在浏览器地址栏中输入:localhost:8080/cart 

  • 相关阅读:
    Network (poj1144)
    C. Hongcow Builds A Nation
    ZYB loves Xor I(hud5269)
    D. Chloe and pleasant prizes
    Game(hdu5218)
    约瑟夫环的递推方法
    Misaki's Kiss again(hdu5175)
    Exploration(hdu5222)
    B. Arpa's weak amphitheater and Mehrdad's valuable Hoses
    C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/3044874.html
Copyright © 2011-2022 走看看