分享
 
 
 

EJB的入门教材

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

1、EJB的开发

先泛泛而论,讲一讲EJB的开发步骤。

1.1 SessionBean的开发

第一步,写远程接口(remote interface),继承EJBObject接口,把需要调用的public方法写在里面(这些方法将在SessionBean中实现),注意要声明throws

java.rmi.RemoteException。

例如:

package

jsper.ejb;

import java.rmi.*;

import javax.ejb.*;

public

interface MyEJB extends EJBObject

{

public String

sayHello() throws java.rmi.RemoteException;

}

第二步,

写Home接口(生成EJBObject引用的factory) 至少生成一个create方法, 注意要声明throws java.rmi.RemoteException和javax.ejb.CreateException。

比如:

package

jsper.ejb;

import java.rmi.*;

import

javax.ejb.*;

public interface MyEJBHome extends

EJBHome

{

MyEJB create() throws

java.rmi.RemoteException, javax.ejb.CreateException;

}

第三步,

写真正的Session Bean的实现(实现定义在远程接口中的方法), 需要实现javax.ejb.SessionBean接口

注意:不能用implents

MyEJB的方式直接实现远程接口,此处不用抛出RemoteException package jsper.ejb;

import

java.rmi.RemoteException;

import javax.ejb.*;

public class

MyEJBClass implements SessionBean {

public MyEJBClass()

{

}

//定义在SessionBean 中的方法

public void ejbCreate() throws

RemoteException, CreateException {

}

public void ejbActivate()

throws RemoteException {

}

public void ejbPassivate() throws

RemoteException {

}

public void ejbRemove() throws

RemoteException {

}

public void

setSessionContext(SessionContext ctx)

throws RemoteException

{

}

//此处是具体的实现

public String

sayHello()

{

System.out.println("Hello");

}

}

第四步,写一个发布用的配置文件ejb-jar.xml 需要提供的信息:

Bean

Home name -- The nickname that clients use to lookup your bean’s home

object.

Enterprise bean class name -- The fully qualified name of the

enterprise bean class.

Home interface class name

Remote

interface class name

Re-entrant -- Whether the enterprise bean allow

re-entrant calls. This setting must be false for session beans(it applies

to entity beans only)

stateful or stateless

Session

timeout --

The length of time (in seconds) before a client should time out

when calling methods on your

bean.

最后你还可以提供属于自己的配置信息供自己控制EJB的工作方式。

例子:

helloEjb

com.jsper.ejb.MyEJBHome

com.jsper.ejb.MyEJB

com.jsper.ejb.MyEJBClass

Stateless

Container

第五步,将你的所有文件用jar工具生成jar文件

ejb-jar.xml须在顶级的META-INF子目录

这句话比较咬嘴, 举个例子

mylib----META-INF--*.XML

|

|com--coucouniu--ejb---EJBClass

|-EJBHome

|-EJB

在生成.jar文件时

shcd

mylib

//注意此处所在目录

shjar cv0f myejb.jar *

请注意:

到这一步我们做出的东西都是和和特定的EJB Server是无关的, 只是和遵循EJB的标准有关

第六步,使用特定平台的发布工具生成发布使用的jar文件。

不同的中间件产品此步骤非常不同,产生的结果都是生成只有自己的EJB Server能理解的远程接口和Home接口实现等等东西,打包在一个jar文件中 一般是很简单的

第七步,把.jar文件发布到EJB

Server

根据不同的中间件产品此步骤非常不同, 可以分为启动时发布和运行时发布两种,一般是很简单的, 以weblogic为例:

1、在weblogic.properties 文件中配置使weblogic 启动时自动装载。

添加一个条目比如:

weblogic.ejb.deploy=C:/weblogic510/myserver/ejb_basic_beanManaged.jar,C:/weblogic510/myserver/ejb_basic_test.jar

2、使用deploy或DeployerTool动态装载/卸载/更新

第八步,写客户端的程序(我迄今为止的理解)

在我们使用发布工具把EJB发布到EJB Container的过程中,会绑定一个名字到Container的目录服务中,现在我们要调用时从这个目录服务中把EJBHome对象取出, 这里分为从本地和外部两种情况:

一种是客户端本地调用EJB。 比如和EJB引擎和Servlet引擎是整合在同一个Application Server中, 这时当一个Servlet要调用EJB时无须验证,即可得到EJBHome接口的实现

Context ic = new

InitialContext();

System.out.println("Looking for the EJB published

as ’hello’");

com.jsper.ejb.MyEJBHome homeInterface =

(com.jsper.ejb.MyEJBHome) ic.lookup(“hello”);

//发布时绑定的名字是hello

这样就可从目录服务中得到Home接口的实现, 也是我们最常用的方式, 可移植性很好

外部调用的话首先要经过身份验证,

比如Oracle8i :

String ejbUrl =

"sess_iiop://localhost:2481:ORCL/test/MyEJB";

String username =

"scott";

String password = "tiger";

// Setup the

environment

Hashtable environment = new Hashtable();

// Tell

JNDI to speak

sess_iiop

environment.put(javax.naming.Context.URL_PKG_PREFIXES,

"oracle.aurora.jndi");

// Tell sess_iiop who the user

is

environment.put(Context.SECURITY_PRINCIPAL, username);

//

Tell sess_iiop what the password

is

environment.put(Context.SECURITY_CREDENTIALS, password);

//

Tell sess_iiop to use credential

authentication

environment.put(Context.SECURITY_AUTHENTICATION,

ServiceCtx.NON_SSL_LOGIN);

// Lookup the

URL

com.jsper.ejb.MyEJBHome homeInterface = null;

try

{

System.out.println("Creating an initial context");

Context

ic = new InitialContext(environment);

System.out.println("Looking

for the EJB published as ’test/MyEJB’");

homeInterface =

(com.jsper.ejb.MyEJBHome) ic.lookup(ejbUrl);

}

catch

(ActivationException e) {

System.out.println("Unable to activate : "

+

e.getMessage());

e.printStackTrace();

System.exit(1);

}

再比如weblogic的调用方式:

try

{

//

Get an InitialContext

String

url="t3://localhost:7001";

Properties h = new

Properties();

h.put(Context.INITIAL_CONTEXT_FACTORY,

"weblogic.jndi.WLInitialContextFactory");

h.put(Context.PROVIDER_URL,

url);

Context ctx =

new

InitialContext(h);

System.out.println("Getting the EJBHome

object…");

com.jsper.ejb.EJBHome tmp=

(com.jsper.ejb.EJBHome)ctx.lookup("hello");

//create three element

array of COUNT object

EJB ejb

=tmp.create();

System.out.println(ejb.sayHello());

}

catch(Exception

e)

e.printStackTrace();

}

由于和具体的目录服务、协议相关,为了达到可移植的目的,

只好多做一些工作,幸好一般不需要做这些工作。

/*

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有