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

•客户通过由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 企业级Java Bean(EJB)是Java EE(现在称为Jakarta EE)平台的核心组件模型。它提供了一种框架,允许开发者编写可扩展、事务性和安全的服务器端业务逻辑。EJB技术的出现简化了复杂应用的开发,通过抽象各种企业级服务(如事务管理、安全认证等)来减轻开发者的负担。无状态会话Bean(Stateless Session Bean)是企业级Java Bean(EJB)的一部分,属于会话Bean的一种,它不保存客户端的状态信息。 阅读详情

相关推荐

配置cts performance最优范围

这里写自定义目录标题cts例如此案例中,我们多测几次,发现Measured frame rate 的平均值为average=(380+389+380+371)/4=380 cts by VinterYoung Expected achievable frame rates for OMX.MTK.VIDEO.DECODER.HEVC video/hevc 1280x720: [75.0, 262.0]. Measured frame rate: [380.5645006622224, 389.3983545

o343196469的博客 1317

什么是EJB?

什么是EJB?

这里有一只小马吖 3711

自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应

自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应 一般情况下,我们都是在 dialog 里面 放一个 list 控件,然后 用自己的类绑定自己的自绘对象,如同下面: 1.  在 dialog 里面 加一个 list 列表 2. 然后 绑定这个列表 哈哈...

mfreesky的专栏 2169

J2EE基础之EJB全面了解

当有状态会话Bean处于活动状态一段时间后,如果仍然没有收到外部客户端的请求,为了节省系统资源,容器会把有状态会话Bean中的状态信息序列化到临时存储空间,并把有状态会话Bean从内存中移除,这个过程称为“钝化”。

yeyinganny的博客 5036

2021电子科技大学分布式系统期末考点精析与实战解析

本文深入解析2021年电子科技大学分布式系统期末考试核心考点,包括分布式事务、时钟同步、GFS架构等高频内容。基于回忆版试题,提供实战解析与应试技巧,帮助考生高效复习。重点涵盖两阶段提交、Cristian算法等关键技术,适合计算机专业学生备考参考。

weixin_29251131的博客 537

C++面向对象程序设计大作业:魔兽世界(三):开战

C++面向对象程序设计大作业:魔兽世界(三):开战问题描述问题分析代码 问题描述 问题来自于北京大学郭炜老师的C++慕课的大作业 魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市,城市从西向东依次编号为1,2,3 … N ( N <= 20)。红魔军的司令部算作编号为0的城市,蓝魔军的司令部算作编号为N+1的城市。司令部有生命元,用于制造武士。 两军的司令部都会制造武士。武士一共有dragon 、ninja、iceman、lion、wolf 五种。每种武士都有

RedRum_1965的博客 4036

EJB框架 详细介绍和注解的使用

一、EJB是什么? EJB是sun的JavaEE服务器端组件模型,是一种规范,设计目标与核心应用是部署分布式应用程序。 EJB2.0过于复杂,EJB3.0的推出减轻了开发人员进行底层开发的工作量,它取消或最小化了很多(以前这些是必须实现)回调方法的实现,并且降低了实体Bean及O/R映射模型的复杂性。 EJB大概是J2EE架构中唯一一个没有兑现其能够简单开发并提高生产力承诺的组件。 二...

L-N-H的博客 5001

全网最详细 解决戴维南定理的详细推导

替代定理,戴维南定理详细证明

m0_52555753的博客 3万+

EJB基本概念和使用

EJB基本概念和使用

灿的博客 4212

避开这些坑!晶圆封装中Wire Bonding(引线键合)的5种常见不良与实战调试心得

本文深入探讨晶圆封装中Wire Bonding(引线键合)的5种常见不良现象,包括Wire Offset、BSOB不良、球径/球厚异常、弧度不良和IMC问题。通过实际案例和参数优化方案,帮助工程师提升封装质量和可靠性,特别适用于半导体封装领域的专业人士。

weixin_33672109的博客 523

pi-coding-agent 完整详解

pi-coding-agent是一个由Mario Zechner开发的专业AI编程助手,基于Node.js和TypeScript构建。核心功能包括:1)多级思考模式(ThinkingLevel),从none到ultra控制推理深度;2)对话压缩(compaction)管理长对话记忆;3)WebSocket实时通信支持流式交互。该智能体支持代码生成、调试、重构等专业编程任务,采用AI Agent架构,具备工具调用和多轮记忆能力。项目结构通常包含server、agent、config等模块,可通过二次开发扩展功

大坡3D软件开发 2406

什么是EJB以及和Spring Framework的区别

EJB,对于新生代程序员来说,是一个既熟悉又陌生的名词,EJB,大家都听说过,但是不一定都了解过,EJB是一种开发规范,而不是像Spring Framework一样是一个开源框架,EJB需要大量的XML配置和编码,增加了开发人员的工作负担,学习曲线相对陡峭,因此逐步被ssh取代,而后是s2sh 、ssm、 到现在的springboot微服务。在 Java 企业应用程序开发中,EJB(Enterprise JavaBeans)和 Spring Framework 都是两个重要的技术选项。

