ผู้แต่ง: Zhu Xianzhong แหล่งที่มาของคอมไพเลอร์: Tianji.com
บทคัดย่อ บทความนี้จะแนะนำวิธีการตระหนักถึงการโต้ตอบระหว่างแอปพลิเคชัน ASP.NET ของคุณกับเซิร์ฟเวอร์แอปพลิเคชัน J2EE และวิธีทำให้การโทร EJB เป็นเรื่องง่ายเหมือนกับการเรียกใช้บริการเว็บ XML
บทนำ
ปัจจุบัน องค์กรขนาดใหญ่หลายแห่งพบว่าตัวเองมีและใช้ทีมพัฒนาและเซิร์ฟเวอร์เผยแพร่ที่ผสมผสานเทคโนโลยี .NET และ J2EE เพื่อสร้างสมดุลให้กับคุณภาพระดับองค์กรที่ส่งผ่านแอปพลิเคชันเซิร์ฟเวอร์ J2EE ตรรกะทางธุรกิจของบริษัทมักจะถูกเผยแพร่บนแอปพลิเคชันเซิร์ฟเวอร์ J2EE ในรูปแบบของ JavaBeans ระดับองค์กร (EJB) ในทางกลับกัน เพื่อตอบสนองความต้องการที่เปลี่ยนแปลงตลอดเวลาของการพัฒนาธุรกิจ นักพัฒนาส่วนใหญ่ต้องการใช้ตรรกะคำอธิบายในสภาพแวดล้อมการพัฒนา Visual Studio.NET ที่มีประสิทธิภาพการผลิตสูง ความท้าทายเกิดขึ้นเมื่อคุณต้องการเชื่อมต่อเลเยอร์การนำเสนอ .NET กับเลเยอร์ตรรกะทางธุรกิจ J2EE
ลองมาดูกันว่า Visual MainWin สำหรับ J2EE สามารถช่วยคุณเผชิญหน้าและเอาชนะได้อย่างไร - จาก Visual Studio.NET ใช้ C# หรือ Visual Basic.NET เพื่อใช้เลเยอร์คำอธิบาย ASP.NET จากนั้นเรียกเลเยอร์ตรรกะทางธุรกิจที่นำไปใช้ในรูปแบบของ EJB - สิ่งนี้ท้าทายในการพัฒนา มั่นใจได้ว่าคุณไม่จำเป็นต้องยุ่งกับการเขียนโค้ด EJB API เพื่อทำสิ่งนี้ ด้วย Visual MainWin สำหรับ J2EE ทั้งสองเลเยอร์ - ส่วนหน้า ASP.NET และส่วนหลัง EJB - สามารถทำงานเป็นแอปพลิเคชัน J2EE ล้วนๆ บนเซิร์ฟเวอร์แอปพลิเคชัน J2EE ของคุณ พร้อมการปรับประสิทธิภาพให้เหมาะสมและการรักษาความปลอดภัยบนพื้นฐาน J2EE ที่สอดคล้องกัน
ในการเรียก EJB จาก Visual Studio .NET คุณต้องติดตั้ง Visual MainWin สำหรับ J2EE เวอร์ชันองค์กร แน่นอนคุณสามารถดาวน์โหลดเวอร์ชันทดลองใช้ได้จากเว็บไซต์ mainsoft.com เพื่อการวิเคราะห์เชิงทดลอง
ตัวอย่างการวิเคราะห์
ตัวอย่าง StocksPortfolio ของบทความนี้ - ซึ่งแสดงวิธีการสร้างแอปพลิเคชันโดยใช้ ASP.NET Web layer และชั้นธุรกิจ J2EE - ได้รับการติดตั้งและจัดทำเอกสารใน Visual MainWin สำหรับ J2EE ตัวอย่างนี้ใช้เว็บเพจ ASP.NET แบบง่ายๆ ซึ่งใช้โดยผู้ใช้เพื่อจัดการการลงทุนในหุ้นของตน และบริการเว็บ ASP.NET ซึ่งใช้เพื่อระบุราคาหุ้นสมมติ ตัวอย่างนี้ยังใช้เซสชัน EJB - ใช้โดยแอปพลิเคชันเซิร์ฟเวอร์ J2EE ของคุณเพื่อใช้ตรรกะในการซื้อและขายหุ้น
รูปที่ 1. แอปพลิเคชัน StocksPortfolio ที่ทำงานบนเซิร์ฟเวอร์แอปพลิเคชัน JBoss
เพิ่ม EJB ลงในสภาพแวดล้อม .NET ของคุณ
การเรียก EJB จาก Visual Studio.NET นั้นง่ายเหมือนกับการเรียกใช้บริการบนเว็บ ใน Solution Explorer ของคุณ คลิกขวาที่ "การอ้างอิง" และเลือก "เพิ่มการอ้างอิง EJB" ประเภทการอ้างอิงใหม่จะปรากฏขึ้นซึ่งสามารถใช้ได้เฉพาะใน Visual MainWin สำหรับโครงการ J2EE ซึ่งคล้ายกับการอ้างอิงเว็บ Visual Studio มาตรฐานภายใต้ NETIDE (ดูรูปที่ 2)
รูปที่ 2 การเพิ่มการอ้างอิง EJB
ในการเพิ่มการอ้างอิง EJB ให้กับ Visual MainWin สำหรับโปรเจ็กต์ J2EE คุณจำเป็นต้องมีไฟล์ Java archive (JAR) เท่านั้น - ไฟล์ที่ใช้ EJB หรือมีอินเทอร์เฟซภายในและระยะไกล Visual MainWin สามารถสอบถามแอปพลิเคชันเซิร์ฟเวอร์สำหรับข้อมูลเกี่ยวกับ EJB ทั้งหมดที่เผยแพร่และแสดง EJB ที่สอดคล้องกับข้อกำหนด JAR ของคุณในกล่องโต้ตอบ คุณเพียงแค่ต้องเลือก EJB เฉพาะ (อาจเป็นหลายรายการ) ที่คุณต้องการใช้ (ดูรูปที่ 3)
รูปที่ 3 เพิ่มกล่องโต้ตอบอ้างอิง EJB
คุณยังสามารถใช้ EJB บนเซิร์ฟเวอร์แอปพลิเคชันระยะไกลได้ ตราบใดที่เป็นประเภทเดียวกันกับเซิร์ฟเวอร์แอปพลิเคชันภายในที่เชื่อมโยงกับโปรเจ็กต์ของคุณ นี่อาจเป็น Windows, Linux, Unix, Mainframe หรือเซิร์ฟเวอร์ที่เปิดใช้งาน J2EE อื่น ๆ หากต้องการใช้ EJB ที่เผยแพร่บนเซิร์ฟเวอร์ระยะไกล ให้คลิก "ขั้นสูง" เพื่อขยายกล่องโต้ตอบ (ดูรูปที่ 4)
รูปที่ 4 โหมดขั้นสูง เพิ่มกล่องโต้ตอบการอ้างอิง EJB
ป้อน JNDI URL ไปยังเซิร์ฟเวอร์แอปพลิเคชัน J2EE ระยะไกล และคลิก "ดึงข้อมูลจากเซิร์ฟเวอร์" Visual MainWin จะแสดงรายการ EJB ทั้งหมดที่เผยแพร่บนเซิร์ฟเวอร์ระยะไกลและ EJB ที่สอดคล้องกับไฟล์ JAR ของคุณ การดำเนินการนี้สอดคล้องกับ EJB ท้องถิ่น
เลือก EJB ที่คุณต้องการใช้ (อาจมีหลายรายการ) แล้วคลิกตกลง โฟลเดอร์อ้างอิง EJB ใหม่ถูกสร้างขึ้นในเบราว์เซอร์ Solution Explorer ของคุณ ดังแสดงใน รูปที่ 5 โฟลเดอร์นี้มีการอ้างอิงบนเซิร์ฟเวอร์สำหรับการอ้างอิง EJB ที่เพิ่มใหม่แต่ละรายการ ซึ่งคล้ายกับโหนดอ้างอิงเว็บ นอกจากนี้ ยังมีการสร้างคลาส wrapper เพื่อทำให้การเข้ารหัสการโทร EJB ของคุณง่ายขึ้น เราจะพูดถึงคลาส wrapper นี้ในหัวข้อต่อๆ ไป
รูปที่ 5. โฟลเดอร์ Solution Explorer ที่แสดงการอ้างอิง EJB
การเรียกวิธี EJB จาก .NET
เมื่อคุณเพิ่มการอ้างอิง EJB ให้กับโปรเจ็กต์ของคุณ ระบบจะสร้างคลาส .NET (C# หรือ VB.NET) โดยอัตโนมัติ โดยจะอธิบายอินเทอร์เฟซแบบง่ายให้กับ EJB . คลาสนี้รวมการเข้ารหัส J2EE ที่จำเป็นในการสร้าง EJB และเรียกใช้เมธอดของมัน คลาส .NET นี้เปิดเผยวิธีการของอินเทอร์เฟซระยะไกล EJB ผ่านวิธีการสาธารณะของตัวเอง หากต้องการเรียกใช้เมธอดทางธุรกิจของ EJB คุณเพียงสร้างอินสแตนซ์ของคลาส wrapper และเรียกใช้เมธอดคลาส wrapper ที่เหมาะสม
นี่คือตัวอย่างโค้ดสำหรับการเรียกใช้เมธอด EJB จากโปรเจ็กต์ .NET ของคุณ:
//สร้างอินสแตนซ์ของ StockTrader EJB
localhost.StockTraderEJB เทรดเดอร์ = ใหม่ localhost.StockTraderEJB();
//ซื้อหุ้นที่กำหนดโดยผู้ใช้ในกล่องข้อความชื่อหุ้น
//จำนวนหุ้นที่ซื้อตรงกับตัวเลขในช่องข้อความจำนวนหุ้น
trader.buy(tbStockName.Text, Int32.Parse(tbNumOfShares.Text));
การวิเคราะห์เชิงลึก
ดำเนินการเรียก J2EE ที่ร้องขอในตัวสร้างแบบคงที่ของคลาส wrapper ที่สร้างขึ้นด้านบนเพื่อสร้างอ็อบเจ็กต์โฮมของ EJB จากนั้นในตัวสร้างเริ่มต้น จะใช้วัตถุบ้านเพื่อสร้างวัตถุ EJB อ็อบเจ็กต์ EJB ถูกจัดเก็บเป็นสมาชิกคลาส wrapper ซึ่งมีการเรียกใช้เมธอด EJB ทางธุรกิจ
ต่อไปนี้เป็นส่วนหนึ่งของโค้ดเพื่อสร้างคลาส wrapper ของ StockTrader EJB:
private static trading.StockTraderHome home;
การซื้อขายส่วนตัวStockTraderEJB ejbObj;
StockTraderEJB แบบคงที่ () {
// สร้างบริบทการตั้งชื่อ Java (JNDI)
บริบทบริบท
บริบท = vmw.j2ee.J2EEUtils.CreateContext (null, null);
วัตถุ homeObj;
// รับวัตถุบ้านจากเซิร์ฟเวอร์ JNDI
homeObj = context.lookup("ejb/StockTrader");
หน้าแรก = ((trading.StockTraderHome)(homeObj));
-
//ตัวสร้างเริ่มต้น: สร้างอินสแตนซ์ EJB ใหม่
StockTraderEJB สาธารณะ () {
this.ejbObj = home.create();
}
คลาส wrapper นี้เปิดเผยวิธีการของอินเทอร์เฟซระยะไกล EJB ผ่านวิธีการสาธารณะ แต่ละวิธีเหล่านี้จะเรียกวิธีการทางธุรกิจที่สอดคล้องกันของ EJB ของคุณผ่านอ็อบเจ็กต์ EJB รหัสต่อไปนี้จะแสดงวิธีการซื้อขายหุ้นใน EJB wrapper:
public virtual void buy(string arg_0, int arg_1) {
นี้.ejbObj.buy(arg_0, arg_1);
-
การขายโมฆะเสมือนสาธารณะ (สตริง 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 บนอ็อบเจ็กต์ปฏิทิน ต่อมา หากเมธอด 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 หรือเฟรมเวิร์กอื่นๆ ตราบใดที่สามารถทำงานบนดีบักเกอร์ได้ รูปแบบ
รูปที่ 6 การใช้ดีบักเกอร์ Visual MainWin เพื่อดีบักซอร์สโค้ด EJB
แอปพลิเคชันที่ Visual MainWin สร้างสำหรับคุณคือแอปพลิเคชันเซิร์ฟเล็ต J2EE มาตรฐาน - มันสามารถเผยแพร่และจัดการผ่าน J2EE Application Server Manager Console เช่นเดียวกับ J2EE อื่น ๆ เช่นเดียวกับเซิร์ฟเล็ต แอปพลิเคชัน. ดังนั้น เลเยอร์การนำเสนอ ASP.NET และเลเยอร์ตรรกะทางธุรกิจ EJB ของคุณสามารถพึ่งพาโครงสร้างพื้นฐานความปลอดภัย J2EE เดียวกันได้ แอปพลิเคชัน ASP.NET/EJB แบบไฮบริดของคุณสามารถพึ่งพาโมเดลความปลอดภัยที่สอดคล้องกันผ่านการใช้การรับรองความถูกต้องเซิร์ฟเล็ต J2EE และผู้ใช้แอปพลิเคชันเซิร์ฟเวอร์และคำจำกัดความบทบาทของคุณสามารถรับประกันความปลอดภัยโดยการสร้างสมดุลกลไกการอนุญาตตามบทบาท
สรุป
1. บทความนี้กล่าวถึงวัตถุระยะไกลและอินเทอร์เฟซ การใช้ออบเจ็กต์ภายในเครื่องผ่าน Visual MainWin ก็เป็นไปได้เช่นกัน ในการแจกจ่ายแอปพลิเคชันที่ใช้อ็อบเจ็กต์ดั้งเดิม คุณต้องสร้างไฟล์ Enterprise Archive (EAR) ซึ่งมีทั้งไฟล์ WAR ของแอปพลิเคชันของคุณและไฟล์ JAR ของ EJB ในเครื่อง
2. แม้ว่า Visual MainWin จะสามารถแมปประเภท .NET ส่วนใหญ่กับประเภท Java ได้ แต่ก็ไม่สามารถแมปประเภทคอลเลกชันได้ - เนื่องจากการแมปนี้อาจทำให้ประสิทธิภาพการทำงานลดลง ดังนั้น คุณสามารถเลือกจัดการประเภทคอลเลกชัน Java จากโค้ด .NET ของคุณ หรือดำเนินการแปลงดังกล่าวด้วยตนเองได้
3. Visual MainWin ช่วยให้คุณสามารถใช้ session bean และเอนทิตี bean ที่ไม่ใช่ธุรกรรมได้ ไม่สามารถใช้ Transactional Entity Bean อย่างโปร่งใส ดังนั้นคุณต้องเขียนโค้ดการเรียกธุรกรรม J2EE ด้วยตนเอง อย่างไรก็ตาม ในกรณีส่วนใหญ่ Transactional Entity Bean สามารถเข้าถึงได้ผ่าน Session Bean ดังนั้นคุณไม่จำเป็นต้องทำเช่นนี้