⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ejb开发概述.htm

📁 写给JSP初级程序员的书
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0056)http://eps.www85.cn4e.com/java/article/devshow.asp?id=50 -->
<HTML><HEAD><title>csdn_EJB开发概述</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE type=text/css>TD {
	FONT-FAMILY: "Verdana", "Arial", "宋体"; FONT-SIZE: 9pt
}
A {
	COLOR: #660000; TEXT-DECORATION: underline
}
A:hover {
	COLOR: #660000; TEXT-DECORATION: none
}
.line {
	LINE-HEIGHT: 14pt
}
</STYLE>

<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff text=#000000>
<table>
  <table><tbody>
  <TR>
    <TD height=21>
      <DIV align=center><B><FONT size=3>EJB开发概述 <BR><FONT 
      size=2> </FONT></FONT></FONT>
      <HR align=center color=#cccccc noShade SIZE=1>
      </DIV></TD></TR>
  <TR>
    <TD class=line><FONT 
      color=#333300>1、EJB的开发<BR><BR><BR>先泛泛而论,讲一讲EJB的开发步骤。<BR><BR>1.1&nbsp;SessionBean的开发<BR>第一步,&nbsp;写远程接口(remote&nbsp;interface),<BR>继承EJBObject接口,把需要调用的public方法写在里面(这些方法将在SessionBean中实现),注意要声明throws&nbsp;java.rmi.RemoteException。&nbsp;<BR>例如:<BR><BR>package&nbsp;jsper.ejb;<BR><BR>import&nbsp;java.rmi.*;<BR>import&nbsp;javax.ejb.*;<BR><BR>public&nbsp;interface&nbsp;MyEJB&nbsp;extends&nbsp;EJBObject&nbsp;<BR>{<BR><BR>public&nbsp;String&nbsp;sayHello()&nbsp;throws&nbsp;java.rmi.RemoteException;<BR><BR>}<BR><BR>第二步,&nbsp;写Home接口(生成EJBObject引用的factory)&nbsp;<BR>至少生成一个create方法,&nbsp;注意要声明throws&nbsp;java.rmi.RemoteException和javax.ejb.CreateException。<BR>比如:<BR><BR><BR><BR>package&nbsp;jsper.ejb;<BR><BR>import&nbsp;java.rmi.*;<BR>import&nbsp;javax.ejb.*;<BR><BR><BR>public&nbsp;interface&nbsp;MyEJBHome&nbsp;extends&nbsp;EJBHome&nbsp;<BR>{<BR><BR><BR><BR>MyEJB&nbsp;create()&nbsp;throws&nbsp;java.rmi.RemoteException,&nbsp;javax.ejb.CreateException;<BR><BR>}<BR><BR>第三步,&nbsp;写真正的Session&nbsp;Bean的实现(实现定义在远程接口中的方法),&nbsp;需要实现javax.ejb.SessionBean接口<BR>注意:不能用implents&nbsp;MyEJB的方式直接实现远程接口,此处不用抛出RemoteException<BR>package&nbsp;jsper.ejb;<BR><BR>import&nbsp;java.rmi.RemoteException;<BR>import&nbsp;javax.ejb.*;<BR>public&nbsp;class&nbsp;MyEJBClass&nbsp;implements&nbsp;SessionBean&nbsp;{<BR><BR> <BR> public&nbsp;MyEJBClass()&nbsp;{<BR> }<BR> //定义在SessionBean&nbsp;中的方法&nbsp;<BR> public&nbsp;void&nbsp;ejbCreate()&nbsp;throws&nbsp;RemoteException,&nbsp;CreateException&nbsp;{<BR> }<BR><BR> public&nbsp;void&nbsp;ejbActivate()&nbsp;throws&nbsp;RemoteException&nbsp;{<BR> }<BR><BR> public&nbsp;void&nbsp;ejbPassivate()&nbsp;throws&nbsp;RemoteException&nbsp;{<BR> }<BR><BR> public&nbsp;void&nbsp;ejbRemove()&nbsp;throws&nbsp;RemoteException&nbsp;{<BR> }<BR><BR>public&nbsp;void&nbsp;setSessionContext(SessionContext&nbsp;ctx)&nbsp;<BR>throws&nbsp;RemoteException&nbsp;{<BR><BR> }<BR><BR> //此处是具体的实现<BR><BR> public&nbsp;String&nbsp;sayHello()<BR><BR> {<BR><BR>  System.out.println("Hello");<BR> }<BR>}&nbsp;<BR>第四步,写一个发布用的配置文件ejb-jar.xml<BR>需要提供的信息:<BR>Bean&nbsp;Home&nbsp;name&nbsp;--&nbsp;The&nbsp;nickname&nbsp;that&nbsp;clients&nbsp;use&nbsp;to&nbsp;lookup&nbsp;your&nbsp;bean's&nbsp;home&nbsp;object.<BR>Enterprise&nbsp;bean&nbsp;class&nbsp;name&nbsp;--&nbsp;The&nbsp;fully&nbsp;qualified&nbsp;name&nbsp;of&nbsp;the&nbsp;enterprise&nbsp;bean&nbsp;class.<BR> &nbsp;Home&nbsp;interface&nbsp;class&nbsp;name<BR> &nbsp;Remote&nbsp;interface&nbsp;class&nbsp;name<BR>Re-entrant&nbsp;--&nbsp;Whether&nbsp;the&nbsp;enterprise&nbsp;bean&nbsp;allow&nbsp;re-entrant&nbsp;calls.&nbsp;This&nbsp;setting&nbsp;must&nbsp;be&nbsp;false&nbsp;for&nbsp;session&nbsp;beans(it&nbsp;applies&nbsp;to&nbsp;entity&nbsp;beans&nbsp;only)<BR> &nbsp;stateful&nbsp;or&nbsp;stateless&nbsp;<BR> &nbsp;Session&nbsp;timeout&nbsp;-- The&nbsp;length&nbsp;of&nbsp;time&nbsp;(in&nbsp;seconds)&nbsp;before&nbsp;a&nbsp;client&nbsp;should&nbsp;time&nbsp;out&nbsp;when&nbsp;calling&nbsp;methods&nbsp;on&nbsp;your&nbsp;bean.<BR>最后你还可以提供属于自己的配置信息供自己控制EJB的工作方式。<BR><BR>例子:<BR>   <BR>helloEjb<BR>com.jsper.ejb.MyEJBHome<BR>com.jsper.ejb.MyEJB<BR>com.jsper.ejb.MyEJBClass<BR>Stateless<BR>Container<BR>   <BR> <BR><BR>第五步,将你的所有文件用jar工具生成jar文件<BR><BR>ejb-jar.xml须在顶级的META-INF子目录<BR>这句话比较咬嘴,&nbsp;举个例子<BR><BR>mylib----META-INF--*.XML<BR>|&nbsp;<BR>|com--coucouniu--ejb---EJBClass<BR>   |-EJBHome<BR>   |-EJB<BR>   <BR>在生成.jar文件时<BR><BR>sh&gt;cd&nbsp;mylib  //注意此处所在目录<BR>sh&gt;jar&nbsp;cv0f&nbsp;myejb.jar&nbsp;*<BR><BR>请注意:&nbsp;到这一步我们做出的东西都是和和特定的EJB&nbsp;Server是无关的,&nbsp;只是和遵循EJB的标准有关<BR><BR>第六步,使用特定平台的发布工具生成发布使用的jar文件。<BR>不同的中间件产品此步骤非常不同,&nbsp;产生的结果都是生成只有自己的EJB&nbsp;Server能理解的远程接口和Home接口实现等等东西,打包在一个jar文件中<BR>一般是很简单的<BR>第七步,把.jar文件发布到EJB&nbsp;Server<BR><BR>根据不同的中间件产品此步骤非常不同,&nbsp;可以分为启动时发布和运行时发布两种,一般是很简单的,&nbsp;以weblogic为例:<BR>1、在weblogic.properties&nbsp;文件中配置使weblogic&nbsp;启动时自动装载。<BR>添加一个条目比如:<BR>weblogic.ejb.deploy=C:/weblogic510/myserver/ejb_basic_beanManaged.jar,\<BR>  C:/weblogic510/myserver/ejb_basic_test.jar<BR>  <BR>2、使用deploy或DeployerTool动态装载/卸载/更新<BR><BR>第八步,写客户端的程序(我迄今为止的理解)&nbsp;<BR>在我们使用发布工具把EJB发布到EJB&nbsp;Container的过程中,会绑定一个名字到Container的目录服务中,现在我们要调用时从这个目录服务中把EJBHome对象取出,&nbsp;这里分为从本地和外部两种情况:<BR>一种是客户端本地调用EJB。&nbsp;比如和EJB引擎和Servlet引擎是整合在同一个Application&nbsp;Server中,&nbsp;这时当一个Servlet要调用EJB时无须验证,即可得到EJBHome接口的实现<BR> Context&nbsp;ic&nbsp;=&nbsp;new&nbsp;InitialContext();<BR>   System.out.println("Looking&nbsp;for&nbsp;the&nbsp;EJB&nbsp;published&nbsp;as&nbsp;'hello'");<BR>   com.jsper.ejb.MyEJBHome&nbsp;homeInterface&nbsp;=&nbsp;(com.jsper.ejb.MyEJBHome)&nbsp;ic.lookup(“hello”);&nbsp;//发布时绑定的名字是hello<BR> 这样就可从目录服务中得到Home接口的实现,&nbsp;也是我们最常用的方式,&nbsp;可移植性很好<BR><BR>外部调用的话首先要经过身份验证,<BR>比如Oracle8i&nbsp;:<BR><BR>String&nbsp;ejbUrl&nbsp;=&nbsp;"sess_iiop://localhost:2481:ORCL/test/MyEJB";<BR>  String&nbsp;username&nbsp;=&nbsp;"scott";<BR>  String&nbsp;password&nbsp;=&nbsp;"tiger";<BR><BR>  //&nbsp;Setup&nbsp;the&nbsp;environment<BR>  Hashtable&nbsp;environment&nbsp;=&nbsp;new&nbsp;Hashtable();<BR>  //&nbsp;Tell&nbsp;JNDI&nbsp;to&nbsp;speak&nbsp;sess_iiop<BR>  environment.put(javax.naming.Context.URL_PKG_PREFIXES,&nbsp;"oracle.aurora.jndi");<BR>  //&nbsp;Tell&nbsp;sess_iiop&nbsp;who&nbsp;the&nbsp;user&nbsp;is<BR>  environment.put(Context.SECURITY_PRINCIPAL,&nbsp;username);<BR>  //&nbsp;Tell&nbsp;sess_iiop&nbsp;what&nbsp;the&nbsp;password&nbsp;is<BR>  environment.put(Context.SECURITY_CREDENTIALS,&nbsp;password);<BR>  //&nbsp;Tell&nbsp;sess_iiop&nbsp;to&nbsp;use&nbsp;credential&nbsp;authentication<BR>environment.put(Context.SECURITY_AUTHENTICATION,&nbsp;ServiceCtx.NON_SSL_LOGIN);<BR>//&nbsp;Lookup&nbsp;the&nbsp;URL<BR>  com.jsper.ejb.MyEJBHome&nbsp;homeInterface&nbsp;=&nbsp;null;<BR>  try&nbsp;{<BR>   System.out.println("Creating&nbsp;an&nbsp;initial&nbsp;context");<BR>   Context&nbsp;ic&nbsp;=&nbsp;new&nbsp;InitialContext(environment);<BR>   System.out.println("Looking&nbsp;for&nbsp;the&nbsp;EJB&nbsp;published&nbsp;as&nbsp;'test/MyEJB'");<BR>   homeInterface&nbsp;=&nbsp;(com.jsper.ejb.MyEJBHome)&nbsp;ic.lookup(ejbUrl);<BR>  }<BR>  catch&nbsp;(ActivationException&nbsp;e)&nbsp;{<BR>   System.out.println("Unable&nbsp;to&nbsp;activate&nbsp;:&nbsp;"&nbsp;+&nbsp;e.getMessage());<BR>   e.printStackTrace();<BR>   System.exit(1);<BR>  }<BR>再比如weblogic的调用方式:<BR>try<BR>{<BR>  //&nbsp;Get&nbsp;an&nbsp;InitialContext<BR>  String&nbsp;url="t3://localhost:7001";<BR>  Properties&nbsp;h&nbsp;=&nbsp;new&nbsp;Properties();<BR>  h.put(Context.INITIAL_CONTEXT_FACTORY,<BR>"weblogic.jndi.WLInitialContextFactory");<BR>  h.put(Context.PROVIDER_URL,&nbsp;url);<BR><BR>Context&nbsp;ctx&nbsp;= new&nbsp;InitialContext(h);<BR><BR>  System.out.println("Getting&nbsp;the&nbsp;EJBHome&nbsp;object…");<BR>   com.jsper.ejb.EJBHome&nbsp;tmp=&nbsp;(com.jsper.ejb.EJBHome)ctx.lookup("hello");<BR><BR>//create&nbsp;three&nbsp;element&nbsp;array&nbsp;of&nbsp;COUNT&nbsp;object<BR>  EJB&nbsp;ejb&nbsp;=tmp.create();<BR>  System.out.println(ejb.sayHello());<BR>}<BR>catch(Exception&nbsp;e)<BR>{<BR>e.printStackTrace();<BR>}<BR>由于和具体的目录服务、协议相关,为了达到可移植的目的,只好多做一些工作,幸好一般不需要做这些工作。<BR><BR></FONT></TD></TR>
  <TR>
    <TD height=5>
      <HR align=center color=#cccccc noShade SIZE=1>
    </TD></TR></TBODY></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -