`
jayjayjays
  • 浏览: 215458 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

客户通过由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

分享到:
评论

相关推荐

    Jboss下开发ejb应用之一会话bean的应用

    本文将围绕“Jboss下开发ejb应用之一会话bean的应用”这一主题,深入探讨如何在Jboss应用服务器上开发和部署会话Bean,以及涉及到的相关工具和源码。 会话Bean是EJB的一种类型,它代表了业务逻辑组件,为客户端提供...

    EJB3 示例有状态和无状态会话bean

    这个简单的示例展示了如何创建一个无状态会话Bean并从`Test.jsp`页面中调用它的方法。在实际项目中,`Test.jsp`可能会包含更复杂的逻辑来测试bean的各种功能。 总之,EJB3的有状态和无状态会话Bean提供了灵活的业务...

    实战EJB之三 开发会话Bean(有状态会话Bean).doc

    实战EJB之三开发会话Bean(有状态会话Bean) 本文主要讲解了有状态会话Bean(Stateful Session Bean)的概念、特点、生命周期和开发过程。下面是相关知识点的总结: 1. 什么是有状态会话Bean? 有状态会话Bean...

    使用JBoss 4.2书写EJB3.0无状态会话Bean + JPA + MySql 5.0的Hello World Java EE应用

    环境:Window XP profession, JDK 1.6, MySQL 5.0, JBoss...该示例使用EJB 3.0的无状态会话Bean呼叫JPA持久层完成数据库的操作,推荐广大企业级Java程序员项目中使用。 注意:连接池的配置参见上一个资源readme.txt文档

    EJB 3.0无状态会话Bean应用

    该示例使用Eclipse 3.3 Europa IDE、JDK 6.0、GlassFish 2.0翻写的第一个EJB 3.0会话bean应用。注意:必须首先安装GlassFish服务器,可以通过安装NetBean 6.0(M9)来完成安装该服务器,或能单独安装也行,然后在...

    Eclipse+Jboss EJB技术 会话Bean

    在EJB中,会话Bean分为两种类型:无状态会话Bean(Stateless Session Bean)和有状态会话Bean(Stateful Session Bean)。无状态会话Bean不保留任何客户端特定的信息,每次调用都是独立的。而有状态会话Bean则可以...

    EJB3开发第一个无状态会话bean

    **EJB3 开发第一个无状态会话 Bean ...以上就是关于“EJB3 开发第一个无状态会话 Bean”的详细解析,希望对您理解和实践 EJB3 技术有所帮助。如果您想了解更多有关 EJB3 的知识,可以参考给定的博文链接进行深入学习。

    无状态会话Bean实验指导.doc

    【无状态会话Bean实验指导】的文档主要涵盖了如何开发和测试无状态Session Bean的步骤,这是企业级JavaBeans(EJB)技术的一部分,属于...这有助于理解和验证无状态会话Bean的功能,并为以后的EJB学习和应用打下基础。

    JavaEE5学习笔记05-EJB之会话Bean总结

    ### JavaEE5学习笔记05-EJB之会话Bean总结 #### EJB(Enterprise JavaBeans)简介 EJB(Enterprise JavaBeans)是Java EE平台的一部分,用于开发和部署可重用的服务组件。EJB规范定义了如何编写、部署以及管理企业...

    实验一 开发环境安装、配置及无状态会话Bean的创建

    在本实验中,我们将学习如何安装和配置 JBoss 服务器,配置 MyEclipse 环境,创建及测试 EJB3 无状态会话 Bean。本实验将帮助我们掌握 JBoss 的安装与配置,掌握在 MyEclipse 中配置 JBoss 容器,掌握使用 MyEclipse...

    ejb有状态bean和无状态bean

    EJB的无状态会话Bean和有状态会话Bean分别针对不同的应用场景设计,开发者应根据实际需求选择合适的Bean类型。无状态Bean适用于简单、无状态的服务,而有状态Bean适用于需要保持客户端状态的复杂业务。理解并熟练...

    ejb3.0 第2,3讲-开发第一个无状态会话bean和客户端

    **ejb3.0 第2,3讲 - 开发第一个无状态会话bean和客户端** 在Java企业版(Java EE)中,Enterprise JavaBeans(EJB)是用于构建可扩展、安全和事务处理的服务器端应用程序的核心组件。EJB 3.0是一个重要的版本,它极...

    EJB3.0无状态SessionBean例子

    **EJB3.0无状态SessionBean例子** Enterprise JavaBeans(EJB)是Java平台上的一个核心组件,用于构建企业级分布式应用。EJB3.0是EJB规范的一个重大改进,它引入了诸多简化开发的新特性,使得EJB更加轻量级且易于...

    EJB 会话BEAN PPT

    会话Bean是EJB中处理客户端交互的组件,根据其状态,会话Bean分为有状态会话Bean(Stateful Session Beans)和无状态会话Bean(Stateless Session Beans)。 1. **无状态会话Bean**:无状态会话Bean不会持久保存...

    关于有状态和无状态会话bean的解释

    本篇文章将深入探讨有状态(Stateful)和无状态(Stateless)会话Bean的区别,以及如何在实际应用中选择合适的类型。 首先,我们要理解会话Bean的基本概念。会话Bean是一种服务器端对象,它作为客户端应用程序与...

    实验6-无状态会话bean.docx

    【实验6-无状态会话bean】是关于Java企业级应用开发的一个实践环节,主要涉及的是EJB(Enterprise JavaBeans)中的无状态会话bean。无状态会话bean是一种服务器端组件,它不保存任何会话状态信息,每次调用都是独立...

    实验6-无状态会话bean.pdf

    【实验6-无状态会话bean】主要涉及的是Java企业级应用开发中的核心概念——无状态会话Bean(Stateless Session Bean),这是Java EE(Java Platform, Enterprise Edition)规范中的重要组成部分,主要用于处理业务...

    EJB3.0源代码,包含会话Bean,实体Bean,还有消息Bean

    - **无状态会话Bean (Stateless Session Beans)**: 提供无持久性状态的业务逻辑服务。它们不维护与客户端的会话,每次调用都是独立的,适合处理大量并发请求。 - **有状态会话Bean (Stateful Session Beans)**: ...

Global site tag (gtag.js) - Google Analytics