ASP.NET應用程序中調用EJB

  摘要 本文將介紹如何實現你的ASP.NET應用程序與J2EE應用程序服務器之間的交互以及怎樣使得調用EJB與調用XML Web服務一樣地容易。

  簡介

  今天,許多大型組織發現他們自己正在擁有和使用由.NET技術和J2EE技術混合組成的開發團隊和發佈服務器。爲了平衡通過J2EE應用程序服務器發送的企業質量,公司的商業邏輯經常以企業JavaBean(EJB)的形式發佈於J2EE應用程序服務器上。另一方面,爲了滿足日益變化的商業發展的要求,多數開發者比較喜歡在具有高度生產性能的Visual Studio.NET開發環境下實現描述邏輯。當你需要把.NET描述層連接到J2EE商業邏輯層時,挑戰就產生了。

  讓我們看一下Visual MainWin for J2EE怎麼幫助你面臨和克服-從Visual Studio.NET中,用C#或Visual Basic.NET來實現ASP.NET描述層然後再調用以EJB形式實現的商業邏輯層-這一挑戰性開發的。請放心,你將不需要糾纏於EJB API編碼就能做這到一點。藉助於Visual MainWin for J2EE,兩個層-ASP.NET前端和EJB後臺-都能夠以一個純粹的J2EE應用程序的形式誦杏諛愕腏2EE應用程序服務器上,並進行性能優化和實現一致的基於J2EE的安全性。

  爲實現從Visual Studio .NET中調用EJB,你必須安裝Visual MainWin for J2EE的企業版本。當然,你可以從mainsoft.com網站上下載它的評估版本進行試驗性分析。

  示例分析

  本文的股票投資(StocksPortfolio)示例-它向你展示怎樣使用一個ASP.NET Web層和一個J2EE商業層來創建應用程序-被安裝和建檔於Visual MainWin for J2EE中。本示例實現了一個簡單的ASP.NET網頁-用戶使用之來管理他們的股票投資-和一個ASP.NET Web服務-它用於提供虛構的股票行情。本示例還使用了一個會話EJB-爲你的J2EE應用程序服務器所用以實現買賣股票的邏輯。

g5i5f01x2283.jpg
圖1.運行於JBoss應用程序服務器上的StocksPortfolio應用程序

  把EJB添加到你的.NET環境

  從Visual Studio.NET中調用一個EJB與調用一個Web服務一樣簡單。在你的解決方案資源管理器中,右擊"References",然後選擇"Add EJB Reference",即出現一新的僅可用於Visual MainWin for J2EE工程的參考類型,它很類似於標準的Visual Studio .NETIDE下的Web參考(見圖2)。

21a7096s07d0.jpg
圖2.添加EJB參考

  爲添加一個EJB參考到你的Visual MainWin for J2EE工程,你僅需要一個Java檔案(JAR)文件-它實現了該EJB或者包含它的本地和遠程接口。Visual MainWin能夠查詢應用程序服務器有關所有發佈在它上面的EJB的信息並在一個對話框中顯示相應於你的JAR定義的EJB。你只需要選擇你想要使用的特定EJB(可能多個)即可(見圖3)。

6x79k529f2q4.jpg
圖3.添加EJB參考對話框

  你也可以在一個遠程應用程序服務器上消費該EJB,只要它與你的工程相關的本地應用程序服務器是一樣的類型。這可能是一個Windows,Linux,Unix,主框架或任何其它支持J2EE的服務器。爲了消費一個發佈於一個遠程服務器上的EJB,請點擊"Advanced"來展開該對話框(見圖4)。

7z1f4678mbyr.jpg
圖4.高級模式的添加EJB參考對話框


  輸入JNDI URL到遠程J2EE應用程序服務器中,然後點擊"Fetch From Server"。Visual MainWin將列出所有的發佈於遠程服務器上的EJB和相應於你的JAR文件的EJB。該操作與本地EJB是一致的。

  選擇你想要消費的EJB(可能多個),點擊OK。一個新的EJB參考文件夾即產生於你的解決方案資源管理器瀏覽器中,如圖5所示。該文件夾包含每一個剛添加上去的EJB參考的基於服務器的參考,類似於Web參考結點。另外,還生成一個包裝類來簡化你的EJB調用編碼。在後面部分我們將討論該包裝類。

