程序解析示例(EJB之UML解析)

原创 2003年07月18日 07:05:00

程序解析示例(EJBUML解析

 客户端程序

/*

                * @(#) ConverterClienter.java  

                */

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.rmi.RortableRemoteObject;

import Converter;

import ConverterHome;

public class ConvertClient

{

  public static void main(String[] argv)

    {

      try

      {

        Context initial = new InitialContext();

        Object objref = initial.lookup("MyConverter");

        ConverterHome home =

       (ConverterHome)PortableRemoteObject.narrow(objref,

                                        ConverterHome.class);

        Converter currencyConverter = home.create( );

double amount = currencyConverter.DollarToRMB(100.00);

System.out.println(String.valueOf(amount));

amount = currencyConverter.RMBToDollar(100.00);

System.out.println(String.valueOf(amount));

currencyConverter.remove();

}

catch (Exception e)

{

  System.err.println("Caught an unexcepted exception!");

  ex.printStackTrace();

}

}

}


 

//解析

 

Context initial = new InitialContext();

Object objref = initial.lookup("MyConverter");

 

当部署EJB时,EJB的位置被使用JNDI注册在名称服务中。这个过程称为JNDI绑定。绑定的方式类似于  对象名——〉对象值,在本例的部署阶段,已经指定EJB的名字为MyConverter

所以要使用EJB的第一步是查找EJBMyConverter)。同样是使用JNDIJava Naming and Directory Interface  = Java 命名和目录接口)查找EJB的位置。JNDI只是一个Java API,而不是具体实现,它为底层的服务提供者接口提供了一个跨服务的接口。可以通过实现JNDI服务提供者的接口向JNDI层插入其命名服务。

命名服务于查找电话号码簿类似,需要获取查找的环境(就像要先确定是哪一本电话簿)。

J2EE中,由javax.naming.Context接口定义环境接口(Interface Class),对于每一个J2EE的应用部署环境,由初始环境javax.naming.InitialContext 实现javax.naming.Context 接口。提供具体的JNDI名字查找服务。

Context initial = new InitialContext();   //使用了创建型工厂模式?

Object objref = initial.lookup("MyConverter"); //由于可以绑定各种对象,所以返回值为Java的根对象Object

 

 

 

ConverterHome home =

       (ConverterHome)PortableRemoteObject.narrow(objref,

                                        ConverterHome.class);

找到EJB 后,要定位EJBHome 接口,方法是针对JNDI找到的EJB对象。使用一个该EJBHome 接口类型——ConverterHome 类型的变量引用Home接口ConverterHome.class

 

 

Converter currencyConverter = home.create( );

double amount = currencyConverter.DollarToRMB(100.00);

System.out.println(String.valueOf(amount));

amount = currencyConverter.RMBToDollar(100.00);

System.out.println(String.valueOf(amount));

currencyConverter.remove();

 

然后由Home接口home,创建EJB的远程接口Converter类型的变量currencyConverter。客户端调用远程接口currencyConverter的操作(double amount = currencyConverter.DollarToRMB(100.00);)远程接口又通过EJB的容器提供的机制调用EJB的操作ConverterEJB.DollarToRMB(100.00),返回结果,从而使用EJB的应用逻辑。

最后,结束前别忘了销毁EJB对象currencyConverter.remove()

 

 

远程接口

/*

                *@(#)Converter.java 

                */

import javax.ejb.EJBObject;

import java.rmi.RemoteException;

public interface Converter extends EJBObject

{

public double DollarToRMB(double dollars) throws RemoteException;

public double RMBToDollar(double RMB) throws RemoteException;

}


本地接口

/*

                * @(#)ConverterHome.java      

                */

import javax.io.Serializable;

import java.rmi.RemoteException;

import javax.ejb.CreateException;

import javax.ejb.EJBHome;

public interface ConverterHome extends EJBHome

{

Converter create() throws RemoteExceptoin, CreateException;

}

 

 