FirstMrRight的博客 2680

Python从0到100完整学习指南(必看导航)

想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学业升学和工作就业的先行者!

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 6万+

EJB中JNDI的逻辑名的使用及部署_{EJB之无状态会话Bean简单应用-学习与实践}续(inber原作)

     JNDI的逻辑名在实际应用中往往多于程序里面直接指定JNDI名,因为这样使用的好处在于:避免部署EJB应用时出现同名JNDI名而去修改程序中指定的JNDI名。(举一个简单的例子:如果在没有使用逻辑名的情况下,将一个EJB应用部署到另一台EJB服务器的一个应用上,此时如果出现部署时有同名的JNDI就必须修改程序文件,所以为避免部署EJB应用时出现同名JNDI名,只需要在程序中使用JNDI名

Inber 2341

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

EJB基础一 无状态会话BEAN使用 EJB是J2EE的一条标准。以往EJB被人诟病,缺点是复杂,沉重。然后spring崛起了,spring因其轻量级,开发方便而得到了迅速地推广。但是这是过去了,EJB 2.X确实存在这个特点。但新标准的EJB 3.X却在向轻量级转变,而且开发效率可以说完全与spring相当。 要进行EJB开发,必须有EJB容器,tomcat是默认没有实现EJB的。实现了EJ

ilovewqf的博客 1767

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

前面文章介绍过EJB的一些基本概念和三种bean,今天重点介绍一下会话bean中的有状态会话bean和无状态会话bean。  会话bean分为有状态的会话bean和无状态的会话bean:有状态会话bean :  每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bea

邵鸿鑫 7654

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

[原创]EJB循序渐进,手把手创建简单的无状态会话BEAN

    大家好,我是bluesky35(蓝天),好久不见了,抽空和大家交流一下EJB的有关问题,听说过或做过JAVA的人一定知道EJB(Enterprise JavaBean)的存在,EJB作为JAVA的一项重要标准,已经被广泛应用,它的状态持久性和出色的WebService表现一度令人拍案叫绝,EJB大致分为三种类型(实体Bean,会话Bean和消息驱动Bean).会话Bean又称为Sessio

bluesky35(蓝天)的专栏 2619

EJB3.0入门经典(笔记)-无状态会话Bean

路漫漫其修远兮,吾将上下而求索 4196

「Java EE开发指南」用MyEclipse开发EJB 3无状态会话Bean(一)

本教程将向您展示如何用MyEclipse开发EJB 3无状态会话Bean,欢迎下载最新版IDE体验!

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 1097

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

在EJB里面,会话Bean分为两种,一种是有状态的会话Bean,另一种是无状态的会话Bean,本节主要讲解一下两者之间的区别。        对于有状态的会话Bean,这种情况属于,服务端与你单独开辟了一块空间与你进行交互。而客户端感觉服务端单独为他自己服务似的。而无状态的会话Bean,则服务端不提供了一个资源但是谁用都行,他不负责。所以客户端在使用的时候,则会感到这个服务 与其他人共享似的。服务

赵崇 2529

「Java EE开发指南」用MyEclipse开发EJB 3无状态会话Bean(二)

本教程将向您展示如何用MyEclipse开发EJB 3无状态会话Bean,欢迎下载最新版IDE体验!

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 1334

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

EJB的基本分类     EJB分为EnterpriseBean(企业Bean)和Persistence(持久化),持久化Bean指的是Entity Bean(实体Bean,是一个代表存在于数据库中业务对象的复杂业务实体)。企业Bean又包括Session Bean(会话Bean,完成一个清晰的解耦的任务)和Message Driven Bean(MDB,消息驱动Bean,基于JMS,专门用于异

帆布鞋也能走猫步 1378

EJB 有状态会话bean无状态会话bean详解

下面主要对Session  Bean讨论     现实中,很多朋友对两种session bean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息。仔细分析并用实践检验后,你会发现,事实恰好相反:有状态和无状态会话bean的本质区别是它们的生命期。    首先解释一个下面要用到的概念--用户:session be

eddle的专栏 1265

Java - 有状态bean和无状态bean

有状态Bean和无状态Bean的本质区别:声明周期 1. 前言:EJB EJB:称为企业Java beans,是基于分布式事务处理的企业级应用程序的组件。 Sun公司发布的文档中对EJB的定义是:EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构 EJB种类: EJB容器可以接收三类EJB: 会话Bean(Session Beans) 有状态会话Bean 无状态会话Bean 实体Bean(Entity Bean) 消息驱动Bean(Message Dri.

qq_40286155的博客 2484

有状态Bean和无状态Bean

现实中,很多朋友对两种session bean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息。仔细分析并用实践检验后,你会发现,事实恰好相反: 有状态和无状态会话bean的本质区别是它们的生命期。 首先解释一个下面要用到的概念--用户:session bean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例...

qq_36118769的博客 2164
上一篇: 用标签实现循环功能---标签开发之三(Inber原作)
下一篇: windows下配置Apache支持PHP5
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值