Autor: Zhu Xianzhong Compilerquelle: Tianji.com
Zusammenfassung In diesem Artikel erfahren Sie, wie Sie die Interaktion zwischen Ihrer ASP.NET-Anwendung und dem J2EE-Anwendungsserver realisieren und den Aufruf von EJB so einfach machen wie den Aufruf eines XML-Webdiensts.
Einführung
Heutzutage verfügen und nutzen viele große Unternehmen über Entwicklungsteams und Veröffentlichungsserver, die eine Mischung aus .NET- und J2EE-Technologien sind. Um die über den J2EE-Anwendungsserver gesendete Unternehmensqualität auszugleichen, wird die Geschäftslogik eines Unternehmens häufig in Form von Enterprise JavaBeans (EJB) auf dem J2EE-Anwendungsserver veröffentlicht. Um den sich ständig ändernden Anforderungen der Geschäftsentwicklung gerecht zu werden, bevorzugen die meisten Entwickler andererseits die Implementierung der Beschreibungslogik in der Entwicklungsumgebung Visual Studio.NET mit hoher Produktionsleistung. Die Herausforderung entsteht, wenn Sie die .NET-Präsentationsschicht mit der J2EE-Geschäftslogikschicht verbinden müssen.
Werfen wir einen Blick darauf, wie Visual MainWin für J2EE Ihnen bei der Bewältigung und Überwindung helfen kann. Verwenden Sie in Visual Studio.NET C# oder Visual Basic.NET, um die ASP.NET-Beschreibungsschicht zu implementieren, und rufen Sie dann die in Form von implementierte Geschäftslogikschicht auf EJB – das ist eine Herausforderung bei der Entwicklung. Seien Sie versichert, dass Sie sich dafür nicht mit der EJB-API-Codierung herumschlagen müssen. Mit Visual MainWin für J2EE können beide Schichten – das ASP.NET-Frontend und das EJB-Backend – als reine J2EE-Anwendung auf Ihrem J2EE-Anwendungsserver ausgeführt werden, mit Leistungsoptimierung und konsistenter J2EE-basierter Sicherheit.
Um EJBs aus Visual Studio .NET aufzurufen, müssen Sie die Enterprise-Version von Visual MainWin für J2EE installieren. Natürlich können Sie die Evaluierungsversion zur experimentellen Analyse von der Website mainsoft.com herunterladen.
Beispielanalyse
Das StocksPortfolio-Beispiel dieses Artikels, das Ihnen zeigt, wie Sie eine Anwendung mithilfe einer ASP.NET-Webschicht und einer J2EE-Geschäftsschicht erstellen, wird in Visual MainWin für J2EE installiert und dokumentiert. Dieses Beispiel implementiert eine einfache ASP.NET-Webseite – die von Benutzern zum Verwalten ihrer Aktieninvestitionen verwendet wird – und einen ASP.NET-Webdienst – der zur Bereitstellung fiktiver Aktienkurse verwendet wird. In diesem Beispiel wird auch ein Sitzungs-EJB verwendet, das von Ihrem J2EE-Anwendungsserver verwendet wird, um die Logik für den Kauf und Verkauf von Aktien zu implementieren.
Abbildung 1. StocksPortfolio-Anwendung, die auf dem JBoss-Anwendungsserver ausgeführt wird
Fügen Sie EJBs zu Ihrer .NET-Umgebung hinzu.
Der Aufruf eines EJB aus Visual Studio.NET ist so einfach wie der Aufruf eines Webdienstes. Klicken Sie in Ihrem Projektmappen-Explorer mit der rechten Maustaste auf „Referenzen“ und wählen Sie „EJB-Referenz hinzufügen“ aus. Es wird ein neuer Referenztyp angezeigt, der nur in Visual MainWin für J2EE-Projekte verwendet werden kann und der Standard-Visual Studio-Webreferenz unten sehr ähnlich ist NETIDE (siehe Abbildung 2).
Abbildung 2. Hinzufügen einer EJB-Referenz
Um eine EJB-Referenz zu Ihrem Visual MainWin für J2EE-Projekt hinzuzufügen, benötigen Sie lediglich eine Java-Archivdatei (JAR) – eine Datei, die das EJB implementiert oder seine lokalen und Remote-Schnittstellen enthält. Visual MainWin kann den Anwendungsserver nach Informationen zu allen darauf veröffentlichten EJBs abfragen und die EJBs, die Ihrer JAR-Definition entsprechen, in einem Dialogfeld anzeigen. Sie müssen lediglich das spezifische EJB (möglicherweise mehrere) auswählen, das Sie verwenden möchten (siehe Abbildung 3).
Abbildung 3. Dialogfeld „EJB-Referenz hinzufügen“
Sie können das EJB auch auf einem Remote-Anwendungsserver nutzen, sofern es vom gleichen Typ ist wie der lokale Anwendungsserver, der Ihrem Projekt zugeordnet ist. Dies kann ein Windows-, Linux-, Unix-, Mainframe- oder jeder andere J2EE-fähige Server sein. Um ein auf einem Remote-Server veröffentlichtes EJB zu nutzen, klicken Sie auf „Erweitert“, um das Dialogfeld zu erweitern (siehe Abbildung 4).
Abbildung 4. Dialogfeld „Erweiterter Modus „EJB-Referenz hinzufügen““
Geben Sie die JNDI-URL zum Remote-J2EE-Anwendungsserver ein und klicken Sie auf „Vom Server abrufen“. Visual MainWin listet alle auf dem Remote-Server veröffentlichten EJBs und die EJBs auf, die Ihrer JAR-Datei entsprechen. Dieser Vorgang stimmt mit dem lokalen EJB überein.
Wählen Sie das EJB aus, das Sie nutzen möchten (es können mehrere sein) und klicken Sie auf OK. In Ihrem Solution Explorer-Browser wird ein neuer EJB-Referenzordner erstellt, wie in Abbildung 5 dargestellt. Dieser Ordner enthält eine serverbasierte Referenz für jede neu hinzugefügte EJB-Referenz, ähnlich einem Web-Referenzknoten. Darüber hinaus wird eine Wrapper-Klasse generiert, um Ihre EJB-Aufrufcodierung zu vereinfachen. Wir werden diese Wrapper-Klasse in einem späteren Abschnitt besprechen.
Abbildung 5. Ordner „Solution Explorer“ mit EJB-Referenz.
Aufrufen von EJB-Methoden aus .NET.
Wenn Sie Ihrem Projekt eine EJB-Referenz hinzufügen, generiert das System automatisch eine .NET-Klasse (C# oder VB.NET). Sie beschreibt eine einfache Schnittstelle zum EJB . Diese Klasse enthält die J2EE-Codierung, die zum Erstellen des EJB und zum Aufrufen seiner Methoden erforderlich ist. Diese .NET-Klasse stellt die Methoden der EJB-Remoteschnittstelle über ihre eigenen öffentlichen Methoden bereit. Um die Geschäftsmethoden Ihres EJB aufzurufen, erstellen Sie einfach eine Instanz der Wrapper-Klasse und rufen die entsprechende Wrapper-Klassenmethode auf.
Hier ist ein Codebeispiel für den Aufruf einer EJB-Methode aus Ihrem .NET-Projekt:
//Erstellen Sie eine Instanz des StockTrader EJB.
localhost.StockTraderEJB trader = new localhost.StockTraderEJB();
//Kaufe die vom Benutzer im Textfeld „Aktienname“ definierte Aktie,
//Die Anzahl der gekauften Aktien entspricht der Zahl im Textfeld „Anzahl der Aktien“.
trader.buy(tbStockName.Text, Int32.Parse(tbNumOfShares.Text));
Eine eingehende Analyse
führt den angeforderten J2EE-Aufruf im statischen Konstruktor der oben generierten Wrapper-Klasse aus, um das Home-Objekt des EJB zu erstellen. Dann wird in einem Standardkonstruktor das Home-Objekt verwendet, um das EJB-Objekt zu erstellen. Das EJB-Objekt wird als Wrapper-Klassenmitglied gespeichert, über das geschäftliche EJB-Methoden aufgerufen werden.
Das Folgende ist Teil des Codes zum Erstellen der Wrapper-Klasse des StockTrader-EJB:
private static Trading.StockTraderHome home;
privater Handel.StockTraderEJB ejbObj;
static StockTraderEJB() {
// Erstellen Sie einen Java Naming (JNDI)-Kontext
Kontextkontext;
context = vmw.j2ee.J2EEUtils.CreateContext(null, null);
Objekt homeObj;
//Holen Sie sich das Home-Objekt vom JNDI-Server
homeObj = context.lookup("ejb/StockTrader");
home = ((trading.StockTraderHome)(homeObj));
}
//Standardkonstruktor: Erstellen Sie eine neue EJB-Instanz
public StockTraderEJB() {
this.ejbObj = home.create();
}
Diese Wrapper-Klasse stellt die Methoden der EJB-Remoteschnittstelle über ihre öffentlichen Methoden bereit. Jede dieser Methoden ruft dann über das EJB-Objekt die entsprechende Geschäftsmethode Ihres EJB auf. Der folgende Code zeigt Ihnen die Stock-Trader-Methode im EJB-Wrapper:
public virtual void buy(string arg_0, int arg_1) {
this.ejbObj.buy(arg_0, arg_1);
}
öffentliche virtuelle Leere verkaufen(string arg_0, int arg_1) {
this.ejbObj.sell(arg_0, arg_1);
}
Visual MainWin ist auch für die Zuordnung von Datentypen zwischen Java und .NET verantwortlich. Wenn beispielsweise eine Ihrer EJB-Methoden ein java.lang.calendar-Objekt als Parameter empfängt, rufen Sie diese Methode mit einem .NET System.DateTime-Objektparameter auf und ordnen sie einem java.lang im Kalenderobjekt zu. Wenn Ihre EJB-Methode anschließend eine java.lang.class zurückgibt, erhalten Sie stattdessen ein System.Type-Objekt.
Debugging-Probleme
Obwohl Visual MainWin die Entwicklung vereinfacht, müssen Sie möglicherweise dennoch Ihre mehrstufigen, gemischten ASP.NET/EJB-Anwendungen debuggen. Mit dem Visual MainWin-Debugger können Sie Ihre Hybridanwendungen in der Visual Studio .NET-IDE debuggen. Sie können Interrupts in Ihrem C#- oder VB.NET-Code festlegen, in EJB-Java-Code einsteigen und Ihre gesamte Anwendung über Sprachgrenzen hinweg debuggen. Und da das Debuggen überall dort vorhanden sein muss, wo das Problem auftritt, kann der Visual MainWin-Debugger an Ihren J2EE-Anwendungsserver angeschlossen werden, unabhängig davon, ob er unter Linux, Unix oder anderen Frameworks ausgeführt wird, solange er auf dem Debugger Just ausgeführt werden kann das Muster.
Abbildung 6. Verwenden des Visual MainWin-Debuggers zum Debuggen von EJB-Quellcode.
Die Anwendung, die Visual MainWin für Sie erstellt, ist eine Standard-J2EE-Servletanwendung – sie kann wie jedes andere J2EE-Servlet über die J2EE Application Server Manager-Konsole veröffentlicht und verwaltet werden Anwendung. Daher können Ihre ASP.NET-Präsentationsschicht und Ihre EJB-Geschäftslogikschicht auf derselben J2EE-Sicherheitsinfrastruktur basieren. Ihre hybriden ASP.NET/EJB-Anwendungen können sich durch die Verwendung der J2EE-Servlet-Authentifizierung auf ein konsistentes Sicherheitsmodell verlassen, und die Benutzer- und Rollendefinitionen Ihres Anwendungsservers können die Sicherheit durch den Ausgleich rollenbasierter Autorisierungsmechanismen gewährleisten.
Zusammenfassung
1. In diesem Artikel wurden Remote-Objekte und -Schnittstellen behandelt. Auch eine lokale Objektnutzung über Visual MainWin ist möglich. Um eine Anwendung zu verteilen, die native Objekte verwendet, müssen Sie eine EAR-Datei (Enterprise Archive) erstellen, die sowohl die WAR-Datei Ihrer Anwendung als auch die JAR-Datei der lokalen EJB enthält.
2. Obwohl Visual MainWin die meisten .NET-Typen Java-Typen zuordnen kann, kann es keine Sammlungstypen zuordnen, da diese Zuordnung zu Leistungseinbußen führen kann. Daher können Sie Java-Sammlungstypen aus Ihrem .NET-Code verarbeiten oder solche Konvertierungen selbst durchführen.
3. Visual MainWin ermöglicht Ihnen die Nutzung von Session-Beans und nicht-transaktionalen Entity-Beans. Transaktionale Entity-Beans können nicht transparent konsumiert werden, daher müssen Sie J2EE-Transaktionsaufrufe manuell codieren. In den meisten Fällen kann jedoch über Session-Beans auf transaktionale Entity-Beans zugegriffen werden, sodass es unwahrscheinlich ist, dass Sie dies tun müssen.