本文是為想在JBOSS環境下進行EJB開發的讀者而寫的,在閱讀本文之前,你最好對EJB有一個基本了解。
JBOSS是一個開放源碼的免費EJB服務器,它實現了其它J2EE所規定的大多數功能,現在sun公司已經把JBOSS作為J2EE1.4的標準實現服務器了。
以下是我從源代碼中摘出來的部分注釋,請結合工程文件查看。
/Files/anwenhao/EJBDemo.part1.rar
/Files/anwenhao/EJBDemo.part2.rar
/Files/anwenhao/EJBDemo.part3.rar
/Files/anwenhao/EJBDemo.part4.rar
/**
* 遠程接口
*
* 遠程接口支持EJB組件暴露的所有業務方法.
* 遠程接口集成于EjbObject 容器生成的EJB對象繼承了遠程接口EjbObject
*
* 遠程接口中實現的方法即為業務方法.
*
*
*/
/**
* EJB組件的home接口
* 在該home接口中存在create()方法. 對應于HelloBean中的ejbCreate()方法
*
* 為獲取對EJB對象的引用客戶需要使用create方法.其中create方法還可以幫助組件完成初始化工作.
* create方法需要拋出以下異常:RemoteException CreateException
*
* 所有的Home接口必須繼承于他.
*
* 同時EJBHome接口已經定義了組件銷毀remove()的方法,因此具體的Home不需要再次定義.
*
*
*/
/**
* 本地接口
*
* 當本地用戶client同EJB本地對象交互時,需要使用這一接口.容器廠商會實現這一接口而對應的實現對象就是EJB本地對象
*
* 本地接口需要繼承EJBLocalObject 與遠程接口的差別是本地接口并不拋出RemoteException
*
*
*/
/**
* 本地home接口.
*
* 本地home接口是home接口的高性能版本.本地home接口繼承于EJBLocalHome而不是EJBHome.EJBLocalHome并不繼承于Remote其意味著本地home對象并不是遠程對象.
*
*
*
*
*/
/**
* 無狀態的SessionBean.
*
* 無狀態的Bean實現了SessionBean接口.供實現會話的bean試用.其中SessionBean定義了企業Bean類必須實現的若干方法.
* 存在ejbCreate()方法.同Home對象的create()方法一致.
* 并且必須存在相關的業務方法.
* 無狀態的SessionBean并不會試用到ejbActive()和ejbPassivate()方法.
*
*
* @author 安文豪 anwenhao@risesoft.net Jun 3, 2007 2:31:08 AM
*/
package com.ibm.ejb.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
/**
* 客戶端代碼示例.用于調用簡單,無狀態SessionBean中的方法.
*/
public class HelloClient {
public static void main(String[] args) throws NamingException, CreateException, RemoveException, IOException{
Properties prop = new Properties();
File file = new File("ejbconfig.properties");
FileInputStream input = new FileInputStream(file);
prop.load(input);
/**
* 獲得JNDI初始上下文
* 初始上下文是鏈接JNDI樹的入口.借助環境屬性能夠完成JNDI驅動,服務器的網絡地址等的設置.
*/
Context ctx = new InitialContext(prop);
Object obj = ctx.lookup("Hello");
/**
* 獲得Home對象的引用.
*/
HelloHome helloHome = (HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class);
/**
* 使用工廠來創建Hello Ejb對象
*/
Hello hello = helloHome.create();
/**
* 調用EJB對象的Hello方法.他將委派給EJB Bean類實例
* 一旦接受到響應結果他便會返回.
*/
System.out.println(hello.hello());
hello.remove();
}
}
posted on 2007-06-03 03:05
安文豪 閱讀(1551)
評論(1) 編輯 收藏