zi9gv146a837.jpg
圖5.顯示有EJB參考的解決方案資源管理器文件夾

  從.NET中調用EJB方法

  當你添加一個EJB參考到你的工程時,系統將自動產生一個.NET(C#或VB.NET)類,它描述了一個簡單的到該EJB的接口。該類包括要求創建該EJB和調用它的方法的J2EE編碼。這個.NET類通過它自己的公共方法暴露了該EJB遠程接口的方法。爲調用你的EJB的商業方法,你只需簡單地創建一個該包裝類的實例並調用適當的包裝類方法即可。

  下面是從你的.NET工程中調用一個EJB方法的代碼示例:

//創建StockTrader EJB的一個實例.
localhost.StockTraderEJB trader = new localhost.StockTraderEJB();
// 購買用戶在股票名稱文本框中定義的股票,
//所購買的股份數相應於股份數文本框中的數字
trader.buy(tbStockName.Text, Int32.Parse(tbNumOfShares.Text));


  深入分析

  在上面產生的包裝類的靜態構造器中執行被請求的J2EE調用以創建該EJB的home對象。然後,在一個缺省的構造器中,它使用home對象來創建該EJB對象。該EJB對象是以一個包裝類成員的形式存儲的,通過它來調用商業EJB方法。

  下面是創建該StockTrader EJB的包裝類的部分代碼:

private static trading.StockTraderHome home;
private trading.StockTraderEJB ejbObj;
static StockTraderEJB() {
// 創建一個Java命名(JNDI)上下文
Context context;
context = vmw.j2ee.J2EEUtils.CreateContext(null, null);
object homeObj;
//從JNDI服務器獲取home對象
homeObj = context.lookup("ejb/StockTrader");
home = ((trading.StockTraderHome)(homeObj));
}
//缺省的構造器:創建一個新的EJB實例
public StockTraderEJB() {
this.ejbObj = home.create();
}


  這個包裝類通過它的公共方法暴露該EJB遠程接口的方法。然後,每個這些方法通過EJB對象調用你的EJB的相應的商業方法。下面的代碼向你展示股票商的EJB包裝器中的方法:

public virtual void buy(string arg_0, int arg_1) {
this.ejbObj.buy(arg_0, arg_1);
}
public virtual void sell(string arg_0, int arg_1) {
this.ejbObj.sell(arg_0, arg_1);
}


  Visual MainWin還負責在Java和.NET之間映射數據類型。例如,如果你的EJB的方法之一以參數形式收到一個java.lang.calendar對象,那麼,你將使用一個.NET System.DateTime對象參數來調用這個方法並把它映射到一個java.lang.calendar對象上。隨後,如果你的EJB方法返回一個java.lang.class,你將收到一個System.Type對象作爲代替。

  調試問題

  即使Visual MainWin對開發工作進行了簡化處理,你仍然可能需要調試你的多級的、混合的ASP.NET/EJB應用程序。Visual MainWin調試器允許你從Visual Studio .NET IDE內部調試你的混合應用程序。你可以穿過語言邊界在你的C#或VB.NET代碼中設置中斷,單步調試EJB Java代碼和調試你的全部應用程序。而且,因爲調試需要出現於任何問題發生的地方,所以,Visual MainWin調試器能夠依附到你的J2EE應用程序服務器,而不管它是運行於Linux,Unix還是其它框架之上,只要它能運行在調試模式就行。

a4gwo7w747t8.jpg
圖6.使用Visual MainWin調試器來調試EJB源代碼

  Visual MainWin爲你創建的應用程序是一個標準的J2EE servlet應用程序-它能夠通過J2EE應用程序服務器主管控制檯進行發佈和管理,就象任何其它J2EE servlet應用程序一樣。因此,你的ASP.NET描述層和你的EJB商業邏輯層都能依靠一樣的J2EE安全基礎結構。你的混合的ASP.NET/EJB應用程序能依靠一個通過使用J2EE servlet認證的一致的安全模型,而你的應用程序服務器用戶和角色定義也能通過平衡基於角色的授權機制來保證安全性。

  總結

  1. 本文討論了遠程對象和接口。通過Visual MainWin進行本地對象消費也是可能的。爲了發佈一個使用本地對象的應用程序,你必須創建一個企業檔案(EAR)文件-它既包括你的應用程序的WAR文件又包括本地EJB的JAR文件。

  2. 雖然Visual MainWin能夠把大多數的.NET類型映射到Java類型,它卻不能進行集合類型的映射-因爲這種映射可能導致一種性能損失。因此,你可以選擇從你的.NET代碼中處理Java集合類型或你自己執行這樣的轉化。

  3. Visual MainWin允許你消費會話bean和非事務性實體beans。事務性實體bean不能被透明地消費,因此你必須手工編碼J2EE事務調用。然而,在大多數情況中事務性實體bean可以通過會話bean進行存取,因此你不大可能需要這樣做。<script language='javascript' src='http://www.shiqiaotou.com/donetk/Footer.js'></script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章