EJB之无状态会话Bean简单应用-学习与实践(Inber原作)

原创 2004年09月08日 22:26:00

客户通过由EJB容器提供的远程和本地接口进行通信
   访问控制表是用于保证安全其授权能访问特定功能的用户组或个人表。
   持久性是指对象状态永久地存储在数据存储器中,诸如数据库。
   企业 beans的类型:
实体 (Entity) beans
实体beans支持多个会话和多个客户,可分为:
         Bean -        管理Bean持久性
        Container- 管理容器的持久性
会话  ( Session) beans
      会话beans 执行业务任务时没有存储机制,可分为:
             有状态会话(Stateful session) bean
       无状态会话( Stateless session) bean


本例以我所学的内容为例:
 
Earnest  bank 要求开发一个美元和卢比转换的计算器构件。 说明使用EJB来创建此构件是有道理的并说明必须写的代码。


一.  识别机制
二.  确定企业 bean 的类型
三.  编写远程接口代码
四.  编写本地接口代码
五.  编写企业 bean 类代码
六.  编译源文件

一.  识别机制
EJB 是合适的技术,因为:
    EJB 构件自动处理系统级服务
    企业 bean 只实现业务逻辑

二.  确定企业 bean 的类型
  银行应用的计算器构件不要求持久的存储机制
  货币的等值转换,这种值不在其他地方使用
因此,最适合于创建无状态的会话 bean 

三.  编写远程接口代码
远程接口定义企业bean的所有业务方法,不包括系统级的操作方法。 这些业务方法在EJB类中实现。

写远程接口的步骤:
需要   javax.ejb.EJBObject   和 java.rmi.RemoteException   接口
   建立由扩展EJBObject 接口的远程接口
   在 EJB 类中实现所有在远程接口定义的业务方法。
         根据本问题的陈述,可写出如下远程接口程序:
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Calculator  extends  EJBObject
{ public  double  dollarToRs(double dollars)
                                                 throws   RemoteException;
}
四.  编写本地接口代码
本地接口代码定义了允许EJB 客户建立且查找EJB构件的方法。 编写本地接口的步骤如下:
   需要java.io.Serializable、java.rmi.RemoteException、 javax.ejb.CreateException、javax.ejb.EJBHome 接口
   建立由扩展EJBHome 接口的本地接口
   定义 create() 方法去建立特定的 EJB 类的一个实例,该方法的返回类型必须是EJB的远程接口对象。
 
import   java.io.Serializable;
import   java.rmi.RemoteException;
import  javax.ejb.CreateException;
import   javax.ejb.EJBHome;
public  interface  CalculatorHome  extends  EJBHome
{  Calculator   create()   throws   RemoteException, CreateException;   }

五.  编写企业 bean 类代码
实现所有在远程接口中说明的业务方法。编写EJB类的步骤:
    需要java.rmi.RemoteException、javax.ejb.SessionBean、javax.ejb.SessionContext 接口
    建立 EJB 类实现  SessionBean  接口
    实现在远程接口中定义的业务方法。
    编写 ejbCreate()、 ejbRemove()、 ejbActivate()、 ejbPassivate()、 setSessionContext()和对缺省的构造器方法的实现。
注意:EJB类中实现的方法名及其特征必须和远程方法中声明的相一致。
  根据问题的陈述和前边的描述,可创建以下EJB代码程序。

EJB代码
import  java.rmi.RemoteException;
import  javax.ejb.SessionBean;
import  javax.ejb.SessionContext;
public  class  CalculatorEJB   implements  SessionBean
{   public double  dollarToRs(double dollars)
       {   return  dollars * 47.20;   }
     public CalculatorEJB()  {}
     public void ejbCreate()  {}
     public void ejbRemove()  {}
     public void ejbActivate()  {}
     public void ejbPassivate()  {}
     public void setSessionContext(SessionContext sc) {}
}
六.   编译源文件


以下为原代码
远程接口程序:
/*
@InberGong
Date 2004/9/8
File name:Calculator.java
*/

