分享
 
 
 

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

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

•客户通过由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.classCalculatorHome.classCalculatorEJB.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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有