欢迎光临
我们一直在努力

EJB内部资参3-JSP教程,J2EE/EJB/服务器

建站超值云服务器,限时71元/月

ejb开发概述
1、ejb的开发
先泛泛而论,讲一讲ejb的开发步骤。

1.1 sessionbean的开发
第一步, 写远程接口(remote interface),
继承ejbobject接口,把需要调用的public方法写在里面(这些方法将在sessionb
ean中实现),注意要声明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和jav
ax.ejb.createexception。
比如:

package jsper.ejb;

import java.rmi.*;
import javax.ejb.*;

public interface myejbhome extends ejbhome
{

myejb create() throws java.rmi.remoteexception, javax.ejb.createexcept
ion;

}

第三步, 写真正的session bean的实现(实现定义在远程接口中的方法), 需要
实现javax.ejb.sessionbean接口
注意:不能用implents myejb的方式直接实现远程接口,此处不用抛出remoteexc
eption
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 beans
home object.
enterprise bean class name — the fully qualified name of the enterpri
se 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 on
ly)
  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文件时

sh>cd mylib  //注意此处所在目录
sh>jar cv0f myejb.jar *

请注意: 到这一步我们做出的东西都是和和特定的ejb server是无关的, 只是
和遵循ejb的标准有关

第六步,使用特定平台的发布工具生成发布使用的jar文件。
不同的中间件产品此步骤非常不同, 产生的结果都是生成只有自己的ejb serve
r能理解的远程接口和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的过程中,会绑定一个名字到co
ntainer的目录服务中,现在我们要调用时从这个目录服务中把ejbhome对象取出
, 这里分为从本地和外部两种情况:
一种是客户端本地调用ejb。 比如和ejb引擎和servlet引擎是整合在同一个appl
ication server中, 这时当一个servlet要调用ejb时无须验证,即可得到ejbho
me接口的实现
 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.aur
ora.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_lo
gin);
// 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("he
llo");

//create three element array of count object
  ejb ejb =tmp.create();
  system.out.println(ejb.sayhello());
}
catch(exception e)
{
e.printstacktrace();
}
由于和具体的目录服务、协议相关,为了达到可移植的目的,只好多做一些工作
,幸好一般不需要做这些工作。

附图

ejb的调用模型

passivation of stateful session bean

activation of stateful session bean

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » EJB内部资参3-JSP教程,J2EE/EJB/服务器
分享到: 更多 (0)

相关推荐

  • 暂无文章