import javax.ejb.EJBObject;
import java.rmi.RemoteException;


public interface Calculator extends EJBObject
{
  public double dollarToRs(double dollars)throws RemoteException;
   public double rsToDollar(double rs)throws RemoteException;
      public double rmbToDollar(double rmb)throws RemoteException;
         public double dollarToRMB(double dollars)throws RemoteException;
}
本地接口程序如下:
/*
@InberGong
Date 2004/9/8
File name:CalculatorHome.java
*/

import java.io.*;
import java.rmi.*;
import javax.ejb.*;


public interface CalculatorHome extends EJBHome
{
   Calculator create()throws CreateException,RemoteException;
}
企业 bean 类代码

/*
@InberGong
Date 2004/9/8
File name:CalculatorEJB.java
*/
import java.rmi.*;
import javax.ejb.*;

public class CalculatorEJB implements SessionBean
{

   public double dollarToRs(double dollars)throws RemoteException
   {
       return dollars*47.20;
   }


   public double rsToDollar(double rs)throws RemoteException
   {
    return rs/47.20;
    }
      public double rmbToDollar(double rmb)throws RemoteException   {
    return rmb/9;
    }
         public double dollarToRMB(double dollars)throws RemoteException
            {
    return dollars*9;
    }

   public void ejbCreate()throws CreateException,RemoteException
   {
        System.out.println("ejbCreate()");
    }
   public CalculatorEJB()
   {
       System.out.println("CalculatorEJB()");
   }
    public void setSessionContext(SessionContext sc)
   {
        System.out.println("setSessionContext()");
    }
    public void ejbRemove()
   {
        System.out.println("ejbRemove()");
    }
    public void ejbActivate(){}
    public void ejbPassivate(){}
   


}

