JBuilder9+Weblogic7實戰篇Entity Bean運用(四) (轉)
JBuilder9+LOGIC7實戰篇:namespace prefix = o ns = "urn:schemas--com::office" />
ENTITY BEAN的運用(四)
作者:黃 凱
E_:
七、透過Session Bean訪問Entity Bean
在前面給出的Entity Bean例項都是透過客戶端直接訪問Entity Bean(透過Entity Bean的介面),在實際的應用開發中通常不採用這種做法,經常採用的是這樣一種做法:建立一個Session Bean,該Session Bean中封裝對Entity Bean的訪問。而且訪問時透過Entity Bean的本地介面進行以提高,客戶端不與Entity Bean直接打交道,客戶端透過Session Bean完成對Entity Bean的操作。這中做法其實是遵循了一種設計:Facade設計模式。
7.1 引用
在一個EJB中訪問其他EJB,例如Session Bean facade要訪問Entity Bean student,可以直接在facade中用“硬編碼”實現,即在facade中透過Student的JNDI名字找到Home,然後獲得對外介面(Remote介面或Local介面),完成方法。這種方式的缺點是顯而易見的,因為這兩個EJB被緊緊綁在一起,例如student有什麼改動,例如改名字,那麼facade就必須改程式碼(這也是為什麼在《Entity Bean的運用(二)》中需要重新建立一個TestClient的原因)。
採用這樣一種方式解決此問題:在facade的部署描述中定義一個EJB引用,該項描述了對另一個EJB的引用,在facade的程式碼中只使用EJB引用的名字,EJB引用的名字是不變的,但是它所引用的內容是可變的,參見以下程式碼:
建立了EJB引用後,facade可以透過此引用獲得要訪問的EJB student的介面,參見以下程式碼:
Context context = new InitialContext();
ref = context.lookup("java:/comp/env/student");
studentHome = (StudentHome)ref;
在使用EJB引用時,作為lookup方法引數的完整的JNDI名字是“java:/comp/env/”+ EJB引用名,例如名為student的EJB引用,對應完整的JNDI名字是“java:/comp/env/student”。
7.2 EJB引用例項
7.2.1開啟《Entity Bean的運用(一)》中建立的comSample工程,新建一個名為facade的Session Bean(可參看《SESSION BEAN篇》)。修改該Bean的如下資訊:
★ Bean name: facade
★ Interface: remote
★ Session type: Stateless
7.2.2 在文件視窗“EJB Designer”中用滑鼠右鍵單擊facade,選擇Open DD Editor選單項。
7.2.3 在“DD Editor”介面中單擊下方的EJB Local References選項卡。
7.2.4 在“EJB Local References”的設定介面中,單擊Add按鈕,然後在Name項後輸入EJB引用的名字student,選中IsLink核取方塊(如果要引用的EJB是位於同一Jbuilder工程中則選種此項),Link項選擇Student(要引用的EJB),其他項採用系統自動的設定即可。
7.2.5 在facade中增加一個方法getStuInfo(),該方法的功能是找到與引數(代表stuid)對應的Entity Bean Student,然後呼叫Student的方法getStuid()和getStuname()。該方法的屬性如下:
★ Method name: getStuInfo
★ Return type: String
★ Input parameters: String stuid
★ Interface: remote
7.2.6 在facade的Bean類中加入訪問Student的程式碼。要訪問Student,首先要獲得Student的Home物件,這可以透過EJB引用獲得。獲得Home物件這部分程式碼要放在facade的ejbCreate()方法和ejbActivate()方法中(即只要facade的例項一被建立或啟用,就會獲得Student的Home物件)。獲得Student的Home物件後,在getStuInfo()方法中透過Home物件得到Student的本地介面(Local Interface),然後透過本地介面呼叫Student的方法。用以下程式碼替換facadeBean.java的程式碼:(灰色程式碼部分為手工新增的)
package cmpsample;
import java.math.*;
import javax.ejb.*;
import javax.naming.*;
public class facadeBean
implements SessionBean
{
SessionContext sessionContext;
public Student student = null;
private StudentHome studentHome = null;
public void ejbCreate() throws CreateException
{
try
{
Context context = new InitialContext();
Object ref = context.lookup("java:/comp/env/student");
studentHome = (StudentHome) ref;
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void ejbRemove()
{
/**@todo Complete this method*/
}
public void ejbActivate()
{
try
{
Context context = new InitialContext();
Object ref = context.lookup("java:/comp/env/student");
studentHome = (StudentHome) ref;
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void ejbPassivate()
{
/**@todo Complete this method*/
}
public void setSessionContext(SessionContext sessionContext)
{
this.sessionContext = sessionContext;
}
public String getStuInfo(String stuid)
{
String strStu = null;
try
{
student = studentHome.finyPrimaryKey(new BigDecimal(stuid));
strStu = "The studentID is " + student.getStuid() + " Name is " +
student.getStuname();
}
catch (Exception e)
{}
return strStu;
}
}
7.2.7 重新編譯EJB module,生成Cmp.jar檔案,並部署到Weblogic Server上。
7.2.8 新建facade的客戶端程式facadeTestClient1.java,利用該客戶端程式訪問facade的getStuInfo()方法。修改該客戶端程式的main()方法如下:
public static void main(String[] args)
{
facadeTestClient1 client = new facadeTestClient1();
client.create();
client.getStuInfo("2");
}
7.2.9 編譯執行該客戶端程式,驗證結果。
參考
電子工業出版社 《J2EE應用開發(Jbuilder+Weblogic)》
我的文章首發牛耳論壇()和程式設計師論壇(/" target=_blank>),歡迎轉載,不過,請保留作者以及修訂者的名字,謝謝。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-963643/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JBuilder9+Weblogic7實戰篇Entity Bean運用(二) (轉)UIWebBean
- JBuilder9+Weblogic7實戰篇Entity Bean運用(三) (轉)UIWebBean
- JBuilder9+Weblogic7實戰篇之Entity Bean運用篇(一) (轉)UIWebBean
- JBuilder9+Weblogic7實戰篇之Filter運用篇 (轉)UIWebFilter
- JBuilder9+Weblogic7實戰篇之工具篇(JDK) (轉)UIWebJDK
- JBuilder9+Weblogic7實戰篇之工具篇(Weblogic) (轉)UIWeb
- JBuilder9+Weblogic7實戰篇之工具篇(JDBC 2) (轉)UIWebJDBC
- JBuilder9+Weblogic7實戰篇之工具篇(JDBC 1) (轉)UIWebJDBC
- JBuilder9+Weblogic7實戰篇之JSP使用JDBC篇 (轉)UIWebJSJDBC
- JBuilder9+Weblogic7實戰篇之工具篇(ORACLE9i安裝) (轉)UIWebOracle
- JBuilder9.0+Weblogic7.0實戰篇之Session Bean篇 (轉)UIWebSessionBean
- entity bean 問題Bean
- JBuilder9+Weblogic7實戰篇之工具篇(Weblogic7在JBuilder9中的配置) (轉)UIWeb
- more effective entity bean(新的改進entity bean的效能的七條(EJB2.0版)) (轉)Bean
- session bean 對 entity bean的訪問策略?SessionBean
- 實戰JBuilder7+WebLogic7(四)續JMS+Message-Driven Bean (轉)UIWebBean
- 四則運算實現 (轉)
- 「實戰篇」開源專案docker化運維部署-搭建mysql叢集(四)Docker運維MySql
- App專案實戰之路(四):UI篇APPUI
- Ant實戰篇 (一)(3) (轉)
- Ant實戰篇 (一)(4) (轉)
- 實戰JBuilder7+WebLogic7(續Session bean) (轉)UIWebSessionBean
- (entity bean)動態賦值值物件-- Dynamic Create Value Object 模式 (轉)Bean賦值物件Object模式
- DirectShow之介面實戰篇(一) (轉)
- DirectShow之介面實戰篇(二) (轉)
- DirectShow之介面實戰篇(三) (轉)
- 運作專案前, 請運用戰略地圖(轉)地圖
- C語言第六篇:用switch語句實現四則運算器C語言
- ItemDecoration深入解析與實戰(二)—— 實際運用
- entity bean如何進行資料的大量更新Bean
- LINUX中運用VSFTPD的高手篇(轉)LinuxFTP
- 從一個ConnectionPool的實現看design pattern的運用 (四) (轉)
- 「實戰篇」開源專案docker化運維部署(終結篇)(11)Docker運維
- Kurento實戰之四:應用開發指南
- Spring實戰:裝配bean-自動化裝配beanSpringBean
- Linux效能優化實戰CPU篇之總結(四)Linux優化
- Entity Framework學習初級篇4--Entity SQLFrameworkSQL
- 使用entity bean時候的一個問題?helpBean