Tomcat JSP調用JBoss布署的EJB遠程方法

          Tomcat JSP調用JBoss布署的EJB遠程方法
          ?
          王偉東
          ?
          ?? EJB技術的基礎是另外兩種技術:RMI-IIOP和JNDI。要想了解EJB,一定要先了解RMI-IIOP和JNDI。

          Java?RMI-IIOP

          ????Java?RMI-IIOP(Java?Remote?Method?Invocation?over?the?Internet?Inter-ORB?Protocol)是J2EE的網絡機制。Java?RMI-IIOP允許你編寫分布式對象,使得對象的通信范圍能夠在內存中,跨Java虛擬機,跨物理設備。
          Java命名和目錄接口(Java?Naming?and?Directory?Interface,JNDI)

          ????JNDI是Java?Naming?and?Directory?Interface?的簡寫,中意為:Java命名及目錄接口,它是為了對高級網絡應用開發中的使用的目錄基礎結構的訪問。實際上這個目錄是一個特殊的數據庫,提供了對存儲數據的快速訪問,不象傳統的目錄服務訪問方式-你必須提供不同的API接口去訪問不同的目錄服務(如:LDAP,NIS,ADS等),而它提供了一種標準的API來訪問類型不同的目錄。據說,使用完整的SDK可以開發那些JNDI還不支持的目錄服務提供者。

          ????JNDI是J2EE的一個API,提供了一套標準的接口,以定位用戶、機器、網絡、對象、以及服務。例如,你可以使用JNDI來定位內部網中的一臺打印機,你也可以使用它來定位Java對象或連接到一個數據庫。JNDI可以用于EJB、RMI-IIOP、JDBC中。它是網絡查找定位的標準方法。????JNDI?API被用來訪問命名和目錄服務。它提供一個相容的模式來訪問和操作企業范圍大的資源,例如一個應用服務器中的DNS、LDAP、本地文件系統或者對象。
          ?
          有了上述兩種技術的支持就可以實施分布式布署了。
          ?
          比如你有兩個服務器:
          A服務器192.168.0.1:JBOSS 4.0其上布署了EJB的業務實現模塊
          B服務器192.168.0.2:Tomcat 5.0 運行Jsp/JavaBean或Struts等Web頁面程序
          實驗目的:分布式不同應用服務器訪問EJB組件
          ?
          ?
          A服務器上對EJB的開發及布署,請參見其它相關文檔:
          ?
          a. HelloWorldBean.java //業務實現了getHelloWorld提供remote的方法
          ?
          package donne.study;
          public abstract class HelloWorldBean implements javax.ejb.SessionBean {
          ??? /**
          ???? * @ejb.interface-method view-type="remote"
          ???? */
          ??? public String getHelloWorld(String sMessage) {
          ??????? return "Hello World! "+sMessage;
          ??? }
          }
          ?
          EJB Classes 由lomboz自動生成的EJB接口文件
          b. HelloWorld.java
          package donne.study;
          /**
          ?* Remote interface for HelloWorld.
          ?* @generated
          ?* @lomboz generated
          ?*/
          public interface HelloWorld
          ?? extends javax.ejb.EJBObject
          {
          ?? public java.lang.String getHelloWorld( java.lang.String sMessage )
          ????? throws java.rmi.RemoteException;
          }
          ?
          c. HelloWorldHome.java
          ?
          package donne.study;
          /**
          ?* Home interface for HelloWorld.
          ?* @generated
          ?* @lomboz generated
          ?*/
          public interface HelloWorldHome
          ?? extends javax.ejb.EJBHome
          {
          ?? public static final String COMP_NAME="java:comp/env/ejb/HelloWorld";
          ?? public static final String JNDI_NAME="HelloWorld";
          ?? public donne.study.HelloWorld create()
          ????? throws javax.ejb.CreateException,java.rmi.RemoteException;
          }
          其它文件略
          ?
          B服務器上Tocamt上調用JBoss下EJB的remote接口
          1. Copy Jboss下的client目錄下的jar文件到你的測試工程的lib目錄,有些jar是不需要的根據實際情況
          ?
          2. 將上述兩個接口b、c文件生成的class文件打包成jar文件,也copy到lib下,可以看到到不管你的EJB里業務內容如何變化這個接口的定義都不會變
          ?
          3. HelloWorldClient.java
          ?
          package donne.study;
          import java.util.Hashtable;
          import javax.naming.InitialContext;
          import javax.naming.NamingException;
          ?
          public class HelloWorldClient {
          ??? private donne.study.HelloWorldHome getHome() throws NamingException {
          ??????? return (donne.study.HelloWorldHome) getContext().lookup(
          ??????????????? donne.study.HelloWorldHome.JNDI_NAME);
          ??? }
          ??? private InitialContext getContext() throws NamingException {
          ??????? Hashtable props = new Hashtable();
          ??????? props.put(InitialContext.INITIAL_CONTEXT_FACTORY,
          ??????????????? "org.jnp.interfaces.NamingContextFactory");
          ??????? props.put(InitialContext.PROVIDER_URL, "jnp://192.168.0.1:1099");
          ??????? InitialContext initialContext = new InitialContext(props);
          ??????? return initialContext;
          ??? }
          ?
          ??? public String getEJBString() {
          ??????? try {
          ??????????? donne.study.HelloWorld myBean = getHome().create();
          ??????????? return myBean.getHelloWorld("From Tomcat Jsp");
          ??????? } catch (Exception e) {
          ??????????? return e.getMessage();
          ???????????
          ??????? }
          ??? }
          }
          ?
          4. hello.jsp
          ?
          <%@ page contentType="text/html; charset=GBK"%>
          <%@ page import = "donne.study.HelloWorldClient" %>
          <HTML>
          <BODY>
          <%
          ?HelloWorldClient helloID=new HelloWorldClient();
          ?out.print(helloID.getEJBString());
          %>
          </BODY>
          </HTML>
          ?
          運行一下hello.jsp將出現Hello World! From Tomcat Jsp就對了

          posted on 2007-02-09 16:48 Tom 閱讀(2335) 評論(0)  編輯  收藏 所屬分類: EJB


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類(42)

          隨筆檔案(43)

          文章分類

          相冊

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 天全县| 松潘县| 南汇区| 湖口县| 郯城县| 湄潭县| 双柏县| 两当县| 巴中市| 宁乡县| 赤峰市| 昭通市| 明水县| 河北省| 南丰县| 稷山县| 盐边县| 江都市| 水富县| 墨江| 浦江县| 高州市| 清涧县| 霍州市| 无为县| 乐昌市| 兴文县| 奇台县| 唐山市| 沈阳市| 三明市| 定远县| 嘉兴市| 宁化县| 辉南县| 汾西县| 马龙县| 林州市| 赣榆县| 和田市| 潍坊市|