EJB

 

/*

                * @(#)ConverterEJB.java 

                */

import java.rmi.RemoteException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

public class ConverterEJB implements SessionBean

{

  public double DollarToRMB(double dollars)

  {

    return dollar*8.3000;

  }

  public double RMBToDollar(double RMB)

  {

    return RMB/8.3000;

  }

  public ConverterEJB( ) { }

  public void ejbCreate( ) { }

  public void ejbRemove( ) { }

  public void ejbActivate( ) { }

  public void ejbPassivate( ) { }

  public void setSessionContext(SessonContext sc) { }

}

UML概述与详解

 Longronglin之UML: 因为上面写了个设计模式而没有UML所以贴了上来。这些都是我2004年上半年无聊的时候整理的。望对大家有用统一建模语言(UML:Unified Modeling La...
  • longronglin
  • longronglin
  • 2006年12月22日 21:29
  • 7500

EJB入门实例一

我的这个项目太大了,一台机器来实现所有的功能太困难,那么我就让多个人来帮我实现。EJB...
  • lovemenghaibin
  • lovemenghaibin
  • 2016年02月15日 11:22
  • 1443

UML图详解(九)——包图

一、概述 维护和控制系统总体结构的重要建模工具方便理解和处理整个模型设计良好的包是高内聚、低耦合的,并对其内容的访问具有严密的控制 包的内容:拥有或引用的模型元素。 包的实例没有任何语义...
  • fanxiaobin577328725
  • fanxiaobin577328725
  • 2016年06月17日 15:47
  • 1785

Hyperledger Fabric SDK 示例fabric-samples-《balance-transfer》之十《查询链信息》

前言查询链信息。需要如下参数: peer节点 channel channel是fabric重要的特性,一个peer加入了几个channel中,那么peer节点就维护几个链的信息。不属于这个channe...
  • qq_27818541
  • qq_27818541
  • 2017年11月15日 09:57
  • 265

FAT32解析示例

#define FAT_ENTRY_DELETED(DirEntry) ((DirEntry).Filename[0] == 0xe5) //如果目录项开头是0xe5,表明是删除了...
  • Shevacoming
  • Shevacoming
  • 2010年02月18日 06:56
  • 1418

《技术之瞳》- 操作系统 - 习题 2.42

关于linux的I/O复用接口select和epoll,下列说法错误的是()A、 select调用时会进行线性遍历,epoll采用回调函数机制,不需要线性遍历 B、 select的最大连接数为FD_...
  • Alex_kailash
  • Alex_kailash
  • 2017年07月21日 15:57
  • 170

EJB解析

1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么,总得说说什么是所谓的"服务 集群"和"企业级开发"吧! 这个问题其实...
  • pql925
  • pql925
  • 2017年05月19日 08:38
  • 189

UML--时序图例子

一、时序图简介(Brief introduction) 时序图的创建:          二 设计--右键---Add Diagram--seque   、时序图元素(Sequence...
  • zhaodan19861107
  • zhaodan19861107
  • 2012年05月07日 16:15
  • 10205

Kafka设计解析(一)- Kafka背景及架构介绍

本文介绍了Kafka的创建背景,设计目标,使用消息系统的优势以及目前流行的消息系统对比。并介绍了Kafka的架构,Producer消息路由,Consumer Group以及由其实现的不同消息分发方式,...
  • Habren
  • Habren
  • 2015年03月27日 23:58
  • 1570

UML 九种图详解

因为九种图外加包图,如果都在一篇博客中写,写的时候容易出乱子,读起来也不方便,所以利用此博客作为一个目录,来跳转到相关博客中。 UML图详解(一)——基本概念 UML图详解(二)——用例图 UM...
  • fanxiaobin577328725
  • fanxiaobin577328725
  • 2016年06月05日 21:13
  • 1136
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序解析示例(EJB之UML解析)
举报原因:
原因补充:

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