EJB之无状态会话Bean简单应用-学习与实践

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

时间: 2024-09-20 00:01:17

EJB之无状态会话Bean简单应用-学习与实践的相关文章

EJB 3.0开发指南之无状态会话Bean

在所有的EJB3.0规范中定义的EJB,都不必实现Home接口. 一个会话Bean必须有一个业务接口,这个接口由会话Bean来实现,或者也可以由会话Bean来产生.这样,你可以只写一个文件,就可以生成业务逻辑实现类.远程接口.本地接口等. - @Remote @Local @Stateless public class CounterBean { -- } 在目前jboss的实现中,必须要有一个独立的业务接口. 这个接口不必实现EJBObject或者EJBLocalObject. 一个无状态会话

JBoss下的EJB3开发无状态会话Bean

1.开发一个具有Remote和Local接口的EJB3 Stateless SessionBean.如有那里写的不好请大家多多指教.################################ 好了先介绍一下明星演员们:###############################Remote接口:RemoteHelloWorld.javaLocal接口:LocalHelloWorld.javaSessionBean:HelloWorldBean.javaJNDI配置:jndi.proper

有状态和无状态会话bean的区别

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

Weblogic10 + EJB3入门教程(1):编写第一个无状态会话Bean(Stateless Session Bean)

本文为原创,如需转载,请注明作者和出处,谢谢!     在本文主要介绍如何来开发一个Stateless Session Bean,并在未安装WebLogic10的机器上访问Session Bean.开发EJB3 Stateless Session Bean要比开发EJB2 Stateless Session Bean容易得多,只需要几个注释就可以搞定.读者可按如下的步骤来开发和调用EJB3 Stateless Session Bean: 第1步:编写远程接口     每一个Session Bea

EJB 3.0开发指南之有状态会话Bean

和无状态会话Bean一样,一个有状态会话Bean必须有一个业务接口,这个接口由会话Bean来实现,或者也可以由会话Bean来产生.这样,你可以只写一个文件,就可以生成业务逻辑实现类.远程接口.本地接口等. 在目前jboss的实现中,必须要有一个独立的业务接口. 这个接口不必实现EJBObject或者EJBLocalObject. 一个有状态会话Bean 必须使用Statelfull注释,以表明它是一个有状态的会话Bean.EJB容器将根据这个注释来判定它的类型.或者实现javax.ejb.Ses

当有状态会话Bean遇到JMS

问题描述 相信大家对EJB规范中的几种Bean一定听说过,包括:statelesssessionBean:在实现的时打上@Stateless即可,无状态会话Bean的生命周期非常简单的.它仅有两个状态:不存在和Method-Ready池.Method-Ready池是不在使用状态的无状态会话bean对象的实例池.Becauseofalltheinjectionandsuchthatcanhappen,这对于保存不在使用的无状态Bean实例是很有效的.这也是无状态会话Bean和有状态会话Bean的重

EJB 3.0注入(会话BEAN)

按照管理 来看看 例子 就清楚了 这个是一个实体bean的实现 package com.ly.bean; import javax.ejb.Remote; @Remote public interface Bean1 { public void sayBean1(); } package com.ly.bean; import javax.ejb.Remote; @Remote a public interface Bean2 { public void sayBean2(); } packag

面试中被一个问题问到了,关于EJB会话bean的,大侠进来帮忙解答一下

问题描述 简单地介绍下无状态会话bean和有状态会话bean的联系与差别? 解决方案 解决方案二:我是初学者,我也不会解决方案三:区别就在有没有状态.解决方案四:因为区别于有无状态,所以差别体现在可以服务任何请求,和服务于某一特定的请求解决方案五:状态指的就是这个类的属性.对于EJB容器来说,其会对StatelessSessionBean的实例进行重用,如果在StatelessSessionBean中有属性成员的话,会在重用这个对象时继续含有这个属性成员的值.而StatefulSessionBe

一步一步学EJB 3.0(三):悟透会话Bean(上)

会话 Bean 用于管理实体 Bean 和其它会话 Bean 的交互.访问资源,它们通常代表客户机执行任务 .会话 Bean 对应于"模型-视图-控制器"体系结构中的控制器,因为它们都封装三层体系结构中的商业 逻辑.会话Bean也叫会话组件(session bean),又可分为无状态会话组件和有状态会话组件两类. 无状态 Bean 之所以称作无状态是因为它们是过渡的:他们不维护方法调用之间的商业状态.有状态 会话 Bean 封装商业逻辑和特定于某个客户机的状态.有状态 bean 之所以