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

📄 18.html

📁 写给JSP初级程序员的书
💻 HTML
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<meta name="description" content="Java,JDBC,EJB,Open Source,jdk,rmi">
<meta name="Keywords"
content="Java, servlets, Java servlet, Javascript, ActiveX, VRML,
        applet, applets, directory, news, jdbc, applications, 
        Java applications, Java developer, Java development, developer, 
        classes, Jars.com, Jars, intranet, Java applet, Javabeans, 
        Java products, JDK, Java development kit, java development environment, JIT,
        JavaPlan, enterprise tools, JVM, Java Virtual Machine, Java resources, 
        SUN, CGI, Perl, database, network, html,
        xml, dhtml, rating, ratings, review, jars, cgi, programming,
        software review, software rating">
<title>csdn_EJB开发概述</title>
<style>
.news {   BACKGROUND: #007cd3;  font-family: "宋体"; font-size: 9pt }
.t {  font-family: "宋体"; font-size: 9pt }
.t1 { color:#007cd3;  font-family: "宋体"; font-size: 9pt }
.white { font-family: "宋体"; font-size: 9pt;color:#FFFFFF }
.red { font-family: "宋体"; font-size: 9pt;color:#FF0000 }
A:visited {color:#0000FF}
A:hover {color: #ff6666; text-decoration: none}
.text {font-size: 12px; line-height: 160%; font-family: "宋体"}
.text1 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text1:visited {color:#000000}
.text1:hover {color: #000000}
.text2 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text2:visited {color:#000000}
.text2:hover {color: #000000}
.text3 {font-size: 12px; line-height: 100%; font-family: "宋体"; text-decoration: none}
.large {font-size: 14.8px; line-height: 130%}
</style>
<base target=_blank>
</head>

<body


<center>




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

        </td>
      </tr>
    </td>
  </tr>
</div>
</body>
</html>

⌨️ 快捷键说明

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