最后是客户端程序
/*
@InberGong
Date 2004/9/8
File name:CalculatorClient.java
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.naming.*;
import javax.rmi.*;

public class CalculatorClient extends JFrame
{
  public static int w=500;
  public static int h=95;
  public static String str="Earnest Bank Welcomes You";
  Container c;
  JLabel l,result;
  JTextField t;
  JButton b;
  public static String value;
  public static double dbl;
  public static double amt;
  public CalculatorClient()
  {
    super(str);
    c = getContentPane();
    c.setLayout(new GridLayout(2,2,2,2));
    l = new JLabel("Enter the amount in Dollars($)");
    c.add(l);
    t = new JTextField(10);
    c.add(t);
    b = new JButton("Calculate");
    c.add(b);
    result = new JLabel();
    c.add(result);
    b.addActionListener(new addEvent());   
    setSize(w,h);
    show();
  }
  class addEvent implements ActionListener
  {
    public void actionPerformed(ActionEvent e)
    {
      value = t.getText();
      dbl = Double.parseDouble(value);
      try{
 Context ic = new InitialContext();
        Object obj = ic.lookup("CalculatorJNDI");//JNDI  name
        CalculatorHome home = (CalculatorHome)PortableRemoteObject.narrow(obj,CalculatorHome.class);
        Calculator calc = home.create();
        amt = calc.dollarToRs(dbl);
        calc.remove();
       
        Calculator calc2=home.create();
        if(calc2.isIdentical(calc))
        {
         System.out.println("两个桩实例指向同一个远程HOME实例!");
         }
        else
{         System.out.println("没有指向同一个远程HOME实例!");
}     
        result.setText("Result(RS.)" + String.valueOf(amt));
       
       
      }
      catch(Exception t)
      {
 System.out.println(t);
      }
    }
  }
  public static void main(String args[])
  {
     new CalculatorClient();
   }

}

开始配置
这里用的是j2ee1.3

运行j2ee
start j2ee -verbose

deploytool

new->application
applicaton file name: E:/public_html/public_java/ap2/ap2.ear
applicaton disply name: ap2.ear
new->Eterprise Bean
Contents 里面加入
Calculator.class CalculatorHome.class CalculatorEJB.class 三个文件
->NEXT
出现下对话框:New Enterprise Bean Wizard -General
在Bean Type中选择Session ->Stateless
Enterprise Bean Calss中选择CalculatorEJB
本地接口中选择CalculatorHome 在Remote Interface中选择Calculator
->NEXT->NEXT->NEXT->NEXT->NEXT->NEXT->NEXT->Finish
点左视窗中的应用ap2后 ->Tools->Deploy..->选中复框Return Client Jar
->NEXT
出现 Deploy ap2 -JNDI Names对话框
在Application 的JNDI Name中输入客户端程序中要查找的JNDI名:CalculatorJNDI 
->NEXT->Finished........->ok

在 dos窗口中进入到程序的根目录加入jar 包
set classpath=%classpath%;ap2Client.jar
java CalculatorClient

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Inber/article/details/98683

EJB有状态的会话Bean和无状态的会话Bean的区别

在EJB里面,会话Bean分为两种,一种是有状态的会话Bean,另一种是无状态的会话Bean,本节主要讲解一下两者之间的区别。        对于有状态的会话Bean,这种情况属于,服务端与你单独开...
  • zc474235918
  • zc474235918
  • 2016-02-18 16:59:54
  • 1728

EJB中有状态会话Bean 和 无状态会话Bean 的区别

session  Bean:分有状态会话Bean和无状态会话Bean两种,主要目的是提供程序逻辑层;Entity  Bean:资料组件,主要目的是提供程序资料;下面主要对Session  Bean讨论...
  • bo_hai
  • bo_hai
  • 2010-12-31 11:08:00
  • 2448

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

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

EJB3~有状态会话bean

在会话bean综述中,描述了无状态和有状态bean的区别在于客户端和服务器之间交互形式不同。对于无状态会话bean,交互的开始和结束都在同一个方法中。有时客户端需要发出多个服务请求(需要调用多个方法)...
  • zhengchao1991
  • zhengchao1991
  • 2016-11-01 10:46:15
  • 332

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

前面,我们介绍了一个入门实例,其实那就是无状态回话Bean的常用情况。 上一篇文章中,我们介绍了无状态会话Bean和有状态会话Bean的相关概念。为了加深大家对它们的理解,我们一起来实现一个有状态会...
  • liu765023051
  • liu765023051
  • 2014-05-13 15:33:50
  • 2644

EJB基础一 无状态会话BEAN使用

EJB基础一 无状态会话BEAN使用 EJB是J2EE的一条标准。以往EJB被人诟病,缺点是复杂,沉重。然后spring崛起了,spring因其轻量级,开发方便而得到了迅速地推广。但是这是过去了,E...
  • ilovewqf
  • ilovewqf
  • 2016-01-16 11:57:28
  • 738

EJB系列(三)--有状态会话Bean和无状态会话Bean

EJB的基本分类     EJB分为EnterpriseBean(企业Bean)和Persistence(持久化),持久化Bean指的是Entity Bean(实体Bean,是一个代表存在于数据库中...
  • u010121883
  • u010121883
  • 2016-07-27 11:18:04
  • 588

无状态会话bean(1)---定义

无状态会话bean用于完成在单个方法的生命周期内的操作。无状态bean可以实现许多业务操作,但是每个方法都不能假定任何其他的方法会在它之前调用。这听起来像是无状态的bean的一个局限。但是这是迄今为止...
  • beijiguangyong
  • beijiguangyong
  • 2014-10-31 23:24:55
  • 2537

有状态会话Bean和无状态会话Bean的区别

    Session   Bean   主要的目的是让程序开发者将逻辑层抽离;    Entity   Bean   主要是资料组件,  Entity   Bean   主要的目的,在于提供资料,也...
  • lingxiao301415
  • lingxiao301415
  • 2007-09-29 15:02:00
  • 9206

EJB 第三章课件

  • 2011年11月19日 11:55
  • 776KB
  • 下载
收藏助手
不良信息举报
您举报文章:EJB之无状态会话Bean简单应用-学习与实践(Inber原作)
举报原因:
原因补充:

(最多只允许输入30个字)