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

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

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

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

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

Java之旅EJB(2)——三种bean之会话bean

前面我们大致讲过ejb是什么,这里不再对定义进行讲解,主要是讲解内部的组成。  1.      Bean分类   会话bean(session bean)   负责与客户端交互,是编写业务逻辑的地方,...
  • u010955843
  • u010955843
  • 2015年08月28日 20:10
  • 915

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

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

EJB 实体bean,会话bean,和消息驱动bean

http://javapub.iteye.com/blog/751459 EJB 3.0规范使开发EJB比过去更容易,可能诱惑你考虑开发第一个EJB。如果真是这种情况,那么祝贺你,你已经...
  • xianymo
  • xianymo
  • 2015年11月26日 11:51
  • 1357

有状态EJB和无状态EJB的区别

前边的文章中,简单的介绍了ejb的三种bean,我们这片文章通过实例来看一下有状态的会话bean和无状态的会话bean的区别。          我们建立一个ejb项目,分别创建两个接口, 两个实现类...
  • zhanghongjie0302
  • zhanghongjie0302
  • 2015年12月16日 22:04
  • 2551

Ejb-有状态&无状态SessionBean

1.    Ejb的分类   首先,企业级Bean分为三类:      SessionBean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Sess...
  • wang379275614
  • wang379275614
  • 2015年02月14日 22:04
  • 1285

EJB——有状态的会话bean和无状态的会话bean

前面文章介绍过EJB的一些基本概念和三种bean,今天重点介绍一下会话bean中的有状态会话bean和无状态会话bean。  会话bean分为有状态的会话bean和无状态的会话bean:有状态会话be...
  • u010926964
  • u010926964
  • 2016年04月29日 09:32
  • 6165

EJB3~单例会话bean

在EJB3.1之前在会话bean的种类中是没有单例会话bean的,有的只是有状态会话bean以及无状态会话bean。毋庸置疑无状态会话bean以其优秀的性能被普遍使用,但是人们发现在无状态会话bean...
  • zhengchao1991
  • zhengchao1991
  • 2016年11月01日 10:37
  • 493

Ejb的实体bean

在上一篇文章中,我们学习了EJB的会话bean,这篇文章我们来说一下EJB的实体bean,说到实体bean,就不得不说JPA了,JPA是在EJB3.0的时候提出来的,但是他不局限于EJB3.0,而是适...
  • zhanghongjie0302
  • zhanghongjie0302
  • 2015年12月18日 13:13
  • 1669
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EJB之无状态会话Bean简单应用-学习与实践(Inber原作)
举报原因:
原因补